999 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			999 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Datenbanksysteme
 | ||
| date: Wintersemester 20/21
 | ||
| author: Robert Jeutter
 | ||
| ---
 | ||
| 
 | ||
| # Was sind Datenbanken - Grundlegende Konzepte
 | ||
| ## Überblick
 | ||
| - Daten = logisch gruppierte Informationseinheiten
 | ||
| - Bank = Sicherheit vor Verlust, Dienstleistung für mehrere Kunden, (langfristige) Aufbewahrung
 | ||
| 
 | ||
| Ohne Datenbanken:
 | ||
| - jedes Anwendungssystem verwaltet seine eigenen Daten
 | ||
| - Daten sind (redundant) mehrfach gespeichert
 | ||
| - Probleme
 | ||
|   - Verschwenden von Speicherplatz
 | ||
|   - "vergessen" von Änderungen
 | ||
|   - keine zentrale "genormte" Datenerhaltung
 | ||
| - größere Mengen von Daten nicht effizient verarbeitet
 | ||
| - mehrere Benutzer können nicht parallel auf den gleichen Daten arbeiten, ohne sich zu stören
 | ||
| - Anwendungsprogrammierer/Benutzer können Anwendungen nicht programmieren/benutzen ohne ... zu kennen (keine Datenunabhängigkeit)
 | ||
|   - interne Dartstellung der Daten
 | ||
|   - Speichermedien oder Rechner
 | ||
| - Datenschutz und   Datensicherheit
 | ||
| 
 | ||
| ### Datenintegration durch Datenbanksystem
 | ||
| Anwendungen greifen über Datenbankmanagementsystem auf Datenbank zu.
 | ||
| 
 | ||
| Datenbankmanagementsystem (DBMS): Software zur Verwaltung von Datenbanken
 | ||
| 
 | ||
| Datenbank (DB): strukturierter, von DBMS verwalteter Datenbestand
 | ||
| 
 | ||
| Datenbanksystem (DBS) = DBMS + DB
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ## Architekturen
 | ||
| die neun Codd'schen Regeln
 | ||
| 1. Integration: einheitliche, nichtredundante Datenverwaltung
 | ||
| 2. Operationen: Speichern, Suchen, Ändern
 | ||
| 3. Katalog: Zugriffe auf Datenbankbeschreibungen im Data Dictionary
 | ||
| 4. Benutzersichten
 | ||
| 5. Integritätssicherung: Korrektheit des Datenbankinhalts
 | ||
| 6. Datenschutz: Ausschluss unauthorisierter Zugriffe
 | ||
| 7. Transaktionen: mehrere DB-Operationen als Funktionseinheit
 | ||
| 8. Synchronisation: parallele Transaktionen koordinieren
 | ||
| 9. Datensicherung: Wiederherstellung von Daten nach Systemfehlern
 | ||
| 
 | ||
| Ziele:
 | ||
| - Trennung von Modellierungssicht und interner Speicherung
 | ||
| - Portierbarkeit
 | ||
| - Tuning vereinfachen
 | ||
| - standardisierte Schnittstellen
 | ||
| 
 | ||
| Schemata:
 | ||
| - Konzeptuelles Schema (Ergebnis der Dateidefinition)
 | ||
| - Internes Schema (Festlegung der Dateiorganisation und Zugriffspfade = Index)
 | ||
| - Externes Schema (Ergebnis der Sichtdefinition)
 | ||
| - Anwendungsprogramm (Ergebnis der Anwendungsprogrammierung)
 | ||
| 
 | ||
| - Trennung Schema-Instanz
 | ||
|   - Schema: Metadaten, Datenbeschreibung
 | ||
|   - Instanz: Anwenderdaten, Datenbankzustand
 | ||
| 
 | ||
| Datenunabhängigkeit:
 | ||
| - Stabilität der Benutzerschnittstelle gegen Änderungen
 | ||
| - physisch: Änderung der Dateiorganisation und Zugriffspfade haben keinen Einfluss auf das konzeptuelle Schema
 | ||
| - logisch: Änderung am konzeptuellen und gewissen externen Schemata haben keine Auswirkungen auf andere externe Schemata und Anwendungsprogramme
 | ||
| 
 | ||
| Aufteilung der Funktionalitäten einer Anwendung
 | ||
| - Präsentation und Benutzerinteraktion
 | ||
| - Anwendungslogik („Business“-Logik)
 | ||
| - Datenmanagementfunktionen (Speichern, Anfragen, ...).
 | ||
| 
 | ||
| Architektur von Datenbankanwendungen typischerweise auf Basis des Client-Server-Modells (Server=Datenbanksystem).
 | ||
| 
 | ||
| ### 3 Schichten Architektur (ANSI-SPARC-Architektur) 
 | ||
| Klassifizierung der Komponenten
 | ||
| - Definitionskomponenten: Datendefinition, Dateiorganisation, Sichtdefinition
 | ||
| - Programmierkomponenten: DB-Programmierung mit eingebetteten DB-Operationen
 | ||
| - Benutzerkomponenten: Anwendungsprogramme, Anfrage und Update interaktiv
 | ||
| - Transformationskomponenten: Optimierer, Auswertung, Plattenzugriffssteuerung
 | ||
| - Data Dictionary (Datenwörterbuch): Aufnahme der Daten aus Definitionskomponenten, Versorgung der anderen Komponenten
 | ||
| 
 | ||
| ### 5 Schichten Architektur
 | ||
| Verfeinerung der Transformation
 | ||
| - Datensystem: Übersetzung, Zugriffspfadwahl
 | ||
| - Zugriffssystem: Logische Zugriffspfade, Schemakatalog, Sortierung, Transaktionsverwaltung
 | ||
| - Speichersystem Speicherungsstrukturen, Zugriffspfadverwaltung, Sperrverwaltung, Logging, Recovery
 | ||
| - Pufferverwaltung: Systempufferverwaltung, Seitenersetzung, Seitenzuordnung
 | ||
| - Betriebssystem: Externspeicherverwaltung, Speicherzuordnung
 | ||
| 
 | ||
| ## Einsatzgebiete
 | ||
| - Klassische Einsatzgebiete:
 | ||
|   - viele Objekte (15000 Bücher, 300 Benutzer, 100 Ausleihvorgänge pro Woche, ...)
 | ||
|   - wenige Objekttypen (BUCH, BENUTZER, AUSLEIHUNG)
 | ||
|   - etwa Buchhaltungssysteme, Auftragserfassungssysteme, Bibliothekssysteme, ...
 | ||
| - Aktuelle Anwendungen: E-Commerce, entscheidungsunterstützende Systeme (Data Warehouses, OLAP), NASA’s Earth Observation System (Petabyte-Datenbanken), Data Mining
 | ||
| 
 | ||
| Datenbankgrößen:
 | ||
| - eBay Data Warehouse: 10PB
 | ||
|   - Teradata DBMS, 72 Knoten, 10.000 Nutzer,
 | ||
|   - mehrere Millionen Anfragen/Tag
 | ||
| - WalMart Data Warehouse: 2,5PB
 | ||
|   - Teradata DBMS, NCR MPP-Hardware;
 | ||
|   - Produktinfos (Verkäufe etc.) von 2.900 Märkten;
 | ||
|   - 50.000 Anfragen/Woche
 | ||
| - Facebook: 400TB
 | ||
|   - x.000 MySQL-Server
 | ||
|   - Hadoop/Hive, 610 Knoten, 15 TB/Tag
 | ||
| - US Library of Congress 10-20TB
 | ||
|   - nicht digitalisiert
 | ||
| 
 | ||
| ## Historisches
 | ||
| - Wissensbanksysteme
 | ||
|   - Daten in Tabellenstrukturen
 | ||
|   - Stark deklarative DML, integrierte Datenbankprogrammiersprache
 | ||
| - Objektorientierte Datenbanksysteme
 | ||
|   - Daten in komplexeren Objektstrukturen (Trennung Objekt und seine Daten)
 | ||
|   - Deklarative oder navigierende DML
 | ||
|   - Oft integrierte Datenbankprogrammiersprache
 | ||
|   - Oft keine vollständige Ebenentrennung
 | ||
| 
 | ||
| - Neue Hardwarearchitekturen
 | ||
|   - Multicore-Prozessoren, Hauptspeicher im TB-Bereich: In-Memory-Datenbanksysteme (z.B. SAP HANA)
 | ||
| - Unterstützung für spezielle Anwendungen
 | ||
|   - Cloud-Datenbanken: Hosting von Datenbanken, Skalierbare Datenmanagementlösungen (Amazon RDS, Microsoft Azure)
 | ||
| • Datenstromverarbeitung: Online-Verarbeitung von Live-Daten, z.B. Börseninfos, Sensordaten, RFID-Daten, ...(StreamBase, MS StreamInsight, IBM Infosphere Streams)
 | ||
|   - Big Data: Umgang mit Datenmengen im PB-Bereich durch hochskalierbare, parallele Verarbeitung, Datenanalyse (Hadoop, Hive, Google Spanner & F1, ...)
 | ||
| - NoSQL-Datenbanken („Not only SQL“):
 | ||
|   - nicht-relationale Datenbanken, flexibles Schema (dokumentenzentriert)
 | ||
|   - „leichtgewichtig“ durch Weglassen von SQL-Funktionalitäten wie Transaktionen, mächtige deklarative Anfragesprachen mit Verbunden etc.
 | ||
|   - Beispiele: CouchDB, MongoDB, Cassandra, ...
 | ||
| 
 | ||
| 
 | ||
| # Relationale Datenbanken - Daten als Tabellen
 | ||
| ## Relationen für tabellarische Daten
 | ||
| Konzeptuell: Datenbank = Menge von Tabellen (= Relationen)
 | ||
| 
 | ||
| - „Tabellenkopf“: Relationenschema
 | ||
| - Eine Zeile der Tabelle: Tupel; Menge aller Einträge: Relation
 | ||
| - Eine Spaltenüberschrift: Attribut
 | ||
| - Ein Eintrag: Attributwert
 | ||
| 
 | ||
| Integritätsbedingungen: Schlüssel
 | ||
| - Attribute einer Spalte identifizieren eindeutig gespeicherte Tupel: Schlüsseleigenschaft
 | ||
| - auch Attributkombinationen können Schlüssel sein!
 | ||
