53 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	| title | date | author | 
|---|---|---|
| Datenbanksysteme | Wintersemester 20/21 | 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
- Integration: einheitliche, nichtredundante Datenverwaltung
- Operationen: Speichern, Suchen, Ändern
- Katalog: Zugriffe auf Datenbankbeschreibungen im Data Dictionary
- Benutzersichten
- Integritätssicherung: Korrektheit des Datenbankinhalts
- Datenschutz: Ausschluss unauthorisierter Zugriffe
- Transaktionen: mehrere DB-Operationen als Funktionseinheit
- Synchronisation: parallele Transaktionen koordinieren
- 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:
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_2von zwei Relationenr_1undr_2:- Gesamtheit der beiden Tupelmengen
- Attributmengen beider Relationen müssen identisch sein
 
- 
Differenz r_1 − r_2eliminiert 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
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
 
- Kreuzprodukt: 
- 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
- statische Eigenschaften
- Objekte
- Beziehungen
- inklusive der Standard-Datentypen, die Daten über die Beziehungen und Objekte darstellen können,
- dynamische Eigenschaften wie
- Operationen
- Beziehungen zwischen Operationen,
- Integritätsbedingungen an
- Objekte
- 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_1vom Entity-TypE_1ist maximal ein Entitye_2ausE_2zugeordnet und umgekehrt
- Bsp: Prospekt beschreibt Produkt
 
- jedem Entity 
- 
1:N Beziehung - jedem Entity e_1ausE_1sind beliebig viele EntitiesE_2zugeordnet, aber zu jedem Entitye_2gibt es maximal eine_1ausE_1
- Bsp: Lieferant liefert Produkte, Mutter hat Kinder
 
- jedem Entity 
- 
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_iist ∗
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_1maximal einer Instanz aus- E_2zugeordnet 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])
 
- partielle funktionale Beziehung: 
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
- (automatische) Transformation des konzeptionellen Schemas z.B. ER -> relationales Modell
- 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ätserhöhende Abbildung: Abbildung auf R mit genau einem Schlüssel K ( K={{A},{B}} )
- Kapazitätsvermindernde Abbildung: Relationsschema mit einem Schlüssel
- Kapazitätserhaltende 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_2wird Primärschlüssel der Beziehung | 
| 1:1 | P_1undP_2werden Schlüssel der Beziehung | 
| m:n | P_1 \cup P_2wird Primärschlüssel der Beziehung | 
| IST Beziehung | R_1erhält zusätzlichen SchlüsselP_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
- Unichtleere, 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überR = {A_1,..., A_n}(kurz:r(R)) ist endliche Menge von Abbildungent:R \rightarrow \bigcup_{i=1}^{m} D_i, Tupel genannt
- Es gilt t(A) \in dom(A)(t(A)Restriktion vontaufA \in R)
- für X\subseteq Ranalogt(X)X-Wert vont
- 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 Relationend:={r_1,..., r_p}, wobeir_i (R_i)
- Datenbank düberS: d(S)
- Relation r\in d: Basisrelation
 
- Menge von Relationenschemata 
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
- alle Anwendungsdaten aus den Basisrelationen hergeleitet werden können,
- nur semantisch sinnvolle und konsistente Anwendungsdaten dargestellt werden können und
- 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
- 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
 
- 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)
 
 
- Dritte Normalform
- eliminiert (zusätzlich) transitive Abhängigkeiten
- etwa Weingut \rightarrowAnbaugebiet und Anbaugebiet\rightarrowRegion 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 Rheißt transitiv abhängig von X bezüglich F genau dann, wenn es einY\subseteq Rgibt mitX \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 Atransitiv abhängig von einemK\in \bf{K}bezüglichF_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
- nur semantisch sinvolle und konsistente Anwendungsdaten dargestellt (Abhängigkeitstreue) und
- 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 = ABCinR_1 = ABundR_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
 
- Zerlegung des Relationenschemas 
 
Verbundtreue: Die Dekomposition einer Attributmenge
XinX_1,..., X_pmitX = \bigcup_{i=1}^p X_iheiß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) = rgilt.
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 \rightarrowVierte 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
 
 
- innerhalb einer Relation r wird einem Attributwert von X eine Menge von Y-Werten zugeordnet, unabhängig von den Werten der restlichen Attribute 
- Verbundabhängigkeit (kurz: JD)
- R kann ohne Informationsverlust in R_1,..., R_paufgetrennt werden:\bowtie [R_1,..., R_p]
 
