dbwt_kontrollfragen.pdf
Document Details
Uploaded by PalatialMiami
Tags
Full Transcript
Notizen: Datenbanken Vorlesung 1: Einführung Kontrollfragen Was ist der Unterschied zwischen URI, URL und URN? Wofür steht DNS? Was leisten DNS? Welche Domains kann ich in Tests oder einer Dokumentation verwenden? Wie ist eine URL aufgebaut? Ne...
Notizen: Datenbanken Vorlesung 1: Einführung Kontrollfragen Was ist der Unterschied zwischen URI, URL und URN? Wofür steht DNS? Was leisten DNS? Welche Domains kann ich in Tests oder einer Dokumentation verwenden? Wie ist eine URL aufgebaut? Nennen Sie vier Zeichen, die im Teil der Abfrage bei Verwendung mit Parameternamen oder -werten einer URL maskiert werden müssen. Kahoot-Fragen Wofür steht DNS? Domain Name System Mit einer URL werden… …Ressourcen (wie Bilder, Texte, …) adressiert Eine Top-Level-Domain (TLD) steht im Domain-Namen… …hinten 1. Was ist der Unterschied zwischen URI, URL und URN? Uniform Ressource Locator = URL ∙ Aufgabe: Ressource im Netzwerk adressieren (Ort verwenden) ∙ Bsp: https:/www.doi.org/index.html Uniform Ressource Name = URN ∙ Aufgabe: Ressource nach Art und Kennung eindeutig identifizieren (Namen vergeben) ∙ Bsp: urn:doi:10.1000/1 Uniform Resource Identifier = URI ∙ Aufgabe: Ressource eindeutig identifizieren (Name oder Ort) 2. Wofür steht DNS? Was leisten DNS? ∙ DNS = Domain Name System ∙ DNS wandelt den Domainnamen in die IP Adresse um ∙ Domain Name = gibt einer Ressource einen Namen, über die sie zu finden ist 3. Welche Domains kann ich in Tests oder einer Dokumentation verwenden? ∙ TLD = Top Level Domain (z.B..de,.nl,.be) ∙ gliedern sich nach country codes und generic codes ∙ es gibt reservierte TLDs für bestimmte Zwecke ∙ für tests:.test ∙ für dokumentationen:.example ∙ außerdem gibt es noch.invalid für die Konstruktion von ungültigen Domain Names ∙ hinter reservierten TLDs und Domains ist nie eine offizielle Domain registriert 4. Wie ist eine URL aufgebaut? schema://Benutzerkennung@Serveradresse:Portnummer/Pfad?Abfrage#Fragment ∙ Schema = Protokollname (z.B. http, https) ∙ Benutzerkennung = Benutzername + “:” + Passwort + “@” ∙ Serveradresse (z.B. example.com, 149.201.122.100) ∙ Portnummer = “:” + Port ∙ Pfad = “/” + Verzeichnis, Datei ∙ Abfrage = Query, Assoziative Liste von Parametern; “?” + Parameter “=” + Wert * “&” + Parameter 2 + “=” … ∙ Fragment = Anker in HTML; “#” + Fragment 5. Nennen Sie vier Zeichen, die im Teil der Abfrage bei Verwendung mit Parameternamen oder -werten einer URL maskiert werden müssen ∙ Zeichen, die nie ausgetauscht werden: A-Z, a-z, ~, -,., _ & %26 = %3D ? %3F SPACE %20 Vorlesung 2: HTTP Kontrollfragen Wer oder was ist HTTP? Welche Eigenschaften besitzt das HTTP? Was sind HTTP-Anfragemethoden? Welche gibt es? Welche Status-Code-Bereiche gibt es? Nennen Sie jeweils ein Beispiel. Was wird mit Accept gesteuert? Wie funktioniert das? Was sind Mime-Types? Wofür setzt man diese ein? Was ist ein Cookie? Was wird damit gespeichert? Wie wird es übertragen? Nennen Sie drei Beispiele für Header-Felder, die ein Cache von Ressourcen steuern. Nennen Sie 5 Direktiven von Cache-Control. Nennen Sie jeweils ein Beispiel für den Einsatz. Kahoot-Fragen HTTP dient allgemein zur… Übertragung von Daten (wie Bilder, Texte, …) Wofür steht HTTP? Hypertext transfer protocol Mit “Accept: text/*, text/html; q=0.9, application/xml” möchte der Webbrowser als erstes erhalten: application/xml Das folgende ist keine HTTP-Methode: CACHE Der Server schickt “Cache-Control: public, max-age=60”. Das bedeutet unter anderem, dass die Ressource… in geteilten und lokalen Caches gespeichert werden soll 1. Wer oder was ist HTTP? ∙ HTTP = Hypertext Transfer Protocol ∙ ein Protokoll auf Anwendungsebene für verteilte Hypermedia-Systeme ∙ Protokoll für den Austausch von Daten zwischen einem Webbrowser und einem Webserver ∙ definiert, wie Anfragen (Requests) von einem Client an einen Server gesendet werden und wie die Server darauf antworten ∙ Aufbau einer Nachricht: besteht aus Header und Body → Header: enthält Metadaten zur Anfrage/Antwort; menschen- und maschinenlesbar (z.B. Größe des Dokuments, Fehlermeldungen, verwendete Sprache, …) → Body: enthält übertragene Daten (z.B. HTML-Dokument, Bilder, …) HTTP Request-Response Cycle “RR-Cycle” ∙ lesbares Text-format ∙ Standardzyklus 2. Welche Eigenschaften besitzt das HTTP? ∙ generisch: es können unterschiedliche Daten übertragen werden ∙ zustandslos: ein Aufruf steht in keiner direkten Beziehung zu einem anderen Aufruf ∙ erweiterbar: durch Erweiterungen des Headers für andere Einsatzzwecke ∙ standard-port = 80 ∙ mögliche Verhandlung über Datenrepräsentation zwischen Client und Server 3. Was sind HTTP-Anfragemethoden? Welche gibt es? ∙ bestimmen, wie Daten übertragen werden und was beim Webserver mit der angefragten Ressource geschehen soll ∙ GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE ∙ GET: → Ressourcen vom Server anfragen → Parameter werden mit einem ? an die URL angehängt, mehrere Parameter durch & getrennt → übertragene Daten sind Teil der URL und werden in Server-Logs, Verlauf und Cache gespeichert → nicht für sensible Daten benutzen!! ∙ POST: → überträgt Daten der Anfrage im Body, nicht in der URL → geeignet, um große oder nicht-zwischenzuspeichernde Datenmengen an den Server zu senden → kann zusätzlich eine Anfrage enthalten 4. Welche Status-Code-Bereiche gibt es? Nennen Sie jeweils ein Beispiel. ∙ 1xx = Informativ (bsp: 102 Processing) ∙ 2xx = Operation erfolgreich (bsp: 200 OK) ∙ 3xx = Umleitung (bsp: 301 Moved permanently) ∙ 4xx = Client-Fehler (bsp: 404 Not found) ∙ 5xx = Server-Fehler (bsp: 502 bad gateway) 5. Was wird mit Accept gesteuert? Wie funktioniert das? ∙ wird in der Anfrage verwendet ∙ gibt an, welche Formate der Client in der Antwort unterstützt ∙ besteht aus paaren mit zwei werten = MIME-Types 6. Was sind Mime-Types? Wofür setzt man diese ein? ∙ Multipurpose Internet Mail Extension ∙ werden im HTTP Header übertragen ∙ besteht aus Medientyp und Subtyp 7. Was ist ein Cookie? Was wird damit gespeichert? Wie wird es übertragen? ∙ ein Cookie ist eine Textdatei, in der die Session ID des Clients gespeichert wird ∙ so werden Sessions ermöglicht ∙ Beispiel: Artikel bleiben im Einkaufswagen beim öffnen eines neuen Tabs ∙ Cookies gehören zu einer Domain und haben eine Gültigkeitsdauer ∙ client muss bei jedem Request alle auf die Domain zutreffenden Cookies im Request an den Server übermitteln ∙ man Unterscheidet zwischen Session Cookie und Persistent Cookie: → Session Cookie: speicherunge der login-daten oder sitzungs-id, die für eine Erkennung einer Sitzung notwendig sind; werden am ende der Sitzung gelöscht → Persistent Cookie: Speicherung von anwendungseinstellungen (Darstellung/styling, status von Eingabeelementen, …); bleiben länger im Webbrowser 8. Nennen Sie drei Beispiele für Header-Felder, die einen Cache von Ressourcen steuern. ∙ das Header Feld überträgt (potentiell mehrere) einzelne Direktive für die Steuerung des Caches ∙ Unterscheidung: → Request-Direktiven: Client → Server → Response-Direktiven: Server → Client 1. Cache-control:public ∙ erlaubt die Zwischenspeicherung in allen Caches 2. expires ∙ gibt einen Zeitpunkt an, ab dem eine Ressource nicht mehr aktuell ist 3. max-age ∙ spezifiziert die maximale Dauer in Sekunden, die eine Ressource als aktuell betrachtet wird 9. Nennen Sie 5 Direktiven von Cache-Control. Nennen Sie jeweils ein Beispiel für den Einsatz. ∙ public: erlaubt die zwischenspeicherung in allen caches ∙ private: nur für genau den anfragenden client bestimmt ∙ no-cache: zwingt caches den request an den ursprungsserver zuzustellen zur sicherstellung der gültigkeit, bevor eine Kopie freigegeben wird → führt immer zu neuem request, doch bei identischem Etag wird der download vermieden ∙ no-store: keine caches (egal wo) dürfen die Antwort speichern → führt immer zu neuem request ∙ must-revalidate: zusammen mit no-cache und no-store zur deaktivierung des caches Vorlesung 3a: HTML Kontrollfragen Was besagt der Doctype? Wie ist das Grundgerüst in HTML aufgebaut? Welche Sonderzeichen gibt es in HTML? Wie wird ein Kommentar in HTML gesetzt? Wie wird ein Hyperlink gesetzt? Geben Sie drei Beispiele für drei unterschiedliche Arten von Zielen. Über welche Adressarten können Medien angesprochen werden? Geben Sie ein Beispiel für ein einfaches Formular. Erklären Sie, wie die Daten übertragen werden. 1. Was besagt der Doctype? ∙ Anweisung, die am Anfang eines HTML-Dokuments steht ∙ teilt dem Webbrowser mit, welche Version von HTML das Dokument verwendet und bestimmt dadurch, wie der Browser das Dokument interpretieren soll 2. Wie ist das Grundgerüst in HTML aufgebaut? Meine Seite Hallo Welt! ∙ besteht aus: doctype, html, head, title, body ∙ attribut lang gibt die verwendete Sprache des Dokuments an 3. Welche Sonderzeichen gibt es in HTML? ∙ Leerzeichen und Zeilenumbrüche werden vom Webbrowser ignoriert → für Leerzeichen → für Zeilenumbrüche ∙ Zeichen mit einer Bedeutung in html müssen maskiert werden mit html entities → < für < (lower than) → > für > (greater than) → " für Anführungsstriche 4. Wie wird ein Kommentar in HTML gesetzt? 5. Wie wird ein Hyperlink gesetzt? Geben Sie drei Beispiele für drei unterschiedliche Arten von Zielen. ∙ Hyperlinks = Stellen im Dokument, die auf einer andere Seite oder eine andere Stelle im Dokument verweisen ∙ Link enthält ein href Attribut mit einer Referenz auf das verlinkte Dokument ∙ Multimediale Inhalte (Bilder) → ∙ Sprungmarken → Zweitens → Eine Überschrift → können auch mit Fragment in der URL angesteuert werden (example.com#zweitens) ∙ Mailadressen → E-Mail 6. Über welche Adressarten können Medien angesprochen werden? ∙ Multimedia Inhalte werden über Referenzen auf eine Datenquelle in das Dokument eingebunden und durch den Webbrowser dargestellt ∙ bei der Referenzierung von externen Ressourcen gibt es verschiedene Arten: → Vollständige URL (https://www.example.com/) → Protokoll-relativ (//example.com) → Absolute Pfadangaben: absolut zur Basis-URL (basis: https://ww.example.com + /index.html -> https://www.example.com/index.html) → Relative Pfadangaben: relativ zur Basis-URL (basis: https://www.example.com/html/index.html +./info.html -> https://example.com/html/info.html || +../src/grafik.jpg -> https://www.example.com/src/grafik.jpg) 7. Geben Sie ein Beispiel für ein einfaches Formular. Erklären Sie, wie die Daten übertragen werden. Ihre Daten: Name: E-Mail Adresse: ∙ das for-Attribut entspricht dem Wert der id des assoziierten Eingabefeldes (z.B. name) -> verknüpft label mit input ∙ Daten werden anhand der HTTP Methoden GET und POST übermittelt (mit dem attribut “method”) → GET: hängt die Parameter sichtbar an die gesendete URL (als Abfrage/query) an; standard wenn nicht gesetzt → POST: Daten sind unabhängig von der URL; übermittlung von größeren Informationsinhalte möglich (im HTTP body) ∙ Eingabeelemente Formular: → input type=”text”: einzeilige Texteingabe → input type=”email”: eingabe einer email → input type=”url”: eingabe einer URL → input type=”tel”: Eingabe einer Telefonnummer → input type=”password”: Passworteingabe, zeichen sind nicht sichtbar → input type=”hidden”: es wird kein eingabeelement dargestellt, übertragung eines versteckten Werts → input type=”checkbox”: ankreuzbares Kontrollfeld → input type= “radio” value=””: einfache Auswahl aus mehreren Optionen, alle Optionen sind sichtbar → : Einfach oder mehrfachauswahl über ein Dropdown → : mehrzeilige Texteingabe ∙ in den Eingabeelementen stehen Attribute zur Verfügung die die Eingabe überwachen: → autofokus, placeholder, required (= clientseitige formular-validierung) Vorlesung 3b: CSS Kontrollfragen Wofür wird CSS eingesetzt? Welche Selektoren gibt es? Wie werden diese deklariert? Was ist ein Pseudoelement, was ist eine Pseudoklasse? Was ist mit der Kaskade in CSS gemeint? Welche Kombinatoren gibt es und welche Vorteile bieten diese? Wie funktioniert die Vererbung in CSS? Was ist Spezifität in CSS? Wie lautet die Berechnungsvorschrift? Geben Sie ein Beispiel. Wie funktioniert das CSS Grid Layout? Wofür wird es eingesetzt? 1. Wofür wird CSS eingesetzt? ∙ css = cascading style sheets ∙ enthält regeln für die darstellung von html elementen ∙ beschreibt wie html auf einem medium präsentiert wird ∙ definieren von stil, farbe und formen 2. Welche Selektoren gibt es? Wie werden diese deklariert? ∙ universalselektor: *{} → selektiert alle Elemente ∙ typselektoren: element {} → selektiert nach tag-name z.b. div, a, section ∙ klassenselektoren:.class{} → selektiert nach class-Attribute ∙ id-selektor: #id {} → selektiert nach id-attribut ∙ mit Komma können die ausgewählten Elemente mehrerer Selektoren vereinigt werden (alle elementer beier selektoren werden ausgewählt) 3. Was ist ein Pseudoelement, was ist eine Pseudoklasse? ∙ Pseudoklasse:wird verwendet, um einem Element basierend auf seinem Zustand oder seiner Position im Dokument einen speziellen Stil zu verleihen → wird mit “:” geschrieben → :hover ändert den Stil eines Elements, wenn der Benutzer mit der Maus darüber schwebt. → :first-child wählt das erste Kind eines Elements aus ∙ Pseudoelement:ermöglicht es, spezifische Teile eines Elementes zu selektieren und zu gestalten → werden durch Doppelpunkte (::) dargestellt → ::before und ::after werden verwendet, um zusätzlichen Inhalt vor oder nach einem Element einzufügen, ohne dass dieser im HTML-Markup vorhanden ist 4. Was ist mit der Kaskade in CSS gemeint? ∙ 5. Welche Kombinatoren gibt es und welche Vorteile bieten diese? ∙ Kindkombinator: E>F → alle F wenn es ein direktes Kindelement eines E-Elements ist ∙ Nachfahrenkombinator: E F → alle F, wenn es ein Nachfahrenelement eines E-Elementes ist ∙ Nachbarkombinator: E + F → alle F, wenn es im Elementbaum direkt auf ein E-Element folgt, also der direkte Nachbar ist ∙ Geschwisterkombinator: E ~ F → alle F-Elementen die auf derselben Ebene auf ein E-Element folgen ∙ Vorteile: → styling der Webseite ohne Anpassung des HTML textes → vermeidung von Redundanzen 6. Wie funktioniert die Vererbung in CSS? ∙ Css Eigenschaften werden von Eltern an Kindelemente vererbt ∙ dient der vereinfachung: sonst müsste man jedes Element einzeln ansprechen ∙ viele eigenschaften werden vererbt, viele aber nicht → z.B. color ja, border nein 7. Was ist Spezifität in CSS? Wie lautet die Berechnungsvorschrift? Geben Sie ein Beispiel. ∙ Spezifität = allgemeiner Regelsätze besitzen eine geringere Gewichtung als spezifische Regelsätze ∙ jeder Selektor erhält drei Zähler (A, B, C) mit Startwert 0 → bei vorkommen eines id Selektors: A + 1 → bei vorkommen eines Attribut-/Klassenselektors (/Pseudoklasse): B + 1 → bei vorkommen eines Typselektors/Pseudoelements: C + 1 → ausnahme: pseudoklasse :not wird ignoriert (nicht der Inhalt) ∙ es gilt die Reihenfolge A > B > C ∙ Beispiel: 8. Wie funktioniert das CSS Grid Layout? Wofür wird es eingesetzt? ∙ Das CSS Grid Layout ist ein zweidimensionales raster-basiertes Layoutsystem für Webseiten ∙ Vereinfachung zu früheren Möglichkeiten der Positionierung über position und float. ∙ CSS Eigenschaften: → Zur Aktivierung: display: grid; → Konfiguration der Spalten: grid-template-columns: auto | max-content | px | % → Abstand zwischen Spalten und Zeilen (Zwischenraum): grid-gap: px; ∙ auch für komplexe Layouts und responsive design Vorlesung 4: PHP Grundlagen Kontrollfragen Wie beginnt ein PHP Skriptcode? Wie definiere ich eine Variable? Welche Datentypen gibt es? Wie kann ich eine Variable von einem Datentyp in einen anderen konvertieren? Wie definiere ich eine Funktion? Wie kann ich andere PHP-Dateien inkludieren? Welche Kontrollstrukturen stehen zur Verfügung? Wie sehen diese aus? Schreiben Sie eine Funktion, die in einer ungeordneten Liste die Zahlen 0 bis 10 ausgibt. ∙ Php ist eine Skriptsprache, die eine serverseitige Verarbeitung von Anfragen (Requests) erlaubt ∙ steht zwischen client und Datenbank ∙ php ist clientseitig nicht zu sehen ∙ erlaubt dynamische darstellung/darstellung unterschiedlicher Texte 1. Wie beginnt ein PHP Skriptcode? ∙ ∙ aktiviert “php modus”, in dem skriptcode interpretiert und ausgeführt wird - passiert im html modus nicht ∙ End-tag ist optional, wenn nur php code vorhanden ist ∙ kann so in html code geschrieben werden ∙ das skript wird ausgeführt und als Ergebnis erscheint fertiger html quelltext 2. Wie definiere ich eine Variable? $var = “hallo”; ∙ $ gefolgt von namen der Variable ∙ case sensitive ∙ Ausnahme: $this ist eine spezielle Variable, die nicht verändert werden kann ∙ wertzuweisung bei definition nicht dringend nötig → Bsp: $meineVariable; ∙ Geltungsbereich ergibt sich aus dem Kontext, in dem sie definiert wurde 3. Welche Datentypen gibt es? Wie kann ich eine Variable von einem Datentyp in einen anderen konvertieren? Skalare Typen Zusammengesetzte Typen Sonstige Typen Boolean Array Ressource ∙ Wahrheitswert: true/false ∙ bei der Konvertierung zum Typ Boolean gelten die folgenden Objekt Null Werte als false: boolean FALSE, int 0, float 0.0, leerer String, ∙ objektorientierte programmiersprache, bietet Klassen und ∙ repräsentiert eine Variable ohne Wert string “0”, array ohne Elemente, typ NULL Objekte ∙ Variablen können jederzeit auf NULL gesetzt werden Integer ∙ ganzzahlwert mit vorzeichen ∙ php unterstützt auch oktal- (0*), hexadezimal- (0x*) und Binäreingaben (0b*) Callable Iterable Fließkommazahl (float) = double/Gleitkommazahl ∙ kommazahlen ∙ direkter Einsatz des Gleichheitsoperators (==) bei Gleitkommazahlen vermeiden (ungenauigkeit) ∙ stattdessen eine Toleranzschwelle setzen und den absoluten Unterschied mit abs() vergleichen ∙ Bsp: String ∙ Kette von Zeichen ∙ mit einfachen Anführungszeichen findet kein weiteres PHP-Parsing statt ∙ mit doppelten Anführungszeichen wird die Zeichenkette vor der Ausgabe geparst (variablen werden erkannt) ∙ implizite Typumwandlung: → Variablen werden automatisch in einen passenden Typ konvertiert → nützlich aber quelle vieler Fehler ∙ explizite Typumwandlung: → über sogenannte Casts → (int), (integer) = cast zu integer → (bool), (boolean) = cast zu boolean → (float), (double), (real) = cast zu float → (string) = cast zu string → (array) = cast zu array → (object) = cast zu object 4. Wie definiere ich eine Funktion? Vorlesung 5: PHP Konfiguration und Arrays Kontrollfragen Was beinhaltet die php.ini? Wann wird diese Datei gelesen? Nennen Sie drei Beispiele für Einstellungsmöglichkeiten. Was sind Module (Extensions) in PHP? Wofür setzt man diese ein? Nennen Sie drei Beispiele. Wie kann ich auf allgemeine Informationen, auf Serverinformationen oder die Anfrage zugreifen? Wie definiere ich ein Array in PHP? Welche zwei Möglichkeiten gibt es dafür? Wie iteriere ich die Elemente in einem Array? Wie kann ich alle Elemente (Schlüssel und Wert) ausgeben? Nennen Sie zwei Einsatzmöglichkeiten von Arrays in PHP. Nennen Sie 4 Beispiele für Funktionen, welche die Verarbeitung von Arrays erleichtern können. 1. Was beinhaltet die php.ini? Wann wird diese Datei gelesen? Nennen Sie drei Beispiele für Einstellungsmöglichkeiten. ∙ der PHP interpreter liest eine Datei mit PHP Quelltext (.php) ein führt die darin enthaltenen Anweisungen aus ∙ bevor der Interpreter mit der Arbeit beginnt, liest er eine Konfigurationsdatei (php.ini) ein → wird bei jedem Aufruf des Interpreters neu eingelesen ∙ mit der php.ini können viele Aspekte der Übersetzung/Ausführung gesteuert werden 1. Fehlerbehandlung → Ausgaben, Arten, … → error_reporting, display_errors 2. PHP-Short-Tag → Vorlesung 7: PHP Form- und Dateiverarbeitung Kontrollfragen Wo ist der Unterschied zwischen GET und POST bzgl. des Datentransports? Wofür wird GET, wofür POST eingesetzt? Wie stehen GET- und POST-Daten in PHP zur Verfügung? Wie können Daten aus Formularen in PHP überprüft werden? Warum reicht eine Prüfung auf der Clientseite nicht aus? Wie können Rückmeldungen an die Benutzer eines Formulars gesendet werden? Wie werden Daten aus einer Datei gelesen? Wie werden Daten geschrieben? Beschreiben Sie zwei unterschiedliche Schnittstellen aus PHP hierfür. Welche Probleme bestehen allgemein beim Speichern von Informationen direkt in Dateien? 1. Wo ist der Unterschied zwischen GET und POST bzgl. des Datentransports? ∙ GET: → Die Daten werden an die URL als Teil der Query-Parameter angehängt. → Die Daten sind sichtbar in der URL und können als Teil des Lesezeichens gespeichert werden. → Es gibt eine Begrenzung für die Menge an Daten, die in einer URL übertragen werden können. ∙ POST: → Die Daten werden im Body der HTTP-Anfrage übertragen. → Die Daten sind nicht sichtbar in der URL und können nicht als Teil des Lesezeichens gespeichert werden. → Die Übertragungsmenge ist im Allgemeinen größer als bei GET. 2. Wofür wird GET, wofür POST eingesetzt? ∙ GET: → Geeignet für Anfragen, bei denen die Daten einfach abgerufen werden können, ohne die Serverdaten zu ändern. → Wird häufig für Suchanfragen und das Anzeigen von Daten verwendet. ∙ POST: → Geeignet für Anfragen, bei denen die Daten möglicherweise den Serverzustand ändern. → Wird häufig für das Übermitteln von Formulardaten und das Ausführen von Aktionen verwendet. 3. Wie stehen GET- und POST-Daten in PHP zur Verfügung? ∙ über die superglobalen Variablen $_GET und $_POST ∙ werden dort als Schlüssel-Werte-Paare in einem Array gespeichert ∙ Transport über $_GET und $_POST ist gleichzeitig möglich 4. Wie können Daten aus Formularen in PHP überprüft werden? Warum reicht eine Prüfung auf der Clientseite nicht aus? ∙ Vorteile Prüfung mit HTML: → Eingaben werden früh überprüft → kein unnötiger Datentransfer (Entlastung der Vermittlung) → keine unnötige Datenverarbeitung (Entlastung des Servers) ∙ Daten können von unterschiedlichen Quellen gesendet werden: einfache Manipulation der Zeichenketten ↪ sinnvoll, aber nicht verlässlich für die Webanwendung Eingabeüberprüfung ∙ Überprüfung, ob das Element in $_POST/$_GET überhaupt vorhanden ist → ansonsten kommt es zu einem Zugriffsfehler in PHP → Null-Coalescing-Operator (??) bietet in PHP eine verkürzte Schreibweise für eine Prüfung und den Zugriff auf ein Element eines Arrays an ∙ dann Überprüfung der Eingaben: → Eingabelänge (minimal, maximal) → Datentyp (Zeichenkette, Zahl, Fließkommazahl, …) → Wertebereiche (wie Geburtsjahr > 1910) → Allgemeine Muster/Formate (wie E-Mail, URL, ISBN, Datum, …) → Referenzprüfung (wie Existenz referenzierter Datensätze: Gibt es den angegebenen Artikel?) ∙ vor einer Eingabeüberprüfung wird gewöhnlich eine Vorverarbeitung durchgeführt, in der häufige Eingabefehler korrigiert werden ∙ PHP Erweiterung: Filter stellt die Funktion filter_var zur Verfügung → FILTER_VALIDATE_INT → FILTER_VALIDATE_FLOAT → FILTER_VALIDATE_BOOLEAN → FILTER_VALIDATE_URL → FILTER_VALIDATE_IP → FILTER_VALIDATE_MAC Vorverarbeitung ∙ leerzeichen vor oder hinter der Eingabe → Lösung: trim ∙ ungültige Zeichen wie z.B. “,” anstatt “.” → Lösung: str_replace ∙ Formatkorrekturen wie z.B. Datum im falschen Format → Lösung: str_replace ∙ Groß- und Kleinschreibung → Lösung: strtoupper, strtolower 5. Wie können Rückmeldungen an die Benutzer eines Formulars gesendet werden? ∙ bei der Überprüfung wird ein leerer Array verwendet, welcher gefüllt wird, wenn ein Fehler gefunden wird ∙ am Ende kann ermittelt werden, ob eine Fehlermeldung notwendig ist, indem man prüft ob daten in dem Array vorhanden sind ∙ zusätzlich: hidden-Eingabewert mit dem Namen submitted, um zu prüfen ob das Formular tatsächlich abgeschickt wurde ∙ Nutzer:innen sollen mögliche fehlermeldungen sowie die vorherige eingabe im Formular erhalten 6. Wie werden Daten aus einer Datei gelesen? Wie werden Daten geschrieben? Beschreiben Sie zwei unterschiedliche Schnittstellen aus PHP hierfür. Drei Schritte: 1. Datei öffnen: ∙ Pfad ausgeben ∙ Modus auswählen (Schreiben oder Lesen) 2. Datei lesen (oder schreiben) ∙ Vollständig oder teilweise 3. Datei schließen ∙ Ressourcen wieder freigeben ∙ Beispiel: Datei lesen - Beispiel: Datei schreiben Funktionen für Dateioperationen Funktion Beschreibung fopen öffnet eine Datei zum lesen oder zum schreiben abhängig vom gewählten modus gibt die geöffnete Datei als ‘Resource’ zurück Modi: r = öffne eine Datei nur zum Lesen ∙ Dateizeiger steht auf dem Anfang der Datei w = öffne eine Datei nur zum Schreiben ∙ Löscht den Inhalt einer Datei oder erzeugt eine neue Datei ∙ Dateizeiger steht am Anfang der Datei a = öffne eine Datei nur zum Schreiben ∙ bestehende Datei bleibt erhalten ∙ erzeugt eine Datei, falls diese nicht existiert ∙ dateizeiger steht auf dem Ende der Datei x = öffne eine neue Datei zum Schreiben ∙ existiert die Datei bereits, führt der aufruf zu einem Fehler fgets lese die Datei bis zum nächsten Newline (\n) oder bis die maximale Anzahl zu lesender Zeichen erreicht ist fgetc lese das nächste Zeichen von dem übergebenen Dateizeiger (Resource) fwrite schreibt eine Zeichenkette in die Datei fclose Schließt eine geöffnete Resource 7. Welche Probleme bestehen allgemein beim Speichern von Informationen direkt in Dateien? ∙ keine effiziente parallele Verwendung → schreiben und lesen muss synchronisiert werden ∙ schlechte Wiederverwendbarkeit für andere Anwendungen → Anpassungen des Dateiformats bei allen Anwendungen gleichzeitig durchführen ∙ Kein Zugriffsschutz (Keine Berechtigungen) ∙ Schlechte Performance bei vielen Daten in einer Datei (> 1 Mio. Datensätze) ∙ Keine einfache Suche/Manipulation/Löschung ∙ Keine Konsistenzprüfung Vorlesung 9: Datenbanken Kontrollfragen Welche Probleme bestehen bei der Verarbeitung von Dateien? Warum sollte man ein Datenbankmanagementsystem einsetzen? Wo ist der Unterschied zwischen Datenbank, Datenbankmanagementsystem und Informationssystem? Was besagen die 9 Regeln nach Codd? Welche Ebenen existieren bei der Schemaarchitektur? Warum sind diese Ebenen getrennt? Welche Vor- und Nachteile besitzen Datenbanken? 1. Welche Probleme bestehen bei der Verarbeitung von Dateien? ∙ Suche: jede Datei muss gefunden, geöffnet und durchsucht werden ∙ Mehrbenutzerbetrieb: bei vielen Programmen können mehrerer Benutzer nicht gleichzeitig auf die Daten in der gleichen Datei zugreifen → Vergessen von Änderungen, Lesen von alten Daten → Zusammenführung von Änderungen von zwei Nutzer:innen sehr komplex → Datenschutz und -sicherheit nicht gewährleistet → Redundanzen (= erhöhter Speicherbedarf + erhöhter Aufwand zur synchronisation) → Inkonsistenzen → unterschiedliche Anwendungsformate (Versionen) erschweren die Arbeit 2. Warum sollte man ein Datenbankmanagementsystem einsetzen? ∙ Datenorganisation: Strukturierte Speicherung von Daten ∙ Effizienz: Schneller und gezielter Datenzugriff ∙ Datenintegrität: Gewährleistung der Konsistenz und Genauigkeit der Daten ∙ Sicherheit: Zugriffssteuerung und Datenschutz ∙ Gleichzeitiger Zugriff: Mehrere Benutzer können gleichzeitig auf die Datenbank zugreifen ∙ Datenanalyse: Unterstützung bei der Auswertung und Extraktion von Informationen ∙ Skalierbarkeit: Anpassungsfähigkeit an wachsende Datenmengen ∙ Datenbankabfragen: Strukturierte Abfrage- und Berichtsfunktionen ∙ Transaktionsmanagement: Verwaltung von Datenänderungen und -aktualisierungen ∙ Flexibilität: Anpassungsfähigkeit an sich ändernde Geschäftsanforderungen 3. Wo ist der Unterschied zwischen Datenbank, Datenbankmanagementsystem und Informationssystem? Datenbank ∙ Sammlung von Daten, die untereinander in einer logischen Beziehung stehen ∙ Daten werden von einem Datenbankverwaltungssystem (DBMS) verwaltet Datenbankmanagementsystem ∙ Softwaresystem, das Benutzer:innen das Erstellen von und die Pflege einer Datenbank ermöglicht ∙ Definition, erzeugung und manipulation von Datenbanken Informationssysteme ∙ dient der rechnergestützten Erfassung, Speicherung, Verarbeitung, Pflege, Analyse und Anzeige von Informationen ∙ soziotechnisches System ∙ umfasst menschliche und maschinelle Komponenten (Teilsystem) für die optimale Bereitstellung von Informationen und Kommunikation 4. Was besagen die 9 Regeln nach Codd? 1. Integrierte Datenhaltung ∙ Einheitliche Verwaltung aller von den Anwendungen benötigten Daten ohne Redundanzen. → z.B. Name des Kunden an nur einer Stelle in einer möglichen Art speichern ∙ DBMS muss die Möglichkeit bieten zusammenhängende Daten schnell und effizient zu verknüpfen. → Vielzahl komplexer Beziehungen zwischen Daten 2. Operationen (Sprache) ∙ Stellt eine Schnittstelle (Datenbanksprache) zur Verfügung: → Datenabfrage (DQL) → Datenmanipulation (DML) → Verwaltung der Datenbank (DDL) → Berechtigungssteuerung (DCL) ∙ Sollte eine Vielzahl an Benutzerschnittstellen zur Verfügung stellen für Nutzer:innen mit unterschiedlichen technischen Kenntnissen 3. Katalog ∙ Ermöglicht den Zugriff auf die Datenbeschreibung 4. Benutzersichten ∙ Unterschiedliche Klassen von Benutzer:innen brauchen unterschiedliche Sichten auf die Daten → z.B. nur bestimmte Ausschnitte aus dem Datenbestand 5. Integritätssicherung ∙ Gewährleistung der Korrektheit von Datenbankinhalten und korrekte Ausführung von Änderungen 6. Datenschutz (Daten Zugriffskontrolle) ∙ Verhindern von unautorisierten Zugriff auf die Daten in einer Datenbank ∙ Rechte lassen sich auch über die Benutzersichten definieren. 7. Transaktionen ∙ Datenbankänderungen, die eine Einheit bilden, können als Transaktion zusammengefasst werden: > Werden als Ganzes ausgeführt > Bei Erfolg persistent gespeichert 8. Synchronisation (Mehrbenutzersicherheit) ∙ Konkurrierende Transaktionen koordinieren (z.B. Schreibkonflikte auf gemeinsam genutzte Daten vermeiden) 9. Datensicherung ∙ Bei auftretenden Hard- oder Softwarefehlern einen korrekten Datenbankzustand wiederherstellen. 5. Welche Ebenen existieren bei der Schemaarchitektur? Warum sind diese Ebenen getrennt? Externe Ebene ∙ Sichten von Benutzer:innen auf das konzeptuelle Schema ∙ anwendungsspezifischer Ausschnitt aus dem gesamten Datenbestand (übrige Daten bleiben verborgen) Konzeptuelle Ebene ∙ beschreibt die Struktur der gesamten Datenbank ∙ beschreibt die Objekt, Datentypen, Beziehungen, Operationen und Integritätsbedingungen ∙ verbirgt die details der physischen Speicherung Interne Ebene ∙ physikalische Speicherstruktur ∙ Nutzung des physischen Datenmodells ∙ details zur Datenspeicherung/Zugriffspfade ∙ legt fest, wie Daten auf dem Datenträger gespeichert sind Durch die Schemaarchitektur werden Änderungen von Datenbank und Anwendung voneinander entkoppelt ∙ logische Datenunabhängigkeit = das konzeptuelle Schema kann geändert werden ohne externe Schemata/Anwendungsprogramme anzupassen ∙ physische Datenunabhängigkeit = das interne Schema kann modifiziert werden, ohne dass Schemaänderungen auf der konzeptuellen/externen Ebene erforderlich sind 6. Welche Vor- und Nachteile besitzen Datenbanken? Vorteile Nachteile ∙ Datenhaltung zentral (ermöglicht z.B. Datenschutz und ∙ Lizenz- /Service- und Hardwaregebühren Datensicherheit) ∙ weniger effizient für generalisierte Anwendungen ∙ Nutzung von Standards (Allzweck-Software) ∙ Effizienter Datenzugriff ∙ bei konkurrierenden Anforderung kann das Datenbanksystem nur ∙ kürzere Softwareentwicklungszeiten durch Wiederverwendung für einen Teil der Anwendungsprogramme optimiert werden ∙ Hohe Flexibilität ∙ eingearbeitetes und qualifiziertes Personal ist erforderlich ∙ Hohe Verfügbarkeit (erhöhte Wirtschaftlichkeit) (Datenbankdesigner, Datenbankadministrator) ∙ Zentralisierung fördert Verwundbarkeit Vorlesung 10: Relationale Datenbanken Kontrollfragen Was ist eine Relation? Was ist ein Relationsschema? Was ist ein Attribut? Wofür benötige ich einen Primärschlüssel? Wofür einen Fremdschlüssel? Welche Regeln gelten für einen Fremdschlüssel? Was bedeutet referentielle Integrität? Welche Basisoperationen stehen in der relationales Algebra zur Verfügung? Geben Sie jeweils ein Beispiel. Welche Mengenoperationen stehen zur Verfügung? Wann sind zwei Relationen vereinigungsverträglich? Welche unterschiedlichen Joins gibt es? Geben Sie jeweils ein Beispiel. 1. Was ist eine Relation? Was ist ein Relationsschema? Was ist ein Attribut? Relation ∙ Mengen im mathematischen Sinne → hat keine Ordnung → es gibt keine Duplikate ∙ Tabelle in einer relationalen Datenbank ∙ besteht aus Zeilen und Spalten ∙ Jede Relation sollte einen eindeutigen Namen haben ∙ Menge aller Zeilen Relationsschema ∙ Tabellenkopf ∙ definiert die Struktur einer Relation, es gibt an, welche Attribute in der Relation enthalten sind und welchen Datentyp jedes Attribut hat ∙ spezifiziert, welche Attribute als Schlüssel dienen können, um Datensätze eindeutig zu identifizieren Attribut ∙ eine Spaltenüberschrift ∙ benannte Datenkomponente, die eine Eigenschaft eines Objekts oder Entitätsdatensatzes darstellt ∙ Jedes Attribut hat einen bestimmten Datentyp, der den erlaubten Wertebereich festlegt ∙ Eine Zeile der Tabelle = Tupel ∙ Ein Eintrag in der Tabelle = Attributwert ∙ Datenbank = Menge von Relationen und Relationsschemata 2. Wofür benötige ich einen Primärschlüssel? Wofür einen Fremdschlüssel? ∙ Schlüssel = eine oder mehrere Spalten (Attribute) in einer Datenbanktabelle, die verwendet werden, um einzelne Datensätze eindeutig zu identifizieren ∙ Ein Schlüssel ist eine identifizierende Attributmenge, die minimal ist (Minimalität = keine Untermenge der Attribute stellt bereits einen Schlüssel dar) ∙ in einer Relation können mehrere identifizierende Schlüssel existieren -> Schlüsselkandidaten → sind gemeinsam eindeutig → enthalten keine Nullwerte Primärschlüssel ∙ Entitätsintegrität = Primärschlüsselbedingung ∙ Schlüssel, der die Identifizierung in einer Relation übernehmen soll ∙ muss für das DBMS ausgezeichnet werden ∙ in der Relationenschreibweise werden Attribute des Primärschlüssels durch unterstreichung gekennzeichnet Fremdschlüssel ∙ Referentielle Integrität = Fremdschlüsselbedingung ∙ eine Attributmenge, die einen Primärschlüssel einer anderen Relation referenziert ∙ ein Fremdschlüssel wird durch gestrichelte Unterstreichung gekennzeichnet 3. Welche Regeln gelten für einen Fremdschlüssel? ∙ fremdschlüssel und referenzierter primärschlüssel haben den gleichen Wertebereich ∙ fremdschlüssel kann Teil des Primärschlüssels sein (unterliegt dann weiterhin den Bedingungen des Primärschlüssels) ∙ ist möglicherweise nichtschlüsselattribut und darf auch Nullwerte aufweisen ∙ kann aus mehreren Attributwerten bestehen ∙ eine Relation kann mehrere Fremdschlüssel besitzen ∙ kann der Primärschlüssel der eigenen Relation referenzieren ∙ kann jeden Schlüsselkandidaten einer Relation referenzieren (auch wenn dieser nicht Primärschlüssel ist) 4. Was bedeutet referentielle Integrität? ∙ Referentielle Integrität ist ein Datenbankkonzept, das sicherstellt, dass Beziehungen zwischen Tabellen durch die Verwendung von Schlüsseln aufrechterhalten werden ∙ gewährleistet, dass Fremdschlüssel in einer Tabelle gültige Primärschlüsselwerte in einer verknüpften Tabelle referenzieren ∙ definiert Aktionen bei Änderungen oder Löschungen von Datensätzen ∙ dies wird durch Constraints in Datenbanken, meistens durch Primär- und Fremdschlüssel, umgesetzt 5. Welche Basisoperationen stehen in der relationales Algebra zur Verfügung? Geben Sie jeweils ein Beispiel. Operation Beschreibung Schreibweise Beispiel Selektion (σ) Auswahl von Tupeln aus einer 𝑟′ ≔ σ𝑃(𝑟) ⊆ 𝑟 σAlter>25 (Personen) Relation basierend auf einer Auswahl aller Personen über 25 Bedingung Jahre Projektion (π) Auswahl von Attributen, 𝑟′ ≔ π𝑅'(𝑟) πName, Alter(Personen) Reduzierung auf bestimmte Auswahl der Spalten Name und Spalten Alter aus der Tabelle Personen Umbenennung (ρ) Umbenennung von Attributen Attributebene: ρnachname←name(Personen) oder Relationen 𝑟′ ≔ ρ𝐴'←𝐴 (𝑟) Attribut “Name” wird in “Nachname” umbenannt Relationsebene: ρMitarbeiter(Personen) 𝑟′ ≔ ρ𝑟' (𝑟) Relation “Personen” wird in “Mitarbeiter” umbenannt 6. Welche Mengenoperationen stehen zur Verfügung? Operation Beschreibung Schreibweise Beispiel Vereinigung (∪) Kombination aller Tupeln zweier 𝑟′ ≔ 𝑟1 ∪ 𝑟2 A ∪ B (wobei A und B Relationen ohne Duplikate R’ = R1 = R2 Relationen sind) Kombination aller Tupel aus A und B ohne Duplikate Differenz (−) Entnimmt aus Relation r1 die 𝑟′ ≔ 𝑟1 − 𝑟2 A−B (wobei A und B Relationen Tupel, die auch in Relation r2 R’ = R1 = R2 sind) enthalten sind Entfernen aller Tupel von B aus A Kreuzprodukt (×) Multipliziert die Tupel der 𝑟′ ≔ 𝑟1 ✕ 𝑟2 A×B (wobei A und B Relationen Kartesisches produkt Relation r1 mit den Tupeln der 𝑅' ≔ 𝑅1 ∪ 𝑅2 sind) Relation r2 Bildung aller möglichen Tupelkombinationen zwischen A und B ∙ Eine DB-Sprache ist relational vollständig, wenn sie mindestens die relationenorientierten Operatoren Projektion, Selektion und Umbenennung und die mengenorientierten Operatoren Vereinigung, Differenz und kartesisches Produkt umsetzt. 7. Wann sind zwei Relationen vereinigungsverträglich? ∙ Zwei Relationen sind vereiningungsverträglich, wenn … 1. Wenn sie vom gleichen Grad sind (besitzen die gleiche Attributanzahl) 2. Die Datentypen und Wertebereiche der korrespondierenden Attribute kompatibel sind 3. Die Attribute denselben Namen besitzen 8. Welche unterschiedlichen Joins gibt es? Geben Sie jeweils ein Beispiel. Operation Beschreibung Schreibweise Beispiel Schnitt (∩) Enthält nur die gemeinsamen 𝑟′ ≔ 𝑟1 ∩ 𝑟2 = 𝑟1 − (𝑟1 − 𝑟2 ) A∩B Tupel beider Relationen R’ = R1 = R2 Enthält nur die Tupel, die in A und B vorhanden sind Theta Join (⨝) Zusammenfügen von Relationen 𝑟′ ≔ 𝑟1⋈𝑃 𝑟2 = σ𝑃(𝑟1✕𝑟2 ) A⨝A.ID 100; Ändern von Daten UPDATE Tabellenname SET Spaltenzuweisungsliste WHERE Bedinungung Data Definition Language (DDL) ∙ Erstellen der Datenbank erfolgt mit: CREATE DATABASE [IF NOT EXISTS] Datenbankname [CHARACTER SET charset_name] [COLLATE collation_name] → verwendeter Zeichensatz → zu verwendende Vergleichstabelle ∙ Anlegen von Tabellen erfolgt mit: CREATE TABLE Tabellenname ( *(Spaltenname Datentyp [DEFAULT Wert] [Spaltenbedingungen]) ) Datentypen Datentyp Beschreibung INT Ganzzahliger Datentyp, um ganze Zahlen zu speichern. BOOLEAN Datentyp für Wahrheitswerte (True oder False). DOUBLE Präziser Gleitkommazahl-Datentyp für Dezimalzahlen. VARCHAR Variable Zeichenkette für Textvariablen mit variabler Länge. TIMESTAMP Datentyp zur Speicherung von Datum und Uhrzeit. im Format YYYY-MM-DD HH:MM:SS Löschen von Tabellen DROP TABLE Tabellenname {RESTRICT | CASCADE} ∙ RESTRICT verhindert das löschen wenn es in der Datenbank Schemaobjekte gibt, die von dieser tabelle abhängig sind → z.B. Sichten, Routinen oder Fremdschlüsselbedingungen ∙ CASCADE sorgt dafür, dass abhängige Schemaobjekte kaskadierend mitgelöscht werden → andere werden invalidiert der angepasst Sequenzen ∙ datenbankinternes Objekt, das automatisch neue Werte für ein Attribut erzeugt ∙ ist ein "Zähler", der bei 1 beginnt zu zählen ∙ Bei Verwendung eines neuen Werts inkrementiert der Zähler automatisch um (standardmäßig) 1. ∙ Eine Sequenz wird durch das Schlüsselwort AUTO_INCREMENT bei der Definition von Tabellen erzeugt ∙ z.B. bei ID ∙ Das Aufsetzen und Verwenden einer Datenbank geschieht in der Regel in den folgenden Schritten: 1. Datenbank(-managementsystem) installieren. 2. Bei DBMS (mit einem Client) anmelden. 3. Datenbank (bzw. Schema) anlegen. → CREATE DATABASE … 4. Datenbank auswählen. → USE schemaname; 5. Tabelle anlegen. → CREATE TABLE … 6. Daten eintragen. → INSERT INTO … 7. Daten abfragen. → SELECT * FROM … Vorlesung 12: Weitere SQL Grundlagen Kontrollfragen Worin unterscheidet sich SQL bzgl. der Ausführung z.B. gegenüber PHP? Wie können Daten gruppiert werden? Geben Sie drei Beispiele. Wie kann ich eine Nebenbedingung an gruppiert abgefragte Daten stellen? Nennen Sie drei Aggregatfunktionen und geben Sie jeweils ein Beispiel mit Daten Wie werden Daten aus mehreren Tabellen abgefragt? Welche Möglichkeiten der Verbindung gibt es? Welche Operationen der Relationalen Algebra entspricht dies? Wie kann ich Nebenbedingungen für eine Tabelle in sql erzeugen? Nennen Sie drei Einstellungsmöglichkeiten. Wie kann ich die Struktur einer Tabelle nachträglich verändern? 1. Worin unterscheidet sich SQL bzgl. der Ausführung z.B. gegenüber PHP? ∙ php ist ein prozedurale Programmiersprache → man definiert, wie eine Aufgabe gelöst werden muss ∙ sql ist eine deskriptive Programmiersprache → man teilt dem DBMS per SQL mit, was man als Ergebnis haben möchte → Formulierung auf logischem Weg → keine Angaben über die Art der Ausführung von relationalen Operationen: das DBMS wählt selbstständig den besten weg aus ∙ die Operationen zum Extrahieren von Zeilen und Spalten müssen sequenziell durchgeführt werden (z.B. relationale Algebra) → relationale Algebra ist prozedural 2. Wie können Daten gruppiert werden? Geben Sie drei Beispiele. Wie kann ich eine Nebenbedingung an gruppiert abgefragte Daten stellen? ∙ es gibt immer: 1. ein Attribut, nach dem gruppiert wird 2. ein Attribut, das aggregiert wird GROUP BY gruppierungsliste HAVING selektionsbedingung ∙ GROUP By gruppiert Ergebnisse von Anfragen unter Anwendung einer Aggregatfunktion Beispiele: ∙ um eine weitere Bedingung an den aggregierten Wert zu stellen verwendet man das Schlüsselwort HAVING 3. Nennen Sie drei Aggregatfunktionen und geben Sie jeweils ein Beispiel mit Daten Funktion Beschreibung Beispiel COUNT (X) liefert die Anzahl der Werte der Spalte X SELECT KundenID, COUNT(BestellungsID) AS AnzahlBestellungen FROM Bestellungen GROUP BY KundenID; ->gibt anzahl der Bestellungen pro Kunde aus COUNT (*) liefert die Anzahle der Zeilen in der Tabelle SELECT COUNT(*) AS GesamtanzahlMitarbeiter FROM Mitarbeiter; ->die Gesamtzahl an mitarbeitern wird gezählt SUM (X) liefert die Summe der Werte der Spalte X SELECT ProduktID, SUM(Menge) AS VerkaufteMenge FROM Verkäufe GROUP BY ProduktID; ->gibt an, wie viel von einem Produkt verkauft wurde AVG(X) liefert das arithmetische Mittel der Werte der Spalte X SELECT KategorieID, AVG(Bewertung) AS Durchschnitt FROM Bewertungen GROUP BY KategorieID; ->gibt die durchschnittliche Bewertung einer Produktkategorie an MIN(X) liefert den kleinsten Wert der Spalte X SELECT KundenID, MIN(Datum) AS ÄltesteBestellung FROM Bestellungen GROUP BY KundenID; ->gibt die älteste Bestellung eines Kunden an MAX() liefert den größten Wert der Spalte X SELECT ProduktID, MAX(Preis) AS HöchsterPreis FROM Verkäufe GROUP BY ProduktID; ->gibt das teuerste Produkt an 4. Wie werden Daten aus mehreren Tabellen abgefragt? Welche Möglichkeiten der Verbindung gibt es? Welche Operationen der Relationalen Algebra entspricht dies? ∙ mithilfe verschiedener Joins können Daten aus mehreren Tabellen in einer Abfrage zusammengeführt werden (INNER) JOIN ∙ gibt nur diejenigen Datensätze zurück, die in beiden Tabellen übereinstimmen LEFT JOIN ∙ gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück ∙ wenn keine Übereinstimmung gefunden wird, werden NULL-Werte für Spalten aus der rechten Tabelle zurückgegeben RIGHT JOIN ∙ gibt alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück ∙ wenn keine Übereinstimmung gefunden wird, werden NULL-Werte für Spalten aus der linken Tabelle zurückgegeben FULL JOIN ∙ gibt alle Datensätze aus beiden Tabellen zurück, wobei NULL-Werte für nicht übereinstimmende Spalten verwendet werden CROSS JOIN/kartesisches Produkt ∙ kombiniert jeden Datensatz aus der linken Tabelle mit jedem Datensatz aus der rechten Tabelle. Es gibt keine explizite Verknüpfungsbedingung Relationenalgebra und SQL Relationenalgebra Anfragesprache SQL Projektion: πx,y,z (R) SELECT x,y,z FROM R Selektion: σx>5 (R) SELECT * FROM R WHERE x > 5 Join: R ⨝R.nr = S.nr S SELECT R.*, S.* FROM R, S WHERE R.nr = S.nr Umbenennung: ρnummer←nr (R) SELECT nr AS nummer FROM R 5. Wie kann ich Nebenbedingungen für eine Tabelle in sql erzeugen? Nennen Sie drei Einstellungsmöglichkeiten. ∙ Nebenbedingungen = Constraints ∙ formulieren Integritätsbedingungen und dienen der Sicherung der semantischen Korrektheit gespeicherter Daten ∙ PRIMARY KEY: einzelne oder mehrere Attribute dienen als Primärschlüssel ∙ NOT NULL: spaltenwert darf nicht null sein ∙ UNIQUE: spaltenwert muss eindeutig sein ∙ REFERENCES (FOREIGN KEY): Spalte und Spaltenmenge als Fremdschlüssel verwenden → NO ACTION/RESTRICT: jede Anweisung, die zu einer Verletzung führt, wird zurückgewiesen → CASCADE: Anweisung wird kaskadierend durchgeführt, so dass die Fremdschlüsselbedingung gilt → SET NULL: Anweisung wird durchgeführt und Fremdschlüssel werden auf NULL gesetzt (NULL muss erlaubt sein) → SET DEFAULT: betroffene Fremdschlüssel werden auf den Standardwert der Fremdschlüsselspalte gesetzt = Referentielle Aktionen (ON UPDATE/ON DELETE) ∙ CHECK: benutzerdefinierbare Bedingungen auf Spaltenwerte 6. Wie kann ich die Struktur einer Tabelle nachträglich verändern? ∙ ALTER TABLE Tabellenname → ADD [COLUMN] Spaltendefinition → ALTER COLUMN Spaltenname Änderung → DROP [COLUMN] Spaltenname {RESTRICT | CASCADE} → ADD [CONSTRAINT Name] Tabellenbedingung → DROP CONSTRAINT Name {RESTIRCT | CASCADE} Beispiel: ADD CONSTRAINT ∙ Constraints immer eindeutig benennen, damit diese später bei Änderungen eindeutig angesprochen werden können Vorlesung 13: Entwurf von Datenbanken Kontrollfragen Wofür wird ein ER-D eingesetzt? Welche Elemente gibt es? Benennen Sie alle. Welche Kardinalitäten existieren? Nennen Sie alle und jeweils zwei praktische Beispiele. Wo ist der Unterschied zwischen der Min-Max Notation und der Chen Notation? Was ist eine schwache Entität? Nennen Sie ein Beispiel. Wofür wird eine Generalisierung und Spezialisierung eingesetzt? Welche Fälle können auftreten? 1. Wofür wird ein ER-D eingesetzt? ∙ Grundlage für das Design der Datenbank (Entwurfsmodell) ∙ bessere Verständigung zwischen Auftraggeber:innen / Anwender:innen und Entwickler:innen ∙ um vor der Programmierung einen Überblick über Datenstruktur zu erhalten ∙ planung mit Kunden abstimmen 2. Welche Elemente gibt es? Benennen Sie alle. Element Beschreibung Notation Entitätstyp = Tabelle ∙ Abstraktion einer Sache aus der realen Welt ∙ beschreiben Mengen gleichartiger Entitäten ∙ Entität = Tupel ∙ besitzt Eigenschaften ∙ benennung meistens im Plural ∙ benennung sollte einheitlich sein Attribute ∙ werden Entitätstypen und Beziehungstypen zugeordnet: Charakterisierung, Identifizierung und Klassifizierung ∙ beschreibt sie durch eine eigenschaft näher ∙ besitzen einen eindeutigen Namen ∙ Zeitinvariant Abgeleitete Attribute ∙ Attribut, das aus den anderen Attributen einer Entität berechnet werden Mehrwertige Attribute ∙ wenn für eine Entität zu einem Attribut mehrere Werte existieren Zusammengesetzte Attribute ∙ wenn für eine Entität mehrere Werte existieren die strukturell verschieden sind Optionale Attribute ∙ bei einem optionalen Attribut darf der gespeicherte Wert auch explizit sein ∙ eine Attributmenge, die eine eindeutige Identifizierung einer Entität ermöglicht und minimal ist ∙ manchmal können schlüssel “künstlich” hinzugefügt werden Primärschlüssel ∙ besteht aus einem einzigen Attribut und ist eindeutig ∙ jeder Entitätstyp muss einen Schlüssel besitzen Beziehungen ∙ logische Verknüpfung von zwei oder mehr Entitäten ∙ beschreiben den Zusammenhang zwischen Entitätstypen ∙ können auch selbst Attribute haben ∙ lesenrichtung: von links nach rechts 3. Welche Kardinalitäten existieren? Nennen Sie alle und jeweils zwei praktische Beispiele. 4. Wo ist der Unterschied zwischen der Min-Max Notation und der Chen Notation? ∙ die min max notation ist eine Erweiterung der Chen Notation ∙ Chen Notation: ∙ Min-Max Notation: → präzisere Steuerungsmechanismen durch Benennung der Kardinalitäten (Anzahl der Beziehungen) → wertebereich: Minimum “0”, Maximum “*” 5. Was ist eine schwache Entität? Nennen Sie ein Beispiel. ∙ ein schwacher entitätstyp kann nur in Verbindung mit einem starken Entitätstypen existieren ∙ werden gelöscht wenn die zugehörigen besitzenden Entitäten gelöscht werden ∙ Eigenschaften: → haben keinen eigenen Schlüssel → lassen sich nur in Verbindung mit einem starken Entitätstypen identifizieren → existenzabhängig ∙ Darstellung: ∙ eine Doppellinie kennzeichnet die Richtung zur schwachen Entität hin 6. Wofür wird eine Generalisierung und Spezialisierung eingesetzt? Welche Fälle können auftreten? ∙ Generalisierung: eine Menge als ähnlich betrachteter Objekte wird zu einem neuen, generischen Objekt zusammengefasst ∙ gleichartige Entitätstypen werden zusammengefasst um Redundanzen zu minimieren ∙ es gelten alle Eigenschaften und alle Beziehungen des generalisierten Einzelobjekts auch für das spezialisierte Einzelobjekt → besitzen den gleichen Primärschlüssel ∙ Gegenteil der Generalisierung = Spezialisierung ∙ Super- und Subtypen sind im ER Diagramm über Kanten mit Richtungssymbolen verbunden ∙ Disjunkte Mengen ∙ in einer disjunkten Beziehung zwischen zwei Entitäten kann ein bestimmtes Element nur zu einer der beteiligten Entitäten gehören, nicht zu beiden ∙ es gibt keine gemeinsamen Elemente zwischen den beiden Entitäten in dieser Beziehung Nicht-disjunkte Mengen ∙ in einer nicht disjunkten Beziehung kann ein bestimmtes Element zu beiden beteiligten Entitäten gehören ∙ es gibt gemeinsame Elemente zwischen den Entitäten in dieser Beziehung Vorlesung 15: Security Kontrollfragen Warum sollte man seine Daten schützen? Wie lauten die primären Schutzziele? Beschreiben Sie diese. Nennen Sie zwei Projekte, die sich im Bereich Security engagieren. Was leisten diese Projekte zum Beispiel? Wie kann Ihnen das bei Ihrer Anwendungsentwicklung helfen? Erklären Sie eine SQL-Injection. Was kann als Folge passieren? Erklären Sie einen XSS Angriff. Was sind die Voraussetzungen für einen solchen Angriff? Was sind Gegenmaßnahmen? Erklären Sie einen CSRF-Angriff. Was sind die Voraussetzungen für einen solchen Angriff? Was sind Gegenmaßnahmen? 1. Warum sollte man seine Daten schützen? Folgen von datendiebstahl ∙ Identitätsdiebstahl → Angreifer handeln im Namen der Person: Verträge abschließen oder kündigen, Bestellungen durchführen, (Falsch-)Informationen verbreiten, Straftaten begehen... ∙ Kreditkartenbetrug → Angreifer verwenden als Zahlungsmittel die erbeuteten Kreditkarteninformationen. ∙ Erpressung → Angreifer fordern Lösegeld, da sonst Geheimnisse weitergegeben werden oder das Leben bedroht wird. Gründe für unsichere Webanwendungen ∙ Unzureichende Anforderungen ∙ Fehlendes Fachwissen im Thema Security ∙ Hohe Entwicklungsgeschwindigkeit moderner Webentwicklungen / Hohe Fluktuation von Technologien ∙ Unterschätzung der Gefahr ∙ Spannungsfeld: Usability, Wirtschaftlichkeit und Sicherheit 2. Wie lauten die primären Schutzziele? Beschreiben Sie diese. 3. Nennen Sie zwei Projekte, die sich im Bereich Security engagieren. Was leisten diese Projekte zum Beispiel? ∙ Owasp (Open Web Application Security Project) → gemeinnützige Organisation mit einer globalen Community, die sich für die Verbesserung der Sicherheit von (Web-)Anwendungen engagiert → hat die Entwicklung dieses Bereiches in den letzten Jahren maßgeblich beeinflusst ∙ Bundesamt für Sicherheit in der Informationstechnik → gibt verpflichtende Vorgaben für die öffentliche Verwaltung und Empfehlungen für die deutsche Wirtschaft heraus Aufgaben/zweck ∙ Begrifflichkeiten und Definitionen zur Kommunikation bzgl. Anwendungssicherheit ∙ Methoden und Prozesse für die Untersuchung der Anwendungssicherheit ∙ Priorisierungen bzgl. der Wachsamkeit bei Aspekten ∙ Checklisten für die Überprüfung von Software ∙ Werkzeuge für die Überwachung und Überprüfung von Sicherheitsaspekten ∙ Meldungen über neue Schwachstellen in bestehender Software ∙ Veröffentlichung von Best Practices 4. Wie kann Ihnen das bei Ihrer Anwendungsentwicklung helfen? 5. Erklären Sie eine SQL-Injection. Was kann als Folge passieren? ∙ bei sql injections gelangen Parameter über eingabefelder ungefiltert an die Datenbank ∙ angreifern gelingt es dabei, mit Sonderzeichen aus dem Datenkanal in den Steuerkanal einzubrechen ∙ mögliche Folgen: → Auslesen sensibler Daten → Hinzufügen und Manipulation von Daten → Aufruf einer Remote Shell → Löschen von Datenbanken und Tabellen → Herunterfahren der Datenbank Gegenmaßnahmen ∙ Eingabemaskierung & -validierung durchführen → potentiell schädliche Zeichen werden durch unschädliche Zeichen ersetzt → Funktion mysqli_real_escape_string → verwendung von safelists: enthält alle erlaubten Werte ∙ Prepared Statements verwenden → parameter werden sicher vorbereitet ∙ Objektrelationalen Mapper verwenden ∙ Rechte der Datenbank feingranular einstellen -> mögliche Auswirkungen werden begrenzt 6. Erklären Sie einen XSS Angriff. Was sind die Voraussetzungen für einen solchen Angriff? Was sind Gegenmaßnahmen? ∙ HTML code injection; sobald man html code injizieren kann, kann man auch javascript code einfügen ∙ mit JavaScript lässt sich die Webanwendung fast beliebig steuern: Eingabe durchführen, Operationen auf dem Webserver anstoßen, … ∙ beim persistenten XSS wird der Schadcode direkt in der Datenbank gespeichert und bei anderen Nutzer:innen direkt automatisch ausgeführt Gegenmaßnahmen ∙ htmlspecialchars(...) → alle parametrieren ausgaben vom Server an den Client enkodieren → Die Stellen in der Anwendung, an denen dynamischer HTML Code ausgegeben wird, gesondert freischalten. → HTML-Steuerzeichen " (Anführungszeichen) , > (Größer), effizienter Zugriff ∙ als Wert steht die logische Adresse (= Datei + Position) des gesuchten Datensatzes im Index Typen 1. Einfacher Index (INDEX): es gibt einen Index 2. Unique Index (UNIQUE): Attributwert ist eindeutig, kann aber NULL sein 3. Primärschlüssel (PRIMARY KEY): UNIQUE, INDEX, und NOT NULL → NULL-wert ist niemals gleich zu etwas anderem - auch nicht einem anderen NULL Wert, deswegen ist NULL quasi UNIQUE 4. Volltext Index (FULLTEXT): für die Volltextsuche ∙ indexe und Nebenbedingungen sollten stets einen eindeutigen Namen haben, damit diese später eindeutig angesprochen und verändert werden können Verwendung ∙ wenn in der Anwendung häufig ein bestimmtes Attribut oder mehrere Attribute angefragt wird ∙ bei kleinen Anwendungen wenig Auswirkung ∙ bei großen tabellen sinnvoll ∙ wenn ein index nicht benutzt wird soll er entfernt werden 7. Wo ist der Unterschied zwischen einem Index und UNIQUE? ∙ UNIQUE ist eine Art von Index ∙ Index erlaubt auch doppelte Einträge Vorlesung 18: Transaktionen Kontrollfragen Was bewirkt eine Transaktion? Wie lautet die Definition? Nennen Sie ein Beispiel für eine Transaktion, wo diese benötigt wird. Was sind die Synchronisationsprobleme? Welche gibt es? Was ist das ACID-Prinzip? Wofür steht das Akronym? Nennen Sie jeweils ein Beispiel. Wie werden Transaktionen in SQL gesteuert? Was sind die Schlüsselworte? Was sind die Isolationslevel? Was bewirken diese? Wie setzt man das Isolationslevel in SQL? Warum sollte man das Isolationslevel anpassen wollen? Welchen Kompromiss muss jede Anwendung bzgl. der Isolationslevel eingehen? 1. Was bewirkt eine Transaktion? Wie lautet die Definition? Nennen Sie ein Beispiel für eine Transaktion, wo diese benötigt wird. ∙ bei vielen gleichzeitigen Zugriffen auf eine Datenbank → z.B. Reisebuchung, Überweisung eines Geldbetrages → überweisung über 20€ von Hans an Gabi, Gabi erhält den betrag aber gleichzeitig werden von Hans Konto 400€ abgebucht (er hat keine 20€ mehr) ∙ “Im Datenbankbereich versteht man unter dem Begriff der Transaktion eine Folge von Operationen, die eine Datenbank von einem konsistenten Zustand in einen möglicherweise neuen, aber wieder konsistenten Zustand überführt” Ablauf ∙ Seriell: Eine Transaktion nach der nächsten → in der praxis nicht anwendbar, da eine Transaktion potentiell alle anderen Transaktionen für immer warten lässt ∙ Gemischt: Mehrere Transaktionen verschränkt Aufbau ∙ Beginn, beliebig viele Statements (bestehen aus vielen Operationen) Ende 2. Was sind die Synchronisationsprobleme? Welche gibt es? ∙ Konflikte zwischen Lese- und Schreiboperationen verschiedener Transaktionen 1. Lost Update: Verlorengegangene Änderungen ∙ wenn zwei Transaktionen zunächst ein Datenobjekt lesen, unabhängige Berechnungen durchführen und den neuen Wert in die Datenbank zurückschreiben ∙ als ergebnis steht der zuletzt geschriebene Wert in der Datenbank (erste Änderung geht verloren) 2. Dirty Read: Verwendung von nicht freigegebenen Änderungen ∙ tritt auf, wenn nicht freigegebene Änderungen verwendet werden ∙ z.B: → T1 schreibt Daten → T2 liest Daten, die von einer anderen noch nicht beendeten Transaktion T1 geschrieben wurden → T1 abbricht ab → T2 liest inkonsistente Daten 3. Non-Repeatable Read: Inkonsistentes Lesen ∙ wenn eine Transaktion ein Datenobjekt wiederholt liest und dieses Objekt in der Zwischenzeit von einer anderen Transaktion geändert wird ∙ das mehrfache lesen desselben Datenobjektes liefert unterschiedliche Ergebnisse ∙ entsteht durch eine aktualisierung bestehender Datensätze 4. Phantom Read: Lesen von neuen oder gelöschten Einträgen ∙ kann auftreten wenn während einer Transaktion T1 eine andere Transaktion T2 Daten einfügt oder löscht, die T1 eigentlich hätte berücksichtigen müssen ∙ Datenbank löst Probleme von selber 3. Was ist das ACID-Prinzip? Wofür steht das Akronym? Nennen Sie jeweils ein Beispiel. ∙ vier Eigenschaften, die für eine korrekte Synchronisation und die Gewährleistung von Fehlertoleranz sichergestellt sein müssen ∙ Atomicity, Consistency, Isolation, Durability Eigenschaft Beschreibung Atomicity/Atomarität ∙ eine Folge von Operationen (Transaktion) soll entweder ganz oder gar nicht ausgeführt werden ∙ bei Abbruch einer Transaktion wird die Datenbank auf den Zustand vor Beginn dieser Transaktion zurückgesetzt → als wäre die Ausführung nicht gestartet worden ∙ wenn die Transaktion einen Effekt auf die Datenbank hat, wird dieser nur dann nach außen (für Benutzer:innen und auch Anwendungen) sichtbar, falls die Transaktion vollständig abgearbeitet werden konnte Consistency/Konsistenz ∙ Mit dem Ende einer Transaktion (also auch bei Abbruch) müssen alle Integritätsbedingungen erfüllt sein ∙ Während der Transaktion können Integritätsbedingungen kurzzeitig verletzt werden ∙ Eine Transaktion muss die Datenbank in einem konsistenten Zustand hinterlassen Isolation/Isolation ∙ Bei der Ausführung einer Transaktion in einer Mehrbenutzerumgebung sollten Nutzer:innen den Eindruck haben, dass diese/r alleine (exklusiv) mit der Datenbank arbeitet ∙ Verschiedene ausführende Prozesse führen gleichzeitig Änderungen an der Datenbank durch ∙ Nebenläufige Transaktionen beeinflussen sich (logisch) nicht ∙ Sicherstellen, dass es keine Konflikte gibt (Transaktionen müssen so ausgeführt werden als würden sie nacheinander - seriell ausgeführt) Durability/Persistenz ∙ Nach Abschluss der Transaktion sollen alle durchgeführten Änderungen dauerhaft in der Datenbank auf dem externen Speicher festgeschrieben sein ∙ Die gespeicherten Effekte überleben "jeden" danach auftretenden Hard- oder Softwarefehler ∙ Dies ist insbesondere im Zusammenhang mit der Pufferverwaltung von Bedeutung, da Seiten nach Transaktionsende durchaus im Puffer verbleiben können Beispiel A → die Überweisung soll vollständig oder gar nicht durchgeführt werden (Atomarität) C → die Integritätsbedingung (Konsistenz) muss erfüllt sein (z.B. Dispokredit nicht überschreiten) I → eine mögliche parallel durchgeführte Transaktion darf nicht zu Fehlern führen (Isolation) D → die Überweisung muss dauerhaft in der Bank-Datenbank gespeichert sein (Persistenz) 4. Wie werden Transaktionen in SQL gesteuert? Was sind die Schlüsselworte? ∙ werden in SQL durch spezielle Kommandos explizit gesteuert Kommando Aufgabe COMMIT schließt die Transaktion ab ROLLBACK ruft die Transaktion zurück START TRANSACTION / BEGIN beginnt Transaktion; ist bereits eine Transaktion aktiv wird die aktuelle Commited und eine neue gestartet AUTOCOMMIT Standardeinstellung, jedes einzelne Statement wird unmittelbar committed kann man einstellen mit SET AUTOCOMMIT = 1 oder 0 (0 heisst alles Statements müssen extra commited werden) wechselt man auf autocommit = 1 werden alle aktiven Transaktionen committed CREATE, ALTER, DROP lösen in MariaDB implizit ein Commit aus INSERT INTO fügt Daten in die Datenbank ein SELECT auswahl von Daten UPDATE Aktualisierung von Daten DELETE löscht Daten 5. Was sind die Isolationslevel? Was bewirken diese? Wie setzt man das Isolationslevel in SQL? 1. Read uncommitted → Schwächste Stufe: Zugriff auf nicht festgeschriebene Daten möglich. (Dirty Read, Non-Repeatable Read, … möglich) → mögliche Synchronisationsprobleme: Dirty Read, None-Repeatable Read, Lost update, Phantom read 2. Read committed → Nur Lesen von endgültig festgeschriebenen Werte. (kein Dirty Read möglich; aber Non-Repeatable Read, Phantom Read möglich) → mögliche Synchronisationsprobleme: None-Repeatable Read, Lost update, Phantom read 3. Repeatable read → Keine Veränderung von Daten, die von einer anderen Transaktion gelesen wurden. (Phantom Read möglich; alle anderen nicht möglich) → mögliche Synchronisationsprobleme: Phantom read 4. Serializable → Es treten keine Synchronisationsprobleme auf. Keine Transaktion kann Daten einfügen oder löschen, die im betrachteten Schlüsselbereich liegen. Garantierte Serialisierbarkeit → mögliche Synchronisationsprobleme: keine - einstellung mit: 5. Warum sollte man das Isolationslevel anpassen wollen? ∙ ständige Umsetzung der ACID-Forderungen in Datenbanken kostet Ressourcen (Rechenzeit, Hauptspeicher) ->Performance leidet ∙ Isolationslevel schwächen die ACID-Forderungen gezielt ab ∙ höherer Durchsatz/performance 6. Welchen Kompromiss muss jede Anwendung bzgl. der Isolationslevel eingehen? ∙ je höher das Isolationslevel, desto höher die Konsistenz ∙ es werden bewusst Synchronisationsprobleme in Kauf genommen Vorlesung 19: Sessions und Anmeldung Kontrollfragen Was ist eine Session in PHP? Wie wird eine Session gestartet und gestoppt? Wie kann der Server den Client identifizieren? Wie greife ich auf Daten in der Session zu? Weshalb muss die Session PHP so früh im Skript gestartet werden? Was kann sonst passieren? Welches Problem tritt auf, wenn ein Client viele Anfragen gleichzeitig stellt, die alle die Sessiondaten verwenden? Aus welchen Seiten sollte eine Anmeldung bestehen? Wie speichern wir Passwörter in der Datenbank ab? Was ist eine Rainbow-Table? Was ist ein Salt? 1. Was ist eine Session in PHP? Wie wird eine Session gestartet und gestoppt? ∙ Eine sitzung wird gestartet, wenn der Benutzer eine Anfrage sendet ∙ Serverseitig werden die Daten der eindeutigen ID zugeordnet → PHP verwendet einen Array zur Speicherung dieser Daten ∙ Beginn der Session: session_start(); ∙ Ende der Session: session_destroy(); → Sitzungsdaten werden gelöscht → session cookie wird weiterverwendet, beim nächsten session_start bleibt die ID erhalten 2. Wie kann der Server den Client identifizieren? ∙ Benutzer:innen erhalten einen Cookie mit einer eindeutigen ID, welche den/die Benutzer:in eindeutig auf dem Server identifiziert → wird im webbrowser gespeichert und bei jeder Anfrage an den Server automatisch mitgeschickt → so können Anfragen eindeutig den Benutzer:innen zugeordnet werden ∙ bleibt nach session_destroy() erhalten ∙ hat der Benutzer Cookies deaktiviert, kann die Session-ID nicht im Cookie transportiert werden ∙ Alternativer Mechanismus: In allen Formularen und allen URLs der Webseite wird die Session-ID eingefügt → SID = Konstante, die bei fehlenden Cookies mit SESSIONNAME = SESSIONID ersetzt wird 3. Wie greife ich auf Daten in der Session zu? Weshalb muss die Session PHP so früh im Skript gestartet werden? Was kann sonst passieren? ∙ Zugriff über den Array $_SESSION ∙ muss immer einer der ersten Aufrufe in PHP sein -> vor der ersten Ausgabe → sonst könnter der HTTP Header schon verschickt sein, dann kann kein Cookie mehr gesetzt werden ∙ server legt in einem konfigurierten Pfad eine Datei mit den Sessiondaten ab (genau eine Sessiondatei pro session) ∙ array $_SESSION wird in einen String konvertiert und in die entsprechende Sessiondatei geschrieben ∙ das Laden der Sessiondaten geschieht beim Aufruf von session_start() ∙ Sessiondaten können an unterschiedlichen Orten gespeichert werden: → Datei (standardmäßig eingestellt) → Datenbank: Relationale Datenbank oder Redis (Key-Value-Store) → Eigener Handler 4. Welches Problem tritt auf, wenn ein Client viele Anfragen gleichzeitig stellt, die alle die Sessiondaten verwenden? ∙ die Sessiondatei wird durch PHP beim session_start() bis zum Ende der Skriptausführung geblockt → erst dann wird die nächste Anfrage bearbeitet 5. Aus welchen Seiten sollte eine Anmeldung bestehen? ∙ zentrales einschalten von Sessions anwendungsweit durch einfügen von session_start() in den FrontController, bevor der Aufruf des Webbrowsers an eine Methode eines Controllers weitergegeben wird 1. /myprofile: geschützter Bereich → abfrage auf das notwendige Recht 2. /login: Darstellung Anmeldemaske → stellt ein Formular für die Eingabe der Anmeldedaten bereit → die Meldung, ob es bei der vorherigen Anmeldung zu einem Fehler kam, liest man aus der Session (nicht via URL abfragen) → Formular “action” weist auf /check_login 3. /check_login: Überprüfe Anmeldedaten → Überprüfung vergleicht die Eingabewerte mit den entsprechenden gespeicherten Werten in der Datenbank 6. Wie speichern wir Passwörter in der Datenbank ab? ∙ passwörter sollen in der Datenbank stets verschlüsselt gespeichert sein, niemals im Klartext ∙ berechnung von Hash-Werten ∙ Benutzer setzt Passwort in der Anwendung -> Passwort-Hash sha1(“”) berechnung und anschließend in der DB speichern ∙ Benutzer meldet sich an und gibt Passwort ein -> Hash für Passwort berechnen sh1(“”) und mit gespeichertem Wert vergleichen 7. Was ist eine Rainbow-Table? Was ist ein Salt? ∙ Rainbow-Tables enthalten Millionen von Passwörtern und deren zugehörigen Hash-Wert → Rückrechnung von Hash zu Passwort ist damit (oft) möglich → auch andere verfahren helfen bei diesem Problem nicht weiter ∙ Behebung: einfügen von einem Salt vor der berechnung des Hashs ∙ salt sollte bei jeder Installation (eines Produkts) unterschiedlich und zufällig sein -> soll nicht erraten werden können → oft eine beliebige (automatisch erzeugte) Zeichenkette, die entweder einmal für die gesamte Anwendung oder pro Benutzer bei der Kontoerstellung erzeugt wird ∙ anschließend Vergleich oder Speicherung Speicherung von Daten ∙ es werden nur Daten gespeichert, die nutzerspezifisch, flüchtig und sitzungsbezogen sind ∙ Es sollten keine Daten in der Session gespeichert werden, die auch nach der nächsten Anmeldung wieder zur Verfügung stehen sollen (wie oft ein Warenkorb) Ablauf einer Anmeldung 1. Navigation → Benutzer:in navigiert zur Anmeldung oder zu einem geschützten Bereich 2. Authentisierung → Eingabe der Anmeldedaten (häufig mindestens Name und Passwort) 3. Authentifizierung → Überprüfung, ob die Eingabedaten korrekt sind 4. Autorisierung → Benutzer:in erhält Rechte 5. Verwendung der zusätzlichen Rechte 6. Abmeldung → Löschung der erhaltenen Rechte Vorlesung 20: Namespaces & Paketverwaltung Kontrollfragen Was ist ein Namespace? Wofür wird dieser eingesetzt? Welche Konvention bzgl. Namen von Namespaces gibt es? Was bewirkt der Autoloader in PHP? Was ist der Composer? Wie definiere ich im Composer eine Abhängigkeit? Welcher ist der Standard-Operator? Warum benötige ich eine Paketverwaltung? Geben Sie drei Beispiele für Operatoren und Bereiche, wie Versionen im Composer gewählt werden können. Erhalten wir pro Paket bei Auswahl einer Version (wie ^1) immer die ganz aktuellste Version? Begründen Sie! Worin liegt der Unterschied zwischen der composer.json und composer.lock? Was besagt Semantic Versioning? Wie können Sie einen Konflikt in den Abhängigkeiten auflösen? 1. Was ist ein Namespace? Wofür wird dieser eingesetzt? ∙ Sprachkonstrukt, um unterschiedliche Entitäten (wie Klassen, Funktionen oder Konstanten), die denselben Namen haben, voneinander zu unterscheiden und sie eindeutig ansprechen zu können ∙ case sensitive Ziele ∙ Vermeidung von Namenskollisionen zwischen Klassen/Funktionen/Konstanten von eigenem Code, bestehenden Standard-PHP-Konstrukten oder von Drittanbietern ∙ Möglichkeit, einen Alias (oder einen Kurznamen) für sehr lange namen einzuführen, die angelegt wurden, um das erste Problem zu umgehen → kann die Lesbarkeit von Quelltext erhöhen Beispiel Fully Qualified Class Name (\)*\ ∙ Beispiel: → FQCN lautet: DBWT\Bib\Request Globaler Namespace 2. Welche Konvention bzgl. Namen von Namespaces gibt es? ∙ ein namespace pro Datei ∙ die Namen der Namespaces spiegeln die Verzeichnisnamen wieder ∙ pro Datei darf nur eine Klasse enthalten sein ∙ z.B. die Datei /controller/product/OverviewProductController.php enthält genau eine Klasse "OverviewProductController” und genau einen Namespace: controller\product; 3. Was bewirkt der Autoloader in PHP? ∙ Mechanismus, der automatisch Klassen lädt, wenn sie zum ersten Mal im Code referenziert werden, ohne dass der Entwickler explizit require oder include verwenden muss ∙ Mit z.B. spl_autoload_register() können selbstentwickelte Klassen-Lader registriert werden, die beim Instanziieren einer unbekannten Klasse (die noch nicht inkludiert wurde) automatisch aufgerufen werden ∙ Ist eine Klasse einem Namespace zugeordnet, so erhält die registrierte Autoloader-Funktion ebenso den Namespace der Klasse als Parameter ∙ Bei Instanziierung von DbConnection wird der registrierte Klassen-Lader gerufen. Der Pfad zur Klasse DbConnection kann Dank der Einhaltung der Konvention "FQCN entspricht Pfad- und Dateiname“ automatisch aufgelöst werden 4. Was ist der Composer? Wie definiere ich im Composer eine Abhängigkeit? Welcher ist der Standard-Operator? ∙ Composer ist ein Werkzeug zur Verwaltung von Abhängigkeiten in PHP für ein Projekt ∙ vermeidung von Kollisionen: → ersten Teil des Paketnamens: der Name des Herstellers oder des/der Autor:in → zweiter Teil: Name der Bibliothek ∙ Konfiguration einer Abhängigkeit im Composer: → version der Abhängigkeit kann explizit angegeben werden → das * bedeutet, dass die Version >= 20.0 und , >=, B aufheben 2) Benötigte Version von A ->B anheben auf (^2) 3) Abhängigkeit C ->B aufheben Vorlesung 21: SQL, Views, Stored Procedures Kontrollfragen Welche Mengenoperationen gibt es? Nennen Sie jeweils ein Beispiel. Was bewirkt eine View (bzw. Sicht) in einer Datenbank? Was sind die Vor- und Nachteile von Views? Wie kann ich Daten in einer View aktualisieren? Was ist der Unterschied zwischen Funktionen und Prozeduren? Wie können Funktionen/Prozeduren in der Datenbank definiert werden? Was sind die Probleme, wenn wir Geschäftslogiken der Anwendung in den Stored Procedures implementieren? 1. Welche Mengenoperationen gibt es? Nennen Sie jeweils ein Beispiel. Befehl Funktion Beispiel UNION Vereinigung SELECT * FROM Tabelle_A UNION SELECT * FROM Tabelle_B; INTERSECT Durchschnitt SELECT * FROM Tabelle_A INTERSECT SELECT * FROM Tabelle_B; EXCEPT Differenz SELECT * FROM Tabelle_A EXCEPT SELECT * FROM Tabelle_B; DISTINCT Standardwert SELECT DISTINCT Spalte1, Spalte2 Doppelte EInträge werden FROM Tabelle; eliminiert ALL Doppelte Einträge bleiben SELECT * FROM Tabelle_A erhalten UNION ALL SELECT * FROM Tabelle_B; ∙ Voraussetzung für Mengenoperationen: → jedes SELECT Statement muss dieselbe Anzahl an Spalten besitzen → die Spalten müssen dieselben Datentypen besitzen → die Spalten müssen in derselben Reihenfolge ausgewählt sein → ↯ Relationale Algebra: Spaltennamen müssen nicht gleich benannt werden ∙ einsetzen, wenn mehrere einzelne Abfrageergebnisse (z.B. aus mehreren Tabellen)zusammengetragen werden sollen 2. Was bewirkt eine View (bzw. Sicht) in einer Datenbank? ∙ definition von unterschiedlichen Sichten für unterschiedliche Gruppen von Benutzer:innen ∙ enthalten bestimmten Ausschnitte aus dem Datenbestand oder strukturieren ihn auf eine bestimmte Weise für die jeweilige Anwendung ∙ im externen Schema der Datenbank definiert 3. Was sind die Vor- und Nachteile von Views? Vorteile ∙ auf views können Abfragen wir auf Tabellen formuliert werden ∙ ändern sich Daten in der beteiligten Tabelle einer View, so sind Daten auch direkt in der View aktuell ∙ das gespeicherte Statement für eine View wird zum Abfragezeitpunkt der stets neu ausgeführt ∙ views kapseln komplexe SQL Abfragen und geben diesen einen Namen, die Nutzer:innen der Datenbank wie Tabellen ansprechen ∙ unterstützen die logische Datenunabhängigkeit ∙ Mittel des Datenschutzes: → Zugriffseinschränkung auf bestimmte Daten → Nutzer:innen haben Zugriff auf die view aber nicht auf die Tabelle Nachteile ∙ Auf Views können keine Indizes erstellt werden ∙ Komplexe Views können die Abfrageleistung beeinträchtigen ∙ Enthält die View ein SELECT * und erhält die abgefragte Tabelle ein neues Feld, so wird dieses nicht dargestellt ∙ Eine View kann ein ORDER BY enthalten. Verwendet die Abfrage selbst eine ORDER BY, so wird die Sortierung der View ignoriert 4. Wie kann ich Daten in einer View aktualisieren? ∙ INSERTs/UPDATEs auf Views sind nach dem SQL Standard möglich ∙ jede Änderung auf einer View muss auf den zugrundeliegenden Tabellen abgebildet werden können → View-Update-Problem ∙ Bedingungen für die Ausführung von INSERTS und UPDATES auf Views: → besteht nur aus Selektionen, die genau auf einer Tabelle ausgeführt werden (und verwendet z.B. keine UNION) → enthält weder Duplikatelimination noch Gruppierung (wie DISTINCT, GROUP BY) → enthält keine arithmetischen Operationen oder Aggregatfunktionen. (wie a + b, SUM, AVG) 5. Was ist der Unterschied zwischen Funktionen und Prozeduren? Prozeduren ∙ Möglichkeit, komplexe Operationen auszuführen und Programmlogik anzuwenden ∙ Prozedur wird direkt in der Datenbank ausgeführt und benötigt keine Rückkehr in die aufrufende Anwendung → Höherer Performance (da die DBMS-Optimierung genutzt werden kann und kein Kontextwechsel stattfindet) → Weniger Netzwerk-Last (Latenzen werden reduziert) → Bessere Kapselung und Erhöhung der Datensicherheit sowie des Datenschutzes ∙ Stored Procedures führen (mehrere) SQL-Statements hintereinander aus und erlaube die Formulierung von Geschäftslogiken in der Datenbank Unterschied Stored Procedure Function ∙ Können keinen, einen oder mehrere ∙ Müssen einen Wert zurückgeben Rückgabewerte haben ∙ Nur Eingabeparameter ∙ Besitzen Ein- und Ausgabeparameter ∙ Keine Transaktionen ∙ Transaktionen sind möglich ∙ Kein Aufruf einer Stored Procedure aus einer ∙ Aufruf von Stored Procedures sowie von Function möglich Functions möglich ∙ Verwendung in SELECT, WHERE, HAVING ∙ Keine Verwendung in SELECT, WHERE, möglich HAVING möglich 6. Wie können Funktionen/Prozeduren in der Datenbank definiert werden? Prozeduren ∙ eingabeparameter mit Schlüsselwort: IN ∙ ausgabeparameter mit Schlüsselwort: OUT ∙ Globale Variablen: → sitzungsvariablen (beginnend mit @) sind gültig innerhalb der Verbindungssitzung → setzen einer Sitzungsvariablen mit SET und @ → Werte aus der Datenbanken können in variablen geladen werden und via SELECT ausgegeben werden ∙ DECLARE werden lokale Variablen innerhalb einer Prozedur deklariert ∙ unterschied Sitzungsvariablen vs lokale Variablen ∙ Kontrollstrukturen: Struktur Beschreibung BEGIN … END startet automatisch eine Transaktion blöcke können verschachtelt werden BEGIN NOT ATOMIC … END startet keine Transaktion innerhalb des BEGIN-blocks IF Prädikat_1 THEN SQL-Anweisung_1 Verzweigung basierend auf einer Bedingung [ELSEIF Prädikat_2 THEN SQL-Anweisung_2] … [ELSEIF Prädikat_n THEN SQL-Anweisung_n] [ELSE SQL-Anweisung_n+1] END IF; CASE value Verzweigung basierend auf unterschiedlichen Werten oder Bedingungen WHEN Prädikat_1 THEN SQL-Anweisung_1 … [WHEN Prädikat_n-1 THEN SQL-Anweisung_n-1] [ELSE SQL-Anweisung_n] END CASE; ITERATE kann in LOOP, REPEAT und WHILE Konstrukten verwendet werden “durchlaufe die Schleife nochmal” Verwendet das label um zu erkennen, ab welcher Anweisung die Wiederholung starten soll ∙ Aufruf einer Prozedur - Beispiel ∙ Löschen der Prozedur → DROP PROCEDURE Prozedurname { RESTRICT | CASCADE } Functions ∙ CREATE FUNCTION legt eine Funktion an, die einen Rückgabewert via RETURNS liefert ∙ nach RETURNS muss der Typ des Rückgabewerts angegeben werden ∙ mit RETURN am Ende der Funktion wird die angegebene Variable zurückgegeben ∙ Arbeitet auf Tupel-Ebene ∙ Aufruf von Funktionen in MariaDB: DO oder SELECT funktionsname → DO ist eine Abkürzung für SELECT, liefert jedoch kein Ergebnis zurück und ist schneller in der Ausführung ∙ Einbinden von externen Funktionen → allgmein können Funktionen aus externen Bibliotheken als datenbankseitige Funktion aufgerufen werden → so können auch Funktionen aus Java-Programmen aufgerufen werden ∙ Löschen von Funktionen aus der Datenbank → DROP FUNCTION Funktionsname { RESTRICT | CASCADE } 7. Was sind die Probleme, wenn wir Geschäftslogiken der Anwendung in den Stored Procedures implementieren? ∙ Der Geschäftslogik wird an unterschiedliche Stellen der Anwendung verteilt: Eine Fragmentierung passiert. Wo steht welche Geschäftslogik? (z.B Formatierung von vollständigen Namen) ∙ Dadurch steigt die Komplexität der Anwendung, da Operationen auf den Daten aus Sicht der Geschäftslogik verdeckt ausgeführt werden. ∙ Die Sprache ist in den unterschiedlichen Datenbanken eher verschieden → sollen mehrere Datenbanken unterstützt werden, so muss die Logik mehrfach implementiert werden → führt zu Redundanzen und verschlechtert die Wartbarkeit Vorlesung 22: Normalisierung Kontrollfragen Welche Anomalien gibt es? Nennen Sie jeweils ein Beispiel. Was ist das Problem an Anomalien? Was bedeutet “funktional abhängig”? Was “voll funktional abhängig”? Welche Normalformen gibt es? Wann ist ein Datenmodell normalisiert? Wann ist ein Datenmodell in 2. Normalform? Was ist eine transitive Abhängigkeit? Wann ist das Datenmodell in 3. Normalform? Wann ist ein Relation in BNCF? 1. Welche Anomalien gibt es? Nennen Sie jeweils ein Beispiel. ∙ Löschanomalie → Beim gezielten Löschen von Informationen gehen ungeplant und möglicherweise unbemerkt Aussagen verloren, die weiter benötigt werden → z.B. bei der Löschung eines Mitarbeiters aus der Datenbank wird die gesamte Abteilung gelöscht, wenn der Mitarbeiter als einziges in dieser Abteilung ist ∙ Einfügeanomalie → erfordert Daten, die nicht zum Objekt gehören und deshalb evtl. auch (noch) nicht verfügbar sind. Abhängigkeiten von Daten werden nicht erkannt und verletzt → z.B. durch einfügen eines neuen Mitarbeiters wird versehentlich eine neue Abteilung geschaffen “Marketing & Vertrieb” ∙ Aktualisierungsanomalie → Eine einzige logische Änderung betrifft meist viele Tupel.Verändert man nicht alle betroffenen Tupel gleichermaßen, so ist der Datenbestand logisch widersprüchlich (inkonsistent). → z.B. unterschiedliche Formatierung des selben Abteilungsnamens beim einfügen von mitarbeiterdaten Vermeidung von Anomalien ∙ das Relationsschema wird in eine höhere Normalform überführt und dabei optimiert, was auf der Normalformlehre nach Codd beruht: → Geschieht durch Zerlegung → Beseitigung von Redundanzen bei Nichtschlüsselattributen → Um Zusammenhänge nicht zu verlieren, müssen die Relationsschemas durch Fremdschlüssel verbunden werden