| - Schlüssel können durch Unterstreichen gekennzeichnet werden
 | ||
| - Schlüssel einer Tabelle können in einer anderen (oder derselben!) Tabelle als eindeutige Verweise genutzt werden: 
 | ||
|   - Fremdschlüssel, referenzielle Integrität
 | ||
| - ein Fremdschlüssel ist ein Schlüssel in einer „fremden“ Tabelle
 | ||
| 
 | ||
| ## SQL-Datendefinition
 | ||
| ### CREATE table
 | ||
| Wirkung dieses Kommandos ist sowohl
 | ||
| - die Ablage des Relationenschemas im Data Dictionary, als auch
 | ||
| - die Vorbereitung einer „leeren Basisrelation“ in der Datenbank
 | ||
| 
 | ||
| ### DROP table
 | ||
| komplettes Löschen einer Tabelle (Inhalt und Eintrag im Data
 | ||
| Dictionary)
 | ||
| 
 | ||
| ### Mögliche Wertebereiche in SQL
 | ||
| - integer (oder auch integer4, int),
 | ||
| - smallint (oder auch integer2),
 | ||
| - float(p) (oder auch kurz float),
 | ||
| - decimal(p,q) und numeric(p,q) mit jeweils q Nachkommastellen,
 | ||
| - character(n) (oder kurz char(n), bei n = 1 auch char) für Zeichenketten (Strings) fester Länge n,
 | ||