- R kann ohne Informationsverlust in 
- 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 alleX\rightarrow\rightarrow Y \in M^+gilt:X\rightarrow\rightarrow Yist trivial oderX\supseteq Kfür einK\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
 
- R Reflexivität 
- Regelmenge ist vollständig, da Armstrong-Axiome daraus abgeleitet werden können
Membership Problem: Kann eine bestimmte FD
X\rightarrow Yaus 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 GfallsF^+=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 undX\rightarrow Yeine FD aus F
Unwesentliche Attribute A heißt unwesentlich in
X\rightarrow Ybzgl. F, wenn
X=AZ,Z\not= X \Rightarrow (F-\{X\rightarrow Y\})\cup \{Z\rightarrow Y\} \equiv Foder
Y=AW, W\not=Y\Rightarrow (F-\{X\rightarrow Y\})\cup \{X\rightarrow W\} \equiv F
- A kann also aus der FD X\rightarrow Yentfernt werden, ohne dass sich die Hülle von F ändert
- FD X\rightarrow Yheißt linksreduziert, wenn kein Attribut in X unwesentlich ist
- FD X\rightarrow Yheiß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_1undX_2\rightarrow Y_2liegen in einer Äquivalenzklasse, wennX_1\rightarrow X_2undX_2\rightarrow X_1gelten
- In einigen Fällen können nun zwei solche FDs in einer Äquivalenzklasse zu einer FD X\rightarrow Y_1 Y_2zusammengefasst 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 Ynicht linksreduziert ist- Y hängt voll von X ab, wenn die FD
X\rightarrow Ylinksreduziert 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 Uund 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 UinR_1,...,R_pist 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 Umit K minimal, für dieK\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
 
- initiales Relationenschema 
- 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 Ggilt
- „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 alleR_iin 3NF sind
- Bilde Äquivalentklassen C_ivon 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 ÄquivalenzklasseC_iein Schema der FormR_{Ci}=\{X_i\cup \{A_{i1}\}\cup \{A_{i2}\}\cup ... \}. Falls keines der SchemataR_{Ci}enthält einen Schlüssel von R, erzeuge weiteres RelationenschemaR_Kmit 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\})
 
- FD-Menge 
Erreichung der Verbundtreue
- Erreichen der Verbundtreue durch einfachen „Trick“:
- Erweitern der Original-FD-Menge F um U\rightarrow \deltaum Dummy-Attribut\delta
- \deltawird nach Synthese entfernt
 
- Erweitern der Original-FD-Menge F um 
- 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 aufAC\rightarrow\delta
- liefert drittes Relationenschema (AC,\{AC\})
 
- Syntheseergebnis 
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
 
- Spalten lauten dann:
- 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)
 
- Verbund mit beliebigem Prädikat: 
- 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
 
- Vergleich eines Attributs mit einer Konstanten: 
 
- Formen der Bedingung:
- Verbundbedingung
- Verbundbedingung hat die Form: relation1.attribut = relation2.attribut
- Beispiel: select Name, Jahrgang, ERZEUGER.Weingut from WEINE, ERZEUGER where WEINE.Weingut = ERZEUGER.Weingut
 
- Verbundbedingung hat die Form: 
- 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%'
 
- Notation 
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
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
- Auswertung der inneren Anfrage zu den Weingütern aus Bordeaux
- Einsetzen des Ergebnisses als Menge von Konstanten in die äußere Anfrage hinter in
- 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'
 
- Notation: 
- Negation des in-Prädikats
- Simulation des Differenzoperators ^π Weingut^{(ERZEUGER)}- ^π Weingut^{(WEINE)}durch SQL-Anfrageselect Weingut from ERZEUGER where Weingut not in ( select Weingut from WEINE )
 
- Simulation des Differenzoperators 
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
 
- Anfrage:
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
select * from ERZEUGER
where 1999 in (
select Jahrgang from WEINE
where Farbe='Rot' and
WEINE.Weingut = ERZEUGER.Weingut)
konzeptionelle Auswertung
- Untersuchung des ersten ERZEUGER-Tupels in der äußeren Anfrage (Creek) und Einsetzen in innere Anfrage
- Auswertung der inneren Anfrage
- 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
 
- Regionen mit mehr als einem Wein
 
- Notation