| - character varying(n) (oder kurz varchar(n) für Strings variabler Länge bis zur Maximallänge n,
 | ||
| - bit(n) oder bit varying(n) analog für Bitfolgen, und
 | ||
| - date, time bzw. datetime für Datums-, Zeit- und kombinierte Datums-Zeit-Angaben
 | ||
| 
 | ||
| Beispiel:
 | ||
| ```sql
 | ||
| create table WEINE (
 | ||
|   WeinID int,
 | ||
|   Name varchar(20) not null,
 | ||
|   Farbe varchar(10),
 | ||
|   Jahrgang int,
 | ||
|   Weingut varchar(20),
 | ||
|   primary key(WeinID),
 | ||
|   foreign key(Weingut) references ERZEUGER(Weingut))
 | ||
| ```
 | ||
| - primary key kennzeichnet Spalte als Schlüsselattribut
 | ||
| - foreign key kennzeichnet Spalte als Fremdschlüssel
 | ||
| - not null schließt in bestimmten Spalten Nullwerte als Attributwerte aus
 | ||
| - null repräsentiert die Bedeutung „Wert unbekannt“, „Wert nicht anwendbar“ oder „Wert existiert nicht“, gehört aber zu keinem Wertebereich
 | ||
| - null kann in allen Spalten auftauchen, außer in Schlüsselattributen und den mit not null gekennzeichneten
 | ||
| 
 | ||
| 
 | ||
| ## Grundoperationen: Die Relationenalgebra
 | ||
| - Anfrageoperationen auf Tabellen
 | ||
|   - Basisoperationen auf Tabellen, die die Berechnung von neuen Ergebnistabellen aus gespeicherten Datenbanktabellen erlauben
 | ||
|   - Operationen werden zur sogenannten Relationenalgebra zusammengefasst
 | ||
|   - Mathematik: Algebra ist definiert durch Wertebereich sowie darauf definierten Operationen
 | ||
|     - für Datenbankanfragen entsprechen die Inhalte der Datenbank den Werten, Operationen sind dagegen Funktionen zum Berechnen der Anfrageergebnisse
 | ||
|   - Anfrageoperationen sind beliebig kombinierbar und bilden eine Algebra zum „Rechnen mit Tabellen“ – die Relationenalgebra
 | ||
| 
 | ||
| - Selektion $\sigma$: Auswahl von Zeilen einer Tabelle anhand eines Selektionsprädikats
 | ||
| - Projektion $\pi$: Auswahl von Spalten durch Angabe einer Attributliste
 | ||
|   - Die Projektion entfernt doppelte Tupel
 | ||
| - Verbund $\bowtie$ (engl. join): verknüpft Tabellen über gleichbenannte Spalten, indem er jeweils zwei Tupel verschmilzt, falls sie dort gleiche Werte aufweisen
 | ||
|   - Tupel, die keinen Partner finden (dangling tuples), werden eliminiert
 | ||
| - Umbenennung $\beta$: Anpassung von Attributnamen mittels Umbenennung
 | ||
| - Vereinigung $r_1 \cup r_2$ von zwei Relationen $r_1$ und $r_2$: 
 | ||
|   - Gesamtheit der beiden Tupelmengen
 | ||
|   - Attributmengen beider Relationen müssen identisch sein
 | ||
| - Differenz $r_1 − r_2$ eliminiert die Tupel aus der ersten Relation, die auch in der zweiten Relation vorkommen
 | ||
| - Durchschnitt $r_1 \cap r_2$: ergibt die Tupel, die in beiden Relationen gemeinsam vorkommen
 | ||
| 
 | ||
| 
 | ||
| ## SQL als Anfragesprache
 | ||
| ```sql
 | ||
| SELECT farbe FROM weine WHERE Jahrgang = 2002
 | ||
| ```
 | ||
| - SQL hat Multimengensemantik — Duplikate in Tabellen werden in SQL nicht automatisch unterdrückt!
 | ||
|   - Mengensemantik durch distinct
 | ||
| - Verknüpfung von Tabellen
 | ||
|   - Kreuzprodukt: `` select * from Weine, Erzeuger``
 | ||
|   - Verbund: `` select * from Weine natural join Erzeuger``
 | ||
|   - Verbund mit Bedingung: `` select * from Weine, Erzeuger where Weine.Weingut = Erzeuger.Weingut``
 | ||
| - Kombination von Bedingungen
 | ||
| - Vereinigung in SQL explizit mit union
 | ||
| 
 | ||
| ## Änderungsoperationen in SQL
 | ||
| - insert: Einfügen eines oder mehrerer Tupel in eine Basisrelation oder Sicht
 | ||
|   - `` INSERT INTO table (attribut) VALUE (ausdruck) ``
 | ||
|   - optionale Attributliste ermöglicht das Einfügen von unvollständigen Tupeln
 | ||
|   - nicht alle Attribute angegeben ⇝ Wert des fehlenden Attribut Land wird null
 | ||
| - update: Ändern von einem oder mehreren Tupel in einer Basisrelation oder Sicht
 | ||
|   - `` UPDATE relation SET attribut=ausdruck ``
 | ||
| - delete: Löschen eines oder mehrerer Tupel aus einer Basisrelation oder Sicht
 | ||
|   - `` DELETE FROM table WHERE id=123 ``
 | ||
|   - Löschoperationen können zur Verletzung von Integritätsbedingungen führen!
 | ||
| 
 | ||
| Lokale und globale Integritätsbedingungen müssen bei Änderungsoperationen automatisch vom System überprüft werden
 | ||
| 
 | ||
| 
 | ||
| # Datenbankentwurf im ER-Modell
 | ||
| ## Datenbankmodelle
 | ||
| > **Datenbankmodell**: Ein Datenbankmodell ist ein System von Konzepten zur Beschreibung von Datenbanken. Es legt Syntax und Semantik von Datenbankbeschreibungen für ein Datenbanksystem fest.
 | ||
| 
 | ||
| Datenbankbeschreibungen = Datenbankschemata
 | ||
| 
 | ||
| 1. statische Eigenschaften
 | ||
|   1. Objekte
 | ||
|   2. Beziehungen
 | ||
|   - inklusive der Standard-Datentypen, die Daten über die Beziehungen und Objekte darstellen können,
 | ||
| 2. dynamische Eigenschaften wie
 | ||
|   1. Operationen
 | ||
|   2. Beziehungen zwischen Operationen,
 | ||
| 1. Integritätsbedingungen an
 | ||
|   1. Objekte
 | ||
|   2. Operationen
 | ||
| 
 | ||
| Datenbankmodelle im Überblick
 | ||
| - HM: hierarchisches Modell, NWM: Netzwerkmodell, RM: Relationenmodell
 | ||
| - NF 2 : Modell der geschachtelten (Non-First-Normal-Form = NF 2 ) Relationen, eNF 2 : erweitertes NF 2 -Modell
 | ||
| - ER: Entity-Relationship-Modell, SDM: semantische Datenmodelle
 | ||
| - OODM / C++: objektorientierte Datenmodelle auf Basis objektorientierter Programmiersprachen wie C++, 
 | ||
|   - OEM: objektorientierte Entwurfsmodelle (etwa UML), 
 | ||
|   - ORDM: objektrelationale Datenmodelle
 | ||
| 
 | ||
| ## ER Modell
 | ||
| - **Entity**: Objekt der realen oder der Vorstellungswelt, über das Informationen zu speichern sind, z.B. Produkte (Wein, Katalog), Winzer oder Kritiker; aber auch Informationen über Ereignisse, wie z.B. Bestellungen 
 | ||
| - **Relationship**: beschreibt eine Beziehung zwischen Entities, z.B. ein Kunde bestellt einen Wein oder ein Wein wird von einem Winzer angeboten
 | ||
| - **Attribut**: repräsentiert eine Eigenschaft von Entities oder Beziehungen, z.B. Name eines Kunden, Farbe eines Weines oder Datum einer Bestellung
 | ||
|   - Attribute modellieren Eigenschaften von Entities oder auch Beziehungen
 | ||
|   - alle Entities eines Entity-Typs haben dieselben Arten von Eigenschaften; Attribute werden somit für Entity-Typen deklariert
 | ||
| - **Werte**: primitive Datenelemente, die direkt darstellbar sind
 | ||
|   - Wertemengen sind beschrieben durch Datentypen, die neben einer Wertemenge auch die Grundoperationen auf diesen Werten charakterisieren
 | ||
|   - ER-Modell: vorgegebene Standard-Datentypen, etwa die ganzen Zahlen int, die Zeichenketten string, Datumswerte date etc.
 | ||
|   - jeder Datentyp stellt Wertebereich mit Operationen und Prädikaten dar
 | ||
| - **Entities** sind die in einer Datenbank zu repräsentierenden Informationseinheiten
 | ||
|   - im Gegensatz zu Werten nicht direkt darstellbar, sondern nur über ihre Eigenschaften beobachtbar
 | ||
|   - Entities sind eingeteilt in Entity-Typen, etwa $E_1 , E_2,...$
 | ||
| - **Schlüsselattribute**: Teilmenge der gesamten Attribute eines Entity-Typs $E(A_1,... , A_m)$
 | ||
|   - in jedem Datenbankzustand identifizieren die aktuellen Werte der Schlüsselattribute eindeutig Instanzen des Entity-Typs E
 | ||
|   - bei mehreren möglichen Schlüsselkandidaten: Auswahl eines Primärschlüssels
 | ||
| - **Beziehungstypen**: Beziehungen zwischen Entities werden zu Beziehungstypen zusammengefasst
 | ||
|   - Beziehungen können ebenfalls Attribute besitzen
 | ||
| 
 | ||
| 
 | ||
| Merkmale von Beziehungen
 | ||
| - Stelligkeit oder Grad:
 | ||
|   - Anzahl der beteiligten Entity-Typen
 | ||
|   - häufig: binär
 | ||
|   - Beispiel: Lieferant liefert Produkt
 | ||
| - Kardinalität oder Funktionalität:
 | ||
|   - Anzahl der eingehenden Instanzen eines Entity-Typs
 | ||
|   - Formen: 1:1, 1:n, m:n
 | ||
|   - stellt Integritätsbedingung dar
 | ||
|   - Beispiel: maximal 5 Produkte pro Bestellung
 | ||
| 
 | ||
| - 1:1 Beziehung
 | ||
|   - jedem Entity $e_1$ vom Entity-Typ $E_1$ ist maximal ein Entity $e_2$ aus $E_2$ zugeordnet und umgekehrt
 | ||
|   - Bsp: Prospekt *beschreibt* Produkt 
 | ||
| - 1:N Beziehung
 | ||
|   - jedem Entity $e_1$ aus $E_1$ sind beliebig viele Entities $E_2$ zugeordnet, aber zu jedem Entity $e_2$ gibt es maximal ein $e_1$ aus $E_1$
 | ||
|   - Bsp: Lieferant *liefert* Produkte, Mutter *hat* Kinder
 | ||
| - N:1 Beziehung
 | ||
|   - invers zu 1:N, auf funktionale Beziehung
 | ||
| - M:N Bezeihung
 | ||
|   - keine Restriktionen
 | ||
|   - Bsp: Bestellung *umfasst* Produkte
 | ||
| 
 | ||
| [min,max]-Notation
 | ||
| - schränkt die möglichen Teilnahmen von Instanzen der beteiligten Entity-Typen an der Beziehung ein, indem ein minimaler und ein maximaler Wert vorgegeben wird
 | ||
| - Spezielle Wertangabe für $max_i$ ist ∗
 | ||
| 
 | ||
| Kardinalitätsangaben
 | ||
| - [0, ∗] legt keine Einschränkung fest (default)
 | ||
| - $R(E_1 [0, 1], E_2 )$ entspricht einer (partiellen) funktionalen Beziehung $R : E_1 \rightarrow E_2$ , da jede Instanz aus $E_1$ maximal einer Instanz aus $E_2$ zugeordnet ist
 | ||
| - totale funktionale Beziehung wird durch $R(E_1 [1, 1], E_2 )$ modelliert
 | ||
| - Beispiele:
 | ||
|   - partielle funktionale Beziehung: $lagert_in(Produkt[0,1],Fach[0,3])$
 | ||
|   - totale funktionale Beziehung: $liefert(Lieferant[0,*],Produkt[1,1])$
 | ||
| 
 | ||
| ## Weitere Konzepte im ER Modell
 | ||
| - abhängiger Entity-Typ: Identifikation über funktionale Beziehungen (Bsp x "gehört zu" y)
 | ||
| - Spezialisierungs-/Generalisierungsbeziehung oder auch *IST*-Beziehung
 | ||
|   - E1 *IST* E2
 | ||
|   - entspricht semantisch einer injektiven funktionalen Beziehung
 | ||
|   - Attribute des Entity-Typs E2 treffen auch auf E1 zu: "vererbte" Attribute
 | ||
|   - nicht nur Atrributsdeklarationen vererben sich, sondern auch jeweils die aktuellen Werte für eine Instanz
 | ||
|   - Kardinalitätsangabe immer: $IST(E_1[1,1], E_2[0,1])$
 | ||
|   - Jede Instanz von E1 nimmt genau einmal an der Ist-Beziehung teil, während Instanzen des Obertyps E2 nicht teilnehmen müssen
 | ||
| 
 | ||
| Die Konzepte im Überblick:
 | ||
| | **Begriff** | **Informale Bedeutung** |
 | ||
| | -- | -- |
 | ||
| | Entity | zu repräsentierende Informationseinheit |
 | ||
| | Entity Typ | Gruppierung von Entitys mit gleichen Eigenschaften |
 | ||
| | Beziehungstyp | Gruppierung von Beziehungen zwischen Entitys |
 | ||
| | Attribut | datenwertige Eigenschaft eines Entitys oder einer Beziehung |
 | ||
| | Schlüssel | identifizierende Eigenschaft von Entitys |
 | ||
| | Kardinalitäten | Einschränkung von Beziehungstypen bezüglich der mehrfachen Teilnahme von Entitys an der Beziehung |
 | ||
| | Stelligkeit | Anzahl der an einem Beziehungstyp beteiligten Entity Typen |
 | ||
| | funktionale Beziehungen | Beziehungstyp mit Funktionseigenschaften |
 | ||
| | abhängige Entitys | Entitys, die nur abhängig von anderen Entitys existieren können |
 | ||
| | IST Beziehung | Spezialisierung von Entity Typen |
 | ||
| | Optionalität | Attribute oder Funktionale Beziehungen als partielle Funktionen |
 | ||
| 
 | ||
| 
 | ||
| # Datenbankentwurf
 | ||
| ## Phasen des Datenbankentwurfs
 | ||
| - Datenerhaltung für mehrere Anwendungssysteme und mehrere Jahre
 | ||
| - Anforderungen an Entwurf:
 | ||
|   - Anwendungsdaten jeder Anwendung sollen aus Daten der Datenbank ableitbar sein (mögl effizient)
 | ||
|   - nur "vernünftige" Daten sollen gespeichert werden
 | ||
|   - nicht-redundante Speicherung
 | ||
| 
 | ||
| ### Phasenmodell
 | ||
| Anforderungsanalyse $\leftrightarrow$ Konzeptioneller Entwurf  $\leftrightarrow$ Verteilungsentwurf $\leftrightarrow$ Logischer Entwurf $\leftrightarrow$ Datendefinition $\leftrightarrow$ Physischer Entwurf $\leftrightarrow$ Implementierung & Wartung
 | ||
| 
 | ||
| ### Anforderungsanalyse
 | ||
| - Vorgehensweise: Sammeln des Informationsbedarfs in den Fachabteilungen
 | ||
| - Ergebnis: 
 | ||
|   - informale Beschreibung des Fachproblems (Texte, Tabellen, Formblätter,...)
 | ||
|   - Trennen der Informationen über Daten (Datenanalyse) von den Informationen über Funktionen (Funktionsanalyse)
 | ||
| - "Klassischer" Entwurf: nur Datenanalyse und Folgeschritte
 | ||
| - Funktionsentwurf: siehe Methoden des Software Engineering
 | ||
| 
 | ||
| ### Konzeptioneller Entwurf
 | ||
| - erste Formale Beschreibung des Fachproblems
 | ||
| - Sprachmittel: semantisches Datenmodell
 | ||
| - Vorgehensweise:
 | ||
|   - Modellierung von Sichen z.B. für verschiedene Fachabteilungen
 | ||
|   - Analyse der vorliegenden Sichten in Bezug auf Konflikte
 | ||
|   - Integration der Sichten in ein Gesamtschema
 | ||
| - Phasen:
 | ||
|   - Sichtentwurf
 | ||
|   - Sichtanalyse
 | ||
|   - Sichtintegration
 | ||
| - Ergebnis: konzeptionelles Gesamtschema (z.B. ER Schema)
 | ||
| 
 | ||
| #### weiteres Vorgehen beim Entwurf
 | ||
| - ER-Modellierung von verschiedenen Sichten auf Gesamtinformation, z.B. für verschiedene Fachabteilungen eines Unternehmens -> konzeptueller Entwurf
 | ||
| - Verteilungsentwurf bei verteilter Speicherung
 | ||
| - Abbildung auf konkretes Implementierungsmodell -> logischer Entwurf
 | ||
| - Datendefinition, Implementierung und Wartung -> physischer Entwurf
 | ||
| 
 | ||
| #### Sichtintegration
 | ||
| - Analyse der vorliegenden Sichten in Bezug auf Konflikte
 | ||
| - Integration der Sichten in ein Gesamtschema
 | ||
| 
 | ||
| #### Integrationskonflikte
 | ||
| - Namenskonflikte: Homonyme/Synonyme
 | ||
| - Typkonflikte: verschiedene Strukturen für das gleiche Element
 | ||
| - Wertebereichskonflikte: verschiedene Wertebereiche für ein Element
 | ||
| - Bedingungskonflikte: z.B. verschiedene Schlüssel für ein Element
 | ||
| - Strukturkonflikte: gleicher Sachverhalt durch unterschiedliche Konstrukte ausgedrückt
 | ||
| 
 | ||
| ### Verteilungsentwurf
 | ||
| - sollen Daten auf mehreren Rechnern verteilt vorliegen, muss Art und Weise der verteilten Speicherung festgelegt werden
 | ||
|   - horizontale Verteilung z.B. Kunden 1-1000 und Kunden 10001-20000
 | ||
|   - vertikale Verteilung z.B. Adresse in DB1, Konto in DB2
 | ||
| 
 | ||
| ### Logischer Entwurf
 | ||
| - Sprachmittel: Datenmodell des ausgewählten "Realisierungs"DBMS
 | ||
| - Vorgehensweise
 | ||
|     1. (automatische) Transformation des konzeptionellen Schemas z.B. ER -> relationales Modell
 | ||
|     2. Verbesserung des relationalen Schemas anhand von Gütekriterien
 | ||
| - Ergebnis: logisches Schema
 | ||
| 
 | ||
| ### Datendefinition
 | ||
| - Umsetzung des logischen Schemas in ein konkretes Schema
 | ||
| - Sprachmittel: DDL und DML eines DBMS
 | ||
|   - Datenbankdeklaration in der DDL des DBMS
 | ||
|   - Realisierung der Integritätssicherung
 | ||
|   - Definition der Benutzersichten
 | ||
| 
 | ||
| ### Physischer Entwurf
 | ||
| - Ergänzen des physischen Entwurfs um Zugriffsunterstützung bzgl Effizienzverbesserung, z.B. Definition von Indexen
 | ||
| - Index:
 | ||
|   - Zugriffspfad: Datenstruktur für zusätzlichen, schlüsselbasierten Zugriff auf Tupel
 | ||
|   - meist als B*-Baum realisiert
 | ||
| - Sprachmittel: Speicherstruktursprache SSL
 | ||
| 
 | ||
| Indexe in SQL, z.B.: ```create index WeinIdx on WEINE (Name)```
 | ||
| 
 | ||
| Notwendigkeit für Zugriffspfade:
 | ||
| - Beispiel: Tabelle mit 100GB Daten, Festplattentransferrate ca 50MB/s
 | ||
| - Operation: Suchen eines Tupels (Selektion)
 | ||
| - Implementierung: sequentielles Durchsuchen
 | ||
| - Aufwand: 102.500/50 = 2048 sec ~ 34 Minuten
 | ||
| 
 | ||
| ### Implementierung & Wartung
 | ||
| - Wartung
 | ||
| - weitere Optimierung der physischen Ebene
 | ||
| - Anpassung an neue Anforderungen und Systemplattformen
 | ||
| - Portierung auf neue Datenbankmanagementsysteme
 | ||
| - etc
 | ||
| 
 | ||
| 
 | ||
| ## Kapazitätserhaltende Abbildungen
 | ||
| Umsetzung des konzeptionellen Schemas
 | ||
| - Umsetzung auf logisches Schema
 | ||
| - Erhaltung der Informationskapazität
 | ||
| - Kapazitäts**erhöhende** Abbildung: Abbildung auf R mit genau einem Schlüssel K ( K={{A},{B}} )
 | ||
| - Kapazitäts**vermindernde** Abbildung: Relationsschema mit einem Schlüssel
 | ||
| - Kapazitäts**erhaltende** Abbildung: kapazitätserhaltend mit Schlüssel beider Entity Typen im Relationsschema als neuer Schlüssel
 | ||
| 
 | ||
| ## ER-auf-RM Abbildung
 | ||
| ### ER Abbildung auf Relationen
 | ||
| - Entity-Typen und Beziehungstypen: jeweils auf Relationenschemata
 | ||
| - Attribute: Attribute des Relationenschemas, Schlüssel werden übernommen
 | ||
| - Kardinalitäten der Beziehungen: durch Wahl der Schlüssel bei den zugehörigen Relationenschemata ausgedrückt
 | ||
| - in einigen Fällen: Verschmelzen der Relationenschemata von Entity- und Beziehungstypen
 | ||
| - zwischen den verbleibenden Relationenschemata diverse Fremdschlüsselbedingungen einführen
 | ||
| 
 | ||
| ### Abbildung von Beziehungstypen
 | ||
| - neues Relationenschema mit allen Attributen des Beziehungstyps, zusätzlich Übernahme aller Primärschlüssel der beteiligten Entity-Typen
 | ||
| - Festlegung der Schlüssel:
 | ||
|   - m:n-Beziehung: beide Primärschlüssel zusammen werden Schlüssel im neuen Relationenschema
 | ||
|   - 1:n-Beziehung: Primärschlüssel der n-Seite (bei der funktionalen Notation die Seite ohne Pfeilspitze) wird Schlüssel im neuen Relationenschema
 | ||
|   - 1:1-Beziehung: beide Primärschlüssel werden je ein Schlüssel im neuen Relationenschema, der Primärschlüssel wird dann aus diesen Schlüsseln gewählt
 | ||
| - optionale Beziehungen ([0,1] oder [0,n]) werden nicht verschmolzen
 | ||
| - bei Kardinalitäten [1,1] oder [1,n] (zwingende Beziehungen) Verschmelzung möglich:
 | ||
|   - 1:n-Beziehung: das Entity-Relationenschema der n-Seite kann in das Relationenschema der Beziehung integriert werden
 | ||
|   - 1:1-Beziehung: beide Entity-Relationenschemata können in das Relationenschema der Beziehung integriert werden
 | ||
| 
 | ||
| ## Übersicht über Transformationen
 | ||
| | ER Konzept | wird abgebildet auf relationales Konzept |
 | ||
| | -- | -- |
 | ||
| | Entity Typ $E_i$      | Relationsenschema $R_i$ |
 | ||
| | Attribute von $E_i$   | Attribute von $R_i$     |
 | ||
| | Primärschlüssel $P_i$ | Primärschlüssel $P_i$   |
 | ||
| | Beziehungstyp         | Relationenschema, Attribute $P_1,P_2$ |
 | ||
| | dessen Attribute      | weitere Attribute       |
 | ||
| | 1:n                   | $P_2$ wird Primärschlüssel der Beziehung |
 | ||
| | 1:1                   | $P_1$ und $P_2$ werden Schlüssel der Beziehung |
 | ||
| | m:n                   | $P_1 \cup P_2$ wird Primärschlüssel der Beziehung |
 | ||
| | IST Beziehung         | $R_1$ erhält zusätzlichen Schlüssel $P_2$ |
 | ||
| 
 | ||
| # Relationaler Entwurf
 | ||
| ## Zielmodell des logischen Entwurfs
 | ||
| 
 | ||
| Begriffe des Relationenmodells
 | ||
| | Begriff | Informale Bedeutung |
 | ||
| | -- | -- |
 | ||
| | Attribut | Spalte einer Tabelle |
 | ||
| | Wertebereich | mögliche Werte eines Attributs (auch Domäne) |
 | ||
| | Attributwert | Element eines Wertebereichs |
 | ||
| | Relationenschema | Menge von Attributen | 
 | ||
| | Relation | Menge von Zeilen einer Tabelle |
 | ||
| | Tupel | Zeile einer Tabelle |
 | ||
| | Datenbankschema | Menge von Relationenschemata |
 | ||
| | Datenbank | Menge von Relationen (Basisrelationen) |
 | ||
| | Schlüssel | minimale Menge von Attributen, deren Werte ein Tupel einer Tabelle eindeutig identifizieren |
 | ||
| | Primärschlüssel | ein beim Datenbankentwurf ausgezeichneter Schlüssel |
 | ||
| | Fremdschlüssel | Attributmenge, die in einer anderen Relation Schlüssel ist |
 | ||
| | Fremdschlüsselbedingung | alle Attributwerte des Fremdschlüssels tauchen in der anderen Relation als Werte des Schlüssels auf |
 | ||
| 
 | ||
| Formalisierung Relationenmodell
 | ||
| - Attribute und Domänen
 | ||
|   - $U$ nichtleere, endliche Menge: Universum
 | ||
|   - $A\in U$: Attribut
 | ||
|   - $D = {D_1,..., D_m}$ Menge endlicher, nichtleerer Mengen: jedes $D_i$: Wertebereich oder Domäne
 | ||
|   - total definierte Funktion $dom:U \rightarrow D$
 | ||
|   - $dom(A)$: Domäne von A
 | ||
|   - $w \in dom(A)$: Attributwert für A
 | ||
| - Relationenschemata und Relationen
 | ||
|   - $R\subseteq U$: Relationenschema
 | ||
|   - Relation $r$ über $R = {A_1,..., A_n}$ (kurz: $r(R)$) ist endliche Menge von Abbildungen $t:R \rightarrow \bigcup_{i=1}^{m} D_i$, Tupel genannt
 | ||
|   - Es gilt $t(A) \in dom(A)$ ($t(A)$ Restriktion von $t$ auf $A \in R$)
 | ||
|   - für $X\subseteq R$ analog $t(X)$ X-Wert von $t$
 | ||
|   - Menge aller Relationen über $R: REL(R) := {r | r(R)}$
 | ||
| - Datenbankschema und Datenbank
 | ||
|   - Menge von Relationenschemata $S := {R_1,..., R_p }:$ Datenbankschema
 | ||
|   - Datenbank über $S$: Menge von Relationen $d:={r_1,..., r_p}$, wobei $r_i (R_i)$
 | ||
|   - Datenbank $d$ über $S: d(S)$
 | ||
|   - Relation $r\in d$: Basisrelation
 | ||
| 
 | ||
| Integritätsbedingung
 | ||
| - Identifizierende Attributmenge $K:= {B_1,..., B_k } \subseteq R: \forall t_1, t_2 \in r [t_1 \not = t_2 \Rightarrow \exists B \in K: t_1(B) \not = t_2(B)]$
 | ||
| - Schlüssel: ist minimale identifizierende Attributmenge
 | ||
| - Primattribut: Element eines Schlüssels
 | ||
| - Primärschlüssel: ausgezeichneter Schlüssel
 | ||
| - Oberschlüssel oder Superkey: jede Obermenge eines Schlüssels (= identifizierende Attributmenge)
 | ||
| - Fremdschlüssel: $X(R_1)\rightarrow Y(R_2)$
 | ||
| 
 | ||
| 
 | ||
| ## Relationaler DB-Entwurf
 | ||
| **Redundanzen** in Basisrelationen sind aus mehreren Gründen unerwünscht:
 | ||
| - Redundante Informationen belegen unnötigen Speicherplatz
 | ||
| - Änderungsoperationen auf Basisrelationen mit Redundanzen nur schwer korrekt umsetzbar: 
 | ||
|   - wenn eine Information redundant vorkommt, muss eine Änderung diese Information in allen ihren Vorkommen verändern
 | ||
|   - mit normalen relationalen Änderungsoperationen und den in
 | ||
|     - relationalen Systemen vorkommenden lokalen
 | ||
|     - Integritätsbedingungen (Schlüsseln) nur schwer realisierbar
 | ||
| 
 | ||
| Funktionale Abhängigkeit zwischen Attributemengen X und Y
 | ||
| > Wenn in jedem Tupel der Relation der Attributwert unter den X-Komponenten den Attributwert unter den Y-Komponenten festlegt.
 | ||
| - Unterscheiden sich zwei Tupel in den X-Attributen nicht, so haben sie auch gleiche Werte für alle Y-Attribute
 | ||
| - Notation für funktionale Abhängigkeit (FD, von functional dependency): X → Y
 | ||
| 
 | ||
| > Ziel des Datenbankentwurfs: alle gegebenen funktionalen Abhängigkeiten in Schlüsselabhängigkeiten umformen, ohne dabei semantische Information zu verlieren
 | ||
| 
 | ||
| ## Normalformen
 | ||
| Schemaeigenschaften
 | ||
| - Relationenschemata, Schlüssel und Fremdschlüssel so wählen, dass
 | ||
|     1. alle Anwendungsdaten aus den Basisrelationen hergeleitet werden können,
 | ||
|     2. nur semantisch sinnvolle und konsistente Anwendungsdaten dargestellt werden können und
 | ||
|     3. die Anwendungsdaten möglichst nicht-redundant dargestellt werden.
 | ||
| - Hier: Forderung 3
 | ||
|   - Redundanzen innerhalb einer Relation: Normalformen
 | ||
|   - globale Redundanzen: Minimalität
 | ||
| 
 | ||
| Normalformen
 | ||
| - legen Eigenschaften von Relationenschemata fest
 | ||
| - verbieten bestimmte Kombinationen von funktionalen Abhängigkeiten in Relationen
 | ||
| - sollen Redundanzen und Anomalien vermeiden
 | ||
| 
 | ||
| 1. Erste Normalform
 | ||
|     - erlaubt nur atomare Attribute in den Relationenschemata, d.h. als Attributwerte sind Elemente von Standard-Datentypen wie integer oder string erlaubt, aber keine Konstruktoren wie array oder set
 | ||
| 2. Zweite Normalform
 | ||
|     - Zweite Normalform eliminiert derartige partielle Abhängigkeiten bei Nichtschlüsselattributen
 | ||
|     - partielle Abhängigkeit liegt vor, wenn ein Attribut funktional schon von einem Teil des Schlüssels abhängt
 | ||
|     - Beispielrelation in 2 NF
 | ||
|         - R1(Name, Weingut, Preis)
 | ||
|         - R2(Name, Farbe)
 | ||
|         - R3(Weingut, Anbaugebiet, Region)
 | ||
| 3. Dritte Normalform
 | ||
|     - eliminiert (zusätzlich) transitive Abhängigkeiten
 | ||
|     - etwa Weingut $\rightarrow$ Anbaugebiet und Anbaugebiet $\rightarrow$ Region in Relation
 | ||
|     - man beachte: 3 NF betrachtet nur Nicht-Schlüsselattribute als Endpunkt transitiver Abhängigkeiten
 | ||
|     - Beispielrelation in 3NF, transitive Abhängigkeit in R3, d.h. R3 verletzt 3NF
 | ||
|       - R3_1(Weingut, Anbaugebiet)
 | ||
|       - R3_2(Anbaugebiet, Region)
 | ||
| 
 | ||
| > Dritte Normalform: 
 | ||
| > - $A \in R$ heißt transitiv abhängig von X bezüglich F genau dann, wenn es ein $Y\subseteq R$ gibt mit $X \rightarrow Y, Y \not\rightarrow X, Y \rightarrow A, A \not\in XY$
 | ||
| > - erweitertes Relationenschema $R=(R, \bf{K})$ ist in 3 NF bezüglich F genau dann, wenn $\not\exists A \in R$:
 | ||
| >   - A ist Nicht-Primattribut in R
 | ||
| >   - $\wedge A$ transitiv abhängig von einem $K\in \bf{K}$ bezüglich $F_i$.
 | ||
| >   - Nicht-Primattribut: A ist in keinem Schlüssel von R enthalten
 | ||
| 
 | ||
| > Boyce-Kodd-Normalform (Verschärfung der 3NF): Eliminierung transitiver Abhängigkeiten auch zwischen Primattributen
 | ||
| - $\not\exists A \in R$: A transitiv abhängig von einem $K\in\bf{K}$ bezüglich F
 | ||
| 
 | ||
| Minimalität
 | ||
| - Global Redundanzen vermeiden
 | ||
| - andere Kriterien (wie Normalformen) mit möglichst wenig Schemata erreichen
 | ||
| - Beispiel: Attributmenge ABC, FD-Menge ${A \rightarrow B, B \rightarrow C}$
 | ||
| 
 | ||
| Übersicht
 | ||
| | Kennung | Schemaeigenschaft | Kurzcharakteristik |
 | ||
| | -- | -- | -- |
 | ||
| | | 1 NF | nur atomare Attribute |
 | ||
| | | 2 NF | keine partielle Abhängigkeit eines Nicht-Primattributes von einem Schlüssel |
 | ||
| | S1 | 3 NF | keine transitive Abhängigkeit eines Nicht-Primattributs von einem Schlüssel |
 | ||
| | | BCNF | keine transitive Abhängigkei eines Attributes von einem Schlüssel |
 | ||
| | S2 | Minimalität | minimale Anzahl von Relationsschemata, die die anderen Eigenschaften erfüllt |
 | ||
| 
 | ||
| ## Transformationseigenschaften
 | ||
| - bei einer Zerlegung einer Relation in mehrere Relationen ist darauf zu achten, dass
 | ||
|     1. nur semantisch sinvolle und konsistente Anwendungsdaten dargestellt (Abhängigkeitstreue) und
 | ||
|     2. alle Anwendungsdaten aus den Basisrelationen hergeleitet werden können (Verbundtreue)
 | ||
| - Abhänggikeitstreue (Kennung T1)
 | ||
|   - alle gegebenen Abhängigkeiten sind durch Schlüssel repräsentiert
 | ||
|   - eine Menge von Abhängigkeiten kann äquivalent in eine zweite Menge von Abhängigkeiten transformiert werden
 | ||
|   - spezieller: in die Menge der Schlüsselabhängigkeiten, da diese vom Datenbanksystem effizient überprüft werden kann
 | ||
|     - die Menge der Abhängigkeiten soll äquivalent zu der Menge der Schlüsselbedingungen im resultierenden Datenbankschema sein
 | ||
|     - Äquivalenz sichert zu, dass mit den Schlüsselabhängigkeiten semantisch genau die gleichen Integritätsbedingungen ausgedrückt werden wie mit den funktionalen oder anderen Abhängigkeiten vorher
 | ||
|   - S charakterisiert vollständig F (oder: ist abhängigkeitstreu bezüglich F) genau dann, wenn $F\equiv \{K\rightarrow R | (R,\bf{K})\in S, K\in\bf{K}\}$
 | ||
| - Verbundtreue (Kennung T2)
 | ||
|   - Originalrelationen können durch den Verbund der Basisrelationen wiedergewonnen werden
 | ||
|   - zur Erfüllung des Kriteriums der Normalformen müssen Relationenschemata teilweise in kleinere Relationenschemata zerlegt werden
 | ||
|   - für Beschränkung auf „sinnvolle“ Zerlegungen gilt Forderung, dass die Originalrelation wieder aus den zerlegten Relationen mit dem natürlichen Verbund zurückgewonnen werden kann
 | ||
|     - Zerlegung des Relationenschemas $R = ABC$ in $R_1 = AB$ und $R_2 = BC$
 | ||
|     - Dekomposition bei Vorliegen der Abhängigkeiten $F = \{A \rightarrow B, C \rightarrow B\}$ ist nicht verbundtreu
 | ||
|     - dagegen bei Vorliegen von $F′ = \{A \rightarrow B, B \rightarrow C\}$ verbundtreu
 | ||
| 
 | ||
| > Verbundtreue: Die Dekomposition einer Attributmenge $X$ in $X_1,..., X_p$ mit $X = \bigcup_{i=1}^p X_i$ heißt verbundtreu ($\pi \bowtie$-treu, lossless) bezüglich einer Menge von Abhängigkeiten F über X genau dann, wenn $\forall r \in SAT_X(F) : \pi_{X_1}(r) \bowtie ··· \bowtie \pi_{X_p}(r) = r$ gilt.
 | ||
| 
 | ||
| ## Weitere Abhängigkeiten
 | ||
| - Mehrwertige Abhängigkeit (kurz: MVD)
 | ||
|   - innerhalb einer Relation r wird einem Attributwert von X eine Menge von Y-Werten zugeordnet, unabhängig von den Werten der restlichen Attribute $\rightarrow$ Vierte Normalform
 | ||
|   - Folge der 1NF: Mehrwertige Abhängigkeiten erzeugen Redundanz
 | ||
|     - eine (oder mehrere) Gruppe von Attributwerten ist von einem Schlüssel bestimmt, unabhängig von anderen Attributen
 | ||
|     - Resultat: Redundanz durch Bildung aller Kombinationen
 | ||
|   - wünschenswerte Schemaeigenschaft bei Vorliegen von MVDs: vierte Normalform
 | ||
|     - fordert die Beseitigung derartiger Redundanzen: keine zwei MVDs zwischen Attributen einer Relation
 | ||
|     - Elimination der rechten Seite einer der beiden mehrwertigen Abhängigkeiten,
 | ||
|     - linke Seite mit dieser rechten Seite in neue Relation kopiert
 | ||
| - Verbundabhängigkeit (kurz: JD)
 | ||
|   - R kann ohne Informationsverlust in $R_1,..., R_p$ aufgetrennt werden: $\bowtie [R_1,..., R_p]$
 | ||
| - Inklusionsabhängigkeit (kurz: IND)
 | ||
|   - auf der rechten Seite einer Fremdschlüsselabhängigkeit nicht unbedingt der Primärschlüssel einer Relation
 | ||
| 
 | ||
| > Vierte Normalform: erweitertes Relationenschema $R = (R, \bf{K})$ ist in vierter Normalform (4NF) bezüglich M genau dann, wenn für alle $X\rightarrow\rightarrow Y \in M^+$ gilt: $X\rightarrow\rightarrow Y$ ist trivial oder $X\supseteq K$ für ein $K\in\bf{K}$
 | ||
| 
 | ||
| 
 | ||
| # Relationale Theorie
 | ||
| ## Rechnen mit FDs
 | ||
| - gilt für f über R $SAT_R(F)\subseteq SAT_R(f)$, dann impliziert F die FD f (kurz: $F|= f$)
 | ||
| - Hüllenbildung: Ermittlung aller funktionalen Abhängigkeiten, die aus einer gegebenen FD_Menge abgeleitet werden können
 | ||
| - Hülle: $F_R^+ := \{ f | (f \text{ FD über R} ) \wedge F |= f\}$
 | ||
| 
 | ||
| Ableitungsregel:
 | ||
| - F1: Reflexivität $X\supseteq Y \Rightarrow X\rightarrow Y$
 | ||
| - F2: Augumentation $\{X\rightarrow Y\}\Rightarrow XZ\rightarrow YZ, \text{ sowie } XZ\rightarrow Y$
 | ||
| - F3: Transitivität $\{ X\rightarrow Y,Y\rightarrow Z\}\Rightarrow X\rightarrow Y$
 | ||
| - F4: Dekomposition $\{X\rightarrow YZ\} \Rightarrow X\rightarrow Y$
 | ||
| - F5: Vereinigung $\{X\rightarrow Y, X\rightarrow Z\}\Rightarrow X\rightarrow YZ$
 | ||
| - F6: Pseudotransitivität $\{X\rightarrow Y, WY\rightarrow Z\}\Rightarrow WX\rightarrow Z$
 | ||
| 
 | ||
| F1-F3 bekannt als Armstrong-Axiome (sound, complete)
 | ||
| - gültig (sound): Regeln leiten keine FDs ab, die logisch nicht impliziert
 | ||
| - vollständig (complete): alle implizierten FDs werden abgeleitet
 | ||
| - unabhängig (independent) oder  auch bzgl. ⊆ minimal: keine Regel kann weggelassen werden
 | ||
| 
 | ||
| Alternative Regelmenge
 | ||
| - B-Axiome oder RAP-Regeln
 | ||
|   - R Reflexivität $\{\}\Rightarrow X\rightarrow X$
 | ||
|   - A Akkumulation $\{X\rightarrow YZ, Z\rightarrow AW\}\Rightarrow X\rightarrow YZA$
 | ||
|   - P Projektivität $\{X\rightarrow YZ\}\Rightarrow X\rightarrow Y$
 | ||
| - Regelmenge ist vollständig, da Armstrong-Axiome daraus abgeleitet werden können
 | ||
| 
 | ||
| > Membership Problem: Kann eine bestimmte FD $X\rightarrow Y$ aus der vorgegebenen Menge F abgeleitet werden, d.h. wird sie von F impliziert? $X\rightarrow Y \in F^+$
 | ||
| - Hülle einer Attributmenge X bzgl. F ist $X^+_F := \{A | X\rightarrow A \in F^+\}$
 | ||
| - Membership-Problem kann durch das modifizierte Problem $Y\subseteq X_F^+$ in linearer Zeit gelöst werden
 | ||
| 
 | ||
| Überdeckungen
 | ||
| - F heißt äquivalent zu G; oder
 | ||
| - F Überdeckung von G; kurz: $F\equiv G$ falls $F^+=G^+$
 | ||
| - verschiedene Formen von Überdeckung: nicht-redundant, reduziert, minimal, ringförmig
 | ||
| 
 | ||
| Reduktionsoperationen
 | ||
| - Ziel: Entfernen überflüssiger Attribute auf linker bzw. rechter Seite von FDs
 | ||
| - Linksreduktion: entfernt unwesentliche Attribute auf der linken Seite einer FD
 | ||
| - Rechtsreduktion: entsprechend auf der rechten Seite
 | ||
| - erw. Relationenschema $R = (R, K)$, FD-Menge F über R, A ist ein Attribut aus R und $X\rightarrow Y$ eine FD aus F 
 | ||
| > Unwesentliche Attribute
 | ||
| > A heißt unwesentlich in $X\rightarrow Y$ bzgl. F, wenn
 | ||
| >- $X=AZ,Z\not= X \Rightarrow (F-\{X\rightarrow Y\})\cup \{Z\rightarrow Y\} \equiv F$ oder
 | ||
| >- $Y=AW, W\not=Y\Rightarrow (F-\{X\rightarrow Y\})\cup \{X\rightarrow W\} \equiv F$
 | ||
| - A kann also aus der FD $X\rightarrow Y$ entfernt werden, ohne dass sich die Hülle von F ändert
 | ||
| - FD $X\rightarrow Y$ heißt linksreduziert, wenn kein Attribut in X unwesentlich ist
 | ||
| - FD $X\rightarrow Y$ heißt rechtsreduziert, wenn kein Attribut in Y unwesentlich ist
 | ||
| 
 | ||
| Minimale Überdeckung
 | ||
| - Eine minimale Überdeckung ist eine Überdeckung, die eine minimale Anzahl von FDs enthält
 | ||
| - Auswahl der kleinsten aller nicht-redundanten Überdeckungen
 | ||
| - FD-Menge F heißt minimal gdw. $\forall F' [F'\equiv \Rightarrow |F|\leq |F'|]$
 | ||
| - Bestimmung etwa durch reduzierte Überdeckung mit anschließender Äquivalenzklassenbildung (später)
 | ||
| 
 | ||
| Äquivalenzklassen
 | ||
| - FDs mit äquivalenten linken Seiten werden zu einer Äquivalenzklasse zusammengefasst
 | ||
| - FDs $X_1 \rightarrow Y_1$ und $X_2\rightarrow Y_2$ liegen in einer Äquivalenzklasse, wenn $X_1\rightarrow X_2$ und $X_2\rightarrow X_1$ gelten
 | ||
| - In einigen Fällen können nun zwei solche FDs in einer Äquivalenzklasse zu einer FD $X\rightarrow Y_1 Y_2$ zusammengefasst werden
 | ||
| - Da die FDs einer Äquivalenzklasse in die Form $X_1\rightarrow X_2, X_2\rightarrow X_3,..., X_n\rightarrow X_1, X_1\rightarrow Y$ überführt werden können, nennt man eine Überdeckung dieser Form eine ringförmige Überdeckung
 | ||
| - linke Seiten sind äquivalent, wenn sie sich gegenseitig funktional bestimmen
 | ||
| 
 | ||
| 
 | ||
| ## Mehr zu Normalformen
 | ||
| - partielle Abhängigkeit liegt vor, wenn ein Attribut funktional schon von einem Teil des Schlüssels abhängt
 | ||
| - Hinweis: partiell abhängiges Attribut stören nur, wenn es kein Primattribut ist
 | ||
| - 2NF formal: erweitertes Relationenschema $R = (R, K)$, FD-Menge F über R
 | ||
| 
 | ||
| > Zweite Normalform
 | ||
| > - Y hängt partiell von X bzgl. F ab, wenn die FD $X\rightarrow Y$ nicht linksreduziert ist
 | ||
| > - Y hängt voll von X ab, wenn die FD $X\rightarrow Y$ linksreduziert ist
 | ||
| > - R ist in 2NF, wenn R in 1NF ist und jedes Nicht-Primattribut von R voll von jedem Schlüssel von R abhäng
 | ||
| 
 | ||
| ## Entwurfsverfahren
 | ||
| Ziele:
 | ||
| - Universum $U$ und FD-Menge F gegeben
 | ||
| - lokal erweitertes Datenbankschema $S=\{(R_1, K_1),...,(R_p, K_p)\}$ berechnen mit
 | ||
|   - T1: S charakterisiert vollständig F
 | ||
|   - S1: S ist in 3NF bezüglich F
 | ||
|   - T2: Dekomosition von $U$ in $R_1,...,R_p$ ist verbundtreu bezüglich F
 | ||
|   - S2: Minimalität, d.h. $\not\exists S':S'$ erfüllt T1,S1,T2 und $|S'|<|S|$
 | ||
| 
 | ||
| Dekomposition:
 | ||
| - Geg.: initiales Universalrelationenschema $R = (U, K(F))$ mit allen Attributen und einer von erfassten FDs F über R implizierten Schlüsselmenge
 | ||
|   - Attributmenge U und eine FD-Menge F
 | ||
|   - suche alle $K\rightarrow U$ mit K minimal, für die $K\rightarrow U \in F^+$ gilt $(K(F))$
 | ||
| - Ges.: Zerlegung in $D = \{R_1, R_2,... \}$ von 3NF-Relationenschemata
 | ||
| - Beispiel:
 | ||
|   - initiales Relationenschema $R=ABC$
 | ||
|   - funktionale Abhängigkeiten $F=\{A\rightarrow B, B\rightarrow C\}$
 | ||
|   - Schlüssel $K=A$
 | ||
| - Bewertung
 | ||
|   - Vorteile: 3NF, Verbundtreue
 | ||
|   - Nachteile: restliche Kriterien nicht, reihenfolgeabhängig, NP-vollständig (Schlüsselsuche)
 | ||
| 
 | ||
| Details zum Syntheseverfahren
 | ||
| - Prinzip: Synthese formt Original-FD-Menge F in resultierende Menge von Schlüsselabhängigkeiten G so um, dass $F\equiv G$ gilt
 | ||
| - „Abhängigkeitstreue“ im Verfahren verankert
 | ||
| - 3NF und Minimalität wird auch erreicht, reihenfolgeunabhängig
 | ||
| - Zeitkomplexität: quadratisch
 | ||
| 
 | ||
| Syntheseverfahren für Relationenschema R mit FDs F
 | ||
| - Ges.: verlustfreie und abhängigkeitstreue Zerlegung in $R_1,... R_n$, wobei alle $R_i$ in 3NF sind
 | ||
| - Bilde Äquivalentklassen $C_i$ von FD aus $\hat{F}$ mit gleichen oder äquivalenten linken Seiten, d.h. $C_i=\{X_i\rightarrow A_{i1},X_i\rightarrow A_{i2},...\}$. Bilde zu jeder Äquivalenzklasse $C_i$ ein Schema der Form $R_{Ci}=\{X_i\cup \{A_{i1}\}\cup \{A_{i2}\}\cup ... \}$. Falls keines der Schemata $R_{Ci}$ enthält einen Schlüssel von R, erzeuge weiteres Relationenschema $R_K$ mit Attributen aus R, die Schlüssel bilden
 | ||
| - Beispiel
 | ||
|   - FD-Menge $F=\{A\rightarrow B, AB\rightarrow C, A\rightarrow C, B\rightarrow A, C\rightarrow E\}$
 | ||
|   - minimale Überdeckung $\hat{F}=\{A\rightarrow B,B\rightarrow C, B\rightarrow A, C\rightarrow E\}$
 | ||
|   - Zusammenfassung zu Äquivalenzklassen $C_1=\{A\rightarrow B,B\rightarrow C, B\rightarrow A\}, C_2=\{C\rightarrow E\}$
 | ||
|   - Syntheseergebnis: $(ABC,\{\{A\},\{B\}\}),(CE,\{C\})$
 | ||
| 
 | ||
| Erreichung der Verbundtreue
 | ||
| - Erreichen der Verbundtreue durch einfachen „Trick“:
 | ||
|   - Erweitern der Original-FD-Menge F um $U\rightarrow \delta$ um Dummy-Attribut $\delta$
 | ||
|   - $\delta$ wird nach Synthese entfernt
 | ||
| - Beispiel: $\{A\rightarrow B, C\rightarrow E\}$
 | ||
|   - Syntheseergebnis $(AB, \{A\}), (CE, \{C\})$ ist nicht verbundtreu, da Universalschlüssel in keinem Schema enthalten ist
 | ||
|   - Dummy-FD $ABCE\rightarrow \delta$; reduziert auf $AC\rightarrow\delta$
 | ||
|   - liefert drittes Relationenschema $(AC,\{AC\})$
 | ||
| 
 | ||
| 
 | ||
| # Die relationale Anfragesprache SQL
 | ||
| ## Aufbau von SQL-Anfragen
 | ||
| - `select`
 | ||
|   - Projektionsliste
 | ||
|   - Festlegung der Projektionsattribute
 | ||
|   - arithmetische Operationen und Aggregatfunktionen
 | ||
|   - Attribute der hinter from stehenden Relationen, optional mit Präfix, der Relationennamen oder Namen der Tupelvariablen angibt
 | ||
|   - arithmetische Ausdrücke über Attributen dieser Relationen und passenden Konstanten
 | ||
|   - Aggregatfunktionen über Attributen dieser Relationen
 | ||
|   - Spezialfall der Projektionsliste: * ,liefert alle Attribute der Relation(en) aus dem from-Teil
 | ||
|   - distinct eliminiert Duplikate
 | ||
| - `from`
 | ||
|   - zu verwendende Relationen, evtl. Umbenennungen
 | ||
|   - einfachste Form; hinter jedem Relationennamen kann optional eine Tupelvariable stehen
 | ||
| - `where`
 | ||
|   - Selektions-, Verbundbedingungen
 | ||
|   - Geschachtelte Anfragen (wieder ein SFW-Block)
 | ||
| 
 | ||
| ### Verbunde
 | ||
| - bei mehr als einer Relation wird das kartesische Produkt gebildet:
 | ||
|     `select * from WEINE, ERZEUGER`
 | ||
| - alle Kombinationen werden ausgegeben!
 | ||
| - Einführung von Tupelvariablen erlaubt mehrfachen Zugriff auf eine Relation:
 | ||
|     `select * from WEINE w1, WEINE w2`
 | ||
|     - Spalten lauten dann:
 | ||
|     `w1.WeinID, w1.Name, w1.Farbe, w1.Jahrgang, w1.Weingut, w2.WeinID, w2.Name, w2.Farbe, w2.Jahrgang, w2.Weingut`
 | ||
| - Natürlicher Verbund in SQL92
 | ||
|     `select * from WEINE, ERZEUGER where WEINE.Weingut = ERZEUGER.Weingut`
 | ||
| - Verbund mit "join"; kennen mehrere explizite Verbundoperatoren (engl. join);  als Abkürzung für die ausführliche Anfrage mit Kreuzprodukt aufzufassen
 | ||
|     `select * from WEINE natural join ERZEUGER`
 | ||
|     - Verbund mit beliebigem Prädikat: `select * from WEINE join ERZEUGER on WEINE.Weingut = ERZEUGER.Weingut`
 | ||
|     - Gleichverbund mit using: `select * from WEINE join ERZEUGER using (Weingut)`
 | ||
| - Kreuzprodukt `select * from WEINE, ERZEUGER`
 | ||
| - als cross join `select * from WEINE cross join ERZEUGER`
 | ||
| - "Zwischenrelationen" aus SQL-Operationen oder einem SFW-Block können über Tupelvariablen mit Namen versehen werden
 | ||
|     `select Ergebnis.Weingut from (WEINE natural join ERZEUGER) as Ergebnis`
 | ||
| - Präfixe für Eindeutigkeit `select Name, Jahrgang, ERZEUGER.Weingut from WEINE natural join ERZEUGER`
 | ||
| - bei der Verwendung von Tupelvariablen, kann der Name einer Tupelvariablen zur Qualifizierung eines Attributs benutzt werden:
 | ||
|     `select w1.Name, w2.Weingut from WEINE w1, WEINE w2`
 | ||
| 
 | ||
| ### Selektionen
 | ||
| - where Klausel: `select ...from ... where bedingung`
 | ||
|   - Formen der Bedingung:
 | ||
|     - Vergleich eines Attributs mit einer Konstanten: `attribut θ konstante`
 | ||
|     - mögliche Vergleichssymbole θ abhängig vom Wertebereich; etwa =, <>, >, <, >= sowie <=.
 | ||
|     - Vergleich zwischen zwei Attributen mit kompatiblen Wertebereichen: `attribut1 θ attribut2`
 | ||
|     - logische Konnektoren or, and und not
 | ||
| - Verbundbedingung
 | ||
|   - Verbundbedingung hat die Form: `relation1.attribut = relation2.attribut`
 | ||
|   - Beispiel: `select Name, Jahrgang, ERZEUGER.Weingut from WEINE, ERZEUGER where WEINE.Weingut = ERZEUGER.Weingut`
 | ||
| - Bereichsselektion
 | ||
|   - `attrib between konstante_1 and konstante_2`
 | ||
|   - ist Abkürzung für `attrib ≥ konstante_1 and attrib ≤ konstante_2`
 | ||
|   - schränkt damit Attributwerte auf das abgeschlossene Intervall $[konstante_1 , konstante_2 ]$ ein
 | ||
|   - Beispiel: `select * from WEINE where Jahrgang between 2000 and 2005`
 | ||
| - Ungewissheitsselektion
 | ||
|   - Notation `attribut like spezialkonstante`
 | ||
|   - Mustererkennung in Strings (Suche nach mehreren Teilzeichenketten)
 | ||
|   - Spezialkonstante kann die Sondersymbole `%` und `_` beinhalten  
 | ||
|     - `%` steht für kein oder beliebig viele Zeichen
 | ||
|     - `_` steht für genau ein Zeichen
 | ||
|   - Beispiel: `select * from WEINE where Name like 'La Rose%'`
 | ||
| 
 | ||
| ### Mengenoperationen
 | ||
| Mengenoperationen erfordern kompatible Wertebereiche für Paare korrespondierender Attribute:
 | ||
| - beide Wertebereiche sind gleich oder
 | ||
| - beide sind auf character basierende Wertebereiche (unabhängig von der Länge der Strings) oder
 | ||
| - beide sind numerische Wertebereiche (unabhängig von dem genauen Typ) wie integer oder float
 | ||
| - Ergebnisschema := Schema der „linken“ Relation
 | ||
| ```sql
 | ||
| select A, B, C from R1 
 | ||
| union 
 | ||
| select A, C, D from R2
 | ||
| ```
 | ||
| 
 | ||
| - Vereinigung, Durchschnitt und Differenz als union, intersect und except
 | ||
| - orthogonal einsetzbar:
 | ||
| - `select * from (select Weingut from ERZEUGER except select Weingut from WEINE)`
 | ||
| - äquivalent zu `select * from ERZEUGER except corresponding WEINE`
 | ||
| - über corresponding by-Klausel: Angabe der Attributliste, über die Mengenoperation ausgeführt wird
 | ||
| - `select * from ERZEUGER except corresponding by (Weingut) WEINE`
 | ||
| - bei Vereinigung: Defaultfall ist Duplikateliminierung (union distinct); ohne Duplikateliminierung durch union all
 | ||
| 
 | ||
| ### Geschachtelte Anfragen
 | ||
| Schachtelung von Anfragen
 | ||
| - für Vergleiche mit Wertemengen notwendig:
 | ||
| - Standardvergleiche in Verbindung mit den Quantoren all ($\forall$) oder any ($\exists$)
 | ||
| - spezielle Prädikate für den Zugriff auf Mengen, in und exists
 | ||
| - in-Prädikat und geschachtelte Anfragen
 | ||
|   - Notation: `attribut in ( SFW-block )`
 | ||
|   - Beispiel: `select Name from WEINE where Weingut in (select Weingut from ERZEUGER where Region = 'Bordeaux')`
 | ||
|   - Auswertung von geschachtelten Anfragen
 | ||
|       1. Auswertung der inneren Anfrage zu den Weingütern aus Bordeaux
 | ||
|       2. Einsetzen des Ergebnisses als Menge von Konstanten in die äußere Anfrage hinter in
 | ||
|       3. Auswertung der modifizierten Anfrage
 | ||
|       `select Name from WEINE where Weingut in ( 'Château La Rose', 'Château La Pointe')`
 | ||
|   - interne Auswertung: Umformung in einen Verbund
 | ||
|     `select Name from WEINE natural join ERZEUGER where Region = 'Bordeaux'`
 | ||
| - Negation des in-Prädikats
 | ||
|   - Simulation des Differenzoperators $^π Weingut^{(ERZEUGER)}- ^π Weingut^{(WEINE)}$ durch SQL-Anfrage
 | ||
|     `select Weingut from ERZEUGER where Weingut not in ( select Weingut from WEINE )`
 | ||
| 
 | ||
| 
 | ||
| ### Mächtigkeit des SQL-Kerns
 | ||
| | Relationenalgebra  | SQL |
 | ||
| | -- | -- |
 | ||
| | Projektion | select distinct | 
 | ||
| | Selektion | where ohne Schachtelung | 
 | ||
| | Verbund | from, where\\ from mit join oder natural join |
 | ||
| | Umbenennung | from mit Tupelvariable; as | 
 | ||
| | Differenz | where mit Schachtelung\\ except corresponding |
 | ||
| | Durchschnitt | where mit Schachtelung\\ intersect corresponding |
 | ||
| | Vereinigung | union corresponding |
 | ||
| 
 | ||
| ## Erweiterungen des SFW-Blocks
 | ||
| Erweiterungen des SFW-Blocks
 | ||
| - innerhalb der from-Klausel weitere Verbundoperationen (äußerer Verbund),
 | ||
| - innerhalb der where-Klausel weitere Arten von Bedingungen und Bedingungen mit Quantoren,
 | ||
| - innerhalb der select-Klausel die Anwendung von skalaren Operationen und Aggregatfunktionen,
 | ||
| - zusätzliche Klauseln group by und having
 | ||
| - rekursive Anfragen
 | ||
| 
 | ||
| ### Skalare Ausdrücke
 | ||
| Umbenennung von Spalten: `ausdruck as neuer-name`
 | ||
| - skalare Operationen auf
 | ||
|   - numerischen Wertebereichen: etwa +, −, ∗ und /,
 | ||
|   - Strings: Operationen wie char_length (aktuelle Länge eines Strings), die Konkatenation ∥ und die Operation substring (Suchen einer Teilzeichenkette an bestimmten Positionen des Strings),
 | ||
|   - Datumstypen und Zeitintervallen: Operationen wie current_date (aktuelles Datum), current_time (aktuelle Zeit), +, − und ∗
 | ||
| - bedingte Ausdrücke
 | ||
| - Typkonvertierung
 | ||
| - skalare Ausdrücke können mehrere Attribute umfassen
 | ||
| - Anwendung ist tupelweise: pro Eingabetupel entsteht ein Ergebnistupel
 | ||
| - Ausgabe der Namen aller Grand Cru-Weine
 | ||
|     `select substring(Name from 1 for (char_length(Name) - position('Grand Cru' in Name))) from WEINE where Name like '%Grand Cru'`
 | ||
| - Annahme: zusätzliches Attribut HerstDatum in WEINE
 | ||
|     `alter table WEINE add column HerstDatum date update WEINE set HerstDatum = date '2004-08-13' where Name = 'Zinfandel'`
 | ||
|   - Anfrage:
 | ||
|       `select Name, year(current_date - HerstDatum) as Alter from WEINE`
 | ||
| 
 | ||
| ### Bedingte Ausdrücke
 | ||
| - case-Anweisung: Ausgabe eines Wertes in Abhängigkeit von der Auswertung eines Prädikats
 | ||
|     `case when prädikat_1 then ausdruck_1 ... when prädikat_n−1 then ausdruck_n−1 [ else ausdruck_n ] end`
 | ||
| - Einsatz in select- und where-Klausel
 | ||
|     `select case when Farbe = 'Rot' then 'Rotwein' when Farbe = 'Weiß' then 'Weißwein' else 'Sonstiges' end as Weinart, Name from WEINE`
 | ||
| 
 | ||
| ### Typkonvertierung
 | ||
| - explizite Konvertierung des Typs von Ausdrücken 
 | ||
|     `cast(ausdruck as typname)`
 | ||
| - Beispiel: int-Werte als Zeichenkette für Konkatenationsoperator
 | ||
|     `select cast(Jahrgang as varchar) || 'er ' || Name as Bezeichnung from WEINE`
 | ||
| 
 | ||
| ### Quantoren und Mengenvergleiche
 | ||
| - Quantoren: all, any, some und exists
 | ||
| - Notation
 | ||
|     `attribut θ { all | any | some } ( select attribut from ...where ...)`
 | ||
| - all: where-Bedingung wird erfüllt, wenn für alle Tupel des inneren SFW-Blocks der θ-Vergleich mit attribut true wird
 | ||
| - any bzw. some: where-Bedingung wird erfüllt, wenn der θ-Vergleich mit mindestens einem Tupel des inneren SFW-Blocks true wird
 | ||
| - Bestimmung des ältesten Weines
 | ||
|     `select * from WEINE where Jahrgang <= all ( select Jahrgang from WEINE)`
 | ||
| - alle Weingüter, die Rotweine produzieren
 | ||
|     `select * from ERZEUGER where Weingut = any ( select Weingut from WEINE where Farbe = 'Rot')`
 | ||
| 
 | ||
| ### Vergleich von Wertemengen
 | ||
| - Test auf Gleichheit zweier Mengen allein mit Quantoren nicht möglich
 | ||
| - Beispiel: „Gib alle Erzeuger aus, die sowohl Rot- als auch Weißweine produzieren.“
 | ||
| - falsche Anfrage `select Weingut from WEINE where Farbe = 'Rot' and Farbe = 'Weiß'`
 | ||
| - richtige Anfrage `select w1.Weingut from WEINE w1, WEINE w2 where w1.Weingut = w2.Weingut and w1.Farbe = 'Rot' and w2.Farbe = 'Weiß'`
 | ||
| 
 | ||
| ### Das exists/not exists-Prädikat
 | ||
| - einfache Form der Schachtelung
 | ||
|     `exists ( SFW-block )`
 | ||
| - liefert true, wenn das Ergebnis der inneren Anfrage nicht leer ist
 | ||
| - speziell bei verzahnt geschachtelten (korrelierte) Anfragen sinnvoll
 | ||
|   - in der inneren Anfrage wird Relationen- oder Tupelvariablen-Name aus dem from-Teil der äußeren Anfrage verwendet
 | ||
| 
 | ||
| ### Verzahnt geschachtelte Anfragen
 | ||
| Weingüter mit 1999er Rotwein
 | ||
| ```sql
 | ||
| select * from ERZEUGER
 | ||
| where 1999 in (
 | ||
| select Jahrgang from WEINE
 | ||
| where Farbe='Rot' and
 | ||
| WEINE.Weingut = ERZEUGER.Weingut)
 | ||
| ```
 | ||
| konzeptionelle Auswertung
 | ||
| 1. Untersuchung des ersten ERZEUGER-Tupels in der äußeren Anfrage (Creek) und Einsetzen in innere Anfrage
 | ||
| 2. Auswertung der inneren Anfrage
 | ||
| 3. Weiter bei 1. mit zweitem Tupel ...
 | ||
| 
 | ||
| ## Aggregatfunktionen und Gruppierungen
 | ||
| - Aggregatfunktionen berechnen neue Werte für eine gesamte Spalte, etwa die Summe oder den Durchschnitt der Werte einer Spalte
 | ||
| - Beispiel: Ermittlung des Durchschnittspreises aller Artikel oder des Gesamtumsatzes über alle verkauften Produkte
 | ||
| - bei zusätzlicher Anwendung von Gruppierung: Berechnung der Funktionen pro Gruppe, z.B. der Durchschnittspreis pro Warengruppe oder der Gesamtumsatz pro Kunde
 | ||
| - Aggregatfunktionen in Standard-SQL:
 | ||
|   - count: berechnet Anzahl der Werte einer Spalte oder alternativ (im Spezialfall count(∗)) die Anzahl der Tupel einer Relation
 | ||
|   - sum: berechnet die Summe der Werte einer Spalte (nur bei numerischen Wertebereichen)
 | ||
|   - avg: berechnet den arithmetischen Mittelwert der Werte einer Spalte (nur bei numerischen Wertebereichen)
 | ||
|   - max bzw. min: berechnen den größten bzw. kleinsten Wert einer Spalte
 | ||
| - Argumente einer Aggregatfunktion:
 | ||
|   - ein Attribut der durch die from-Klausel spezifizierten Relation,
 | ||
|   - ein gültiger skalarer Ausdruck oder
 | ||
|   - im Falle der count-Funktion auch das Symbol ∗
 | ||
| - vor dem Argument (außer im Fall von count(∗)) optional auch die Schlüsselwörter distinct oder all
 | ||
|   - distinct: vor Anwendung der Aggregatfunktion werden doppelte Werte aus der Menge von Werten, auf die die Funktion angewendet wird
 | ||
|   - all: Duplikate gehen mit in die Berechnung ein (Default-Voreinstellung)
 | ||
|   - Nullwerte werden in jedem Fall vor Anwendung der Funktion aus der Wertemenge eliminiert (außer im Fall von count(∗))
 | ||
| - Beispiel: Anzahl der Weine:
 | ||
|   `select count(*) as Anzahl from WEINE`
 | ||
| - Beispiel: Anzahl der verschiedenen Weinregionen:
 | ||
|   `select count(distinct Region) from ERZEUGER`
 | ||
| - Weine, die älter als der Durchschnitt sind:
 | ||
|   `select Name, Jahrgang from WEINE where Jahrgang < ( select avg(Jahrgang) from WEINE)`
 | ||
| - Schachtelung von Aggregatfunktionen nicht erlaubt
 | ||
|   `select f 1 (f 2 (A)) as Ergebnis from R ...` -- (falsch!); 
 | ||
|   mögliche Formulierung: `select f 1 (Temp) as Ergebnis from ( select f 2 (A) as Temp from R ...)`
 | ||
| 
 | ||
| - Aggregatfunktionen in where-Klausel
 | ||
|   - Aggregatfunktionen liefern nur einen Wert ⇝ Einsatz in Konstanten-Selektionen der where-Klausel möglich
 | ||
|   - alle Weingüter, die nur einen Wein liefern:
 | ||
|     `select * from ERZEUGER e where 1 = ( select count(*) from WEINE w where w.Weingut = e.Weingut )`
 | ||
| 
 | ||
| - group by und having
 | ||
|   - Notation
 | ||
|     - select ...
 | ||
|     - from ...
 | ||
|     - [where ...]
 | ||
|     - [group by attributliste ]
 | ||
|     - [having bedingung ]
 | ||
|   - Beispiel
 | ||
|     - Regionen mit mehr als einem Wein
 | ||
|       `select Region, count(*) as Anzahl from ERZEUGER natural join WEINE group by Region having count(*) > 1`
 | ||
| 
 | ||
|       
 | ||
| ## Rekursion
 | ||
| 
 | ||
| 
 | ||
| # Grundlagen von Anfragen: Algebra & Kalkül
 | ||
| 
 | ||
| 
 | ||
| # Transaktionen, Integrität und Trigger
 | ||
| 
 | ||
| 
 | ||
| # Sichten und Zugriffskontrolle
 | ||
| 
 | ||
| 
 | ||
| # NoSQL Datenbanken |