From c6da2f064b2c6646529c16db2afc266f171879b1 Mon Sep 17 00:00:00 2001 From: Robert Jeutter Date: Wed, 17 Feb 2021 12:17:57 +0100 Subject: [PATCH] neues Cheatsheet --- Datenbanksysteme - Cheatsheet.pdf | Bin 0 -> 269705 bytes Datenbanksysteme - Cheatsheet.tex | 3035 +++++++++++++++++++++++++++++ Datenbanksysteme.md | 2 - README.md | 1 + 4 files changed, 3036 insertions(+), 2 deletions(-) create mode 100644 Datenbanksysteme - Cheatsheet.pdf create mode 100644 Datenbanksysteme - Cheatsheet.tex diff --git a/Datenbanksysteme - Cheatsheet.pdf b/Datenbanksysteme - Cheatsheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..28a7753f08ea197f7e07ca0ef343dd8c2b4a3c7f GIT binary patch literal 269705 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

kLq+9c`02-%$3WH%saDJo2(Iz0vZS&uQY!V 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�?AGSw11$p*t` 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 b;E)SfLc&B3V2GXpRu5?iIe5_ej1A-; \textbf{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 + +\begin{enumerate*} + \item statische Eigenschaften + \begin{itemize*} + \item Objekte + \item Beziehungen inklusive der Standard-Datentypen, die Daten über die Beziehungen und Objekte darstellen können, + \end{itemize*} + \item dynamische Eigenschaften wie + \begin{itemize*} + \item Operationen + \item Beziehungen zwischen Operationen, + \end{itemize*} +\end{enumerate*} + +Datenbankmodelle im Überblick +\begin{itemize*} + \item HM: hierarchisches Modell, NWM: Netzwerkmodell, RM: Relationenmodell + \item NF 2 : Modell der geschachtelten (Non-First-Normal-Form = NF 2 ) Relationen, eNF 2 : erweitertes NF 2 -Modell + \item ER: Entity-Relationship-Modell, SDM: semantische Datenmodelle + \item OODM / C++: objektorientierte Datenmodelle auf Basis objektorientierter Programmiersprachen wie C++, + \begin{itemize*} + \item OEM: objektorientierte Entwurfsmodelle (etwa UML), + \item ORDM: objektrelationale Datenmodelle + \end{itemize*} +\end{itemize*} + +\subsection{ER Modell} +\begin{itemize*} + \item \textbf{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 + \item \textbf{Relationship}: beschreibt eine Beziehung zwischen Entities, z.B. ein Kunde bestellt einen Wein oder ein Wein wird von einem Winzer angeboten + \item \textbf{Attribut}: repräsentiert eine Eigenschaft von Entities oder Beziehungen, z.B. Name eines Kunden, Farbe eines Weines oder Datum einer Bestellung + \begin{itemize*} + \item Attribute modellieren Eigenschaften von Entities oder auch Beziehungen + \item alle Entities eines Entity-Typs haben dieselben Arten von Eigenschaften; Attribute werden somit für Entity-Typen deklariert + \end{itemize*} + \item \textbf{Werte}: primitive Datenelemente, die direkt darstellbar sind + \begin{itemize*} + \item Wertemengen sind beschrieben durch Datentypen, die neben einer Wertemenge auch die Grundoperationen auf diesen Werten charakterisieren + \item ER-Modell: vorgegebene Standard-Datentypen, etwa die ganzen Zahlen int, die Zeichenketten string, Datumswerte date etc. + \item jeder Datentyp stellt Wertebereich mit Operationen und Prädikaten dar + \end{itemize*} + \item \textbf{Entities} sind die in einer Datenbank zu repräsentierenden Informationseinheiten + \begin{itemize*} + \item im Gegensatz zu Werten nicht direkt darstellbar, sondern nur über ihre Eigenschaften beobachtbar + \item Entities sind eingeteilt in Entity-Typen, etwa $E_1 , E_2,...$ + \end{itemize*} + \item \textbf{Schlüsselattribute}: Teilmenge der gesamten Attribute eines Entity-Typs $E(A_1,... , A_m)$ + \begin{itemize*} + \item in jedem Datenbankzustand identifizieren die aktuellen Werte der Schlüsselattribute eindeutig Instanzen des Entity-Typs E + \item bei mehreren möglichen Schlüsselkandidaten: Auswahl eines Primärschlüssels + \end{itemize*} + \item \textbf{Beziehungstypen}: Beziehungen zwischen Entities werden zu Beziehungstypen zusammengefasst + \begin{itemize*} + \item Beziehungen können ebenfalls Attribute besitzen + \end{itemize*} +\end{itemize*} + + +Merkmale von Beziehungen +\begin{itemize*} + \item Stelligkeit oder Grad: + \begin{itemize*} + \item Anzahl der beteiligten Entity-Typen + \item häufig: binär + \item Beispiel: Lieferant liefert Produkt + \end{itemize*} + \item Kardinalität oder Funktionalität: + \begin{itemize*} + \item Anzahl der eingehenden Instanzen eines Entity-Typs + \item Formen: 1:1, 1:n, m:n + \item stellt Integritätsbedingung dar + \item Beispiel: maximal 5 Produkte pro Bestellung + \end{itemize*} +\end{itemize*} + +\begin{itemize*} + \item 1:1 Beziehung + \begin{itemize*} + \item jedem Entity $e_1$ vom Entity-Typ $E_1$ ist maximal ein Entity $e_2$ aus $E_2$ zugeordnet und umgekehrt + \item Bsp: Prospekt *beschreibt* Produkt + \end{itemize*} + \item 1:N Beziehung + \begin{itemize*} + \item 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$ + \item Bsp: Lieferant *liefert* Produkte, Mutter *hat* Kinder + \end{itemize*} + \item N:1 Beziehung + \begin{itemize*} + \item invers zu 1:N, auf funktionale Beziehung + \end{itemize*} + \item M:N Bezeihung + \begin{itemize*} + \item keine Restriktionen + \item Bsp: Bestellung *umfasst* Produkte + \end{itemize*} +\end{itemize*} + +[min,max]-Notation +\begin{itemize*} + \item 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 + \item Spezielle Wertangabe für $max_i$ ist * +\end{itemize*} + +Kardinalitätsangaben +\begin{itemize*} + \item [0, *] legt keine Einschränkung fest (default) + \item $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 + \item totale funktionale Beziehung wird durch $R(E_1 [1, 1], E_2 )$ modelliert + \item Beispiele: + \begin{itemize*} + \item partielle funktionale Beziehung: $lagert_in(Produkt[0,1],Fach[0,3])$ + \item totale funktionale Beziehung: $liefert(Lieferant[0,*],Produkt[1,1])$ + \end{itemize*} +\end{itemize*} + +\subsection{Weitere Konzepte im ER Modell} +\begin{itemize*} + \item abhängiger Entity-Typ: Identifikation über funktionale Beziehungen (Bsp x "gehört zu" y) + \item Spezialisierungs-/Generalisierungsbeziehung oder auch *IST*-Beziehung + \begin{itemize*} + \item E1 *IST* E2 + \item entspricht semantisch einer injektiven funktionalen Beziehung + \item Attribute des Entity-Typs E2 treffen auch auf E1 zu: "vererbte" Attribute + \item nicht nur Atrributsdeklarationen vererben sich, sondern auch jeweils die aktuellen Werte für eine Instanz + \item Kardinalitätsangabe immer: $IST(E_1[1,1], E_2[0,1])$ + \item Jede Instanz von E1 nimmt genau einmal an der Ist-Beziehung teil, während Instanzen des Obertyps E2 nicht teilnehmen müssen + \end{itemize*} +\end{itemize*} + +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 | + + +\section{Datenbankentwurf} +\subsection{Phasen des Datenbankentwurfs} +\begin{itemize*} + \item Datenerhaltung für mehrere Anwendungssysteme und mehrere Jahre + \item Anforderungen an Entwurf: + \begin{itemize*} + \item Anwendungsdaten jeder Anwendung sollen aus Daten der Datenbank ableitbar sein (mögl effizient) + \item nur "vernünftige" Daten sollen gespeichert werden + \item nicht-redundante Speicherung + \end{itemize*} +\end{itemize*} + +\paragraph{Phasenmodell} +Anforderungsanalyse $\leftrightarrow$ Konzeptioneller Entwurf $\leftrightarrow$ Verteilungsentwurf $\leftrightarrow$ Logischer Entwurf $\leftrightarrow$ Datendefinition $\leftrightarrow$ Physischer Entwurf $\leftrightarrow$ Implementierung \& Wartung + +\paragraph{Anforderungsanalyse} +\begin{itemize*} + \item Vorgehensweise: Sammeln des Informationsbedarfs in den Fachabteilungen + \item Ergebnis: + \begin{itemize*} + \item informale Beschreibung des Fachproblems (Texte, Tabellen, Formblätter,...) + \item Trennen der Informationen über Daten (Datenanalyse) von den Informationen über Funktionen (Funktionsanalyse) + \end{itemize*} + \item "Klassischer" Entwurf: nur Datenanalyse und Folgeschritte + \item Funktionsentwurf: siehe Methoden des Software Engineering +\end{itemize*} + +\paragraph{Konzeptioneller Entwurf} +\begin{itemize*} + \item erste Formale Beschreibung des Fachproblems + \item Sprachmittel: semantisches Datenmodell + \item Vorgehensweise: + \begin{itemize*} + \item Modellierung von Sichen z.B. für verschiedene Fachabteilungen + \item Analyse der vorliegenden Sichten in Bezug auf Konflikte + \item Integration der Sichten in ein Gesamtschema + \end{itemize*} + \item Phasen: + \begin{itemize*} + \item Sichtentwurf + \item Sichtanalyse + \item Sichtintegration + \end{itemize*} + \item Ergebnis: konzeptionelles Gesamtschema (z.B. ER Schema) +\end{itemize*} + +\paragraph{weiteres Vorgehen beim Entwurf} +\begin{itemize*} + \item ER-Modellierung von verschiedenen Sichten auf Gesamtinformation, z.B. für verschiedene Fachabteilungen eines Unternehmens -> konzeptueller Entwurf + \item Verteilungsentwurf bei verteilter Speicherung + \item Abbildung auf konkretes Implementierungsmodell -> logischer Entwurf + \item Datendefinition, Implementierung und Wartung -> physischer Entwurf +\end{itemize*} + +\paragraph{Sichtintegration} +\begin{itemize*} + \item Analyse der vorliegenden Sichten in Bezug auf Konflikte + \item Integration der Sichten in ein Gesamtschema +\end{itemize*} + +\paragraph{Integrationskonflikte} +\begin{itemize*} + \item Namenskonflikte: Homonyme/Synonyme + \item Typkonflikte: verschiedene Strukturen für das gleiche Element + \item Wertebereichskonflikte: verschiedene Wertebereiche für ein Element + \item Bedingungskonflikte: z.B. verschiedene Schlüssel für ein Element + \item Strukturkonflikte: gleicher Sachverhalt durch unterschiedliche Konstrukte ausgedrückt +\end{itemize*} + +\paragraph{Verteilungsentwurf} +\begin{itemize*} + \item sollen Daten auf mehreren Rechnern verteilt vorliegen, muss Art und Weise der verteilten Speicherung festgelegt werden + \item horizontale Verteilung z.B. Kunden 1-1000 und Kunden 10001-20000 + \item vertikale Verteilung z.B. Adresse in DB1, Konto in DB2 +\end{itemize*} + +\paragraph{Logischer Entwurf} +\begin{itemize*} + \item Sprachmittel: Datenmodell des ausgewählten "Realisierungs"DBMS + \item Vorgehensweise + \begin{enumerate*} + \item (automatische) Transformation des konzeptionellen Schemas z.B. ER -> relationales Modell + \item Verbesserung des relationalen Schemas anhand von Gütekriterien + \end{enumerate*} + \item Ergebnis: logisches Schema +\end{itemize*} + +\paragraph{Datendefinition} +\begin{itemize*} + \item Umsetzung des logischen Schemas in ein konkretes Schema + \item Sprachmittel: DDL und DML eines DBMS + \begin{itemize*} + \item Datenbankdeklaration in der DDL des DBMS + \item Realisierung der Integritätssicherung + \item Definition der Benutzersichten + \end{itemize*} +\end{itemize*} + +\paragraph{Physischer Entwurf} +\begin{itemize*} + \item Ergänzen des physischen Entwurfs um Zugriffsunterstützung bzgl Effizienzverbesserung, z.B. Definition von Indexen + \item Index: + \begin{itemize*} + \item Zugriffspfad: Datenstruktur für zusätzlichen, schlüsselbasierten Zugriff auf Tupel + \item meist als B*-Baum realisiert + \end{itemize*} + \item Sprachmittel: Speicherstruktursprache SSL +\end{itemize*} + +Indexe in SQL, z.B.: ```create index WeinIdx on WEINE (Name)``` + +Notwendigkeit für Zugriffspfade: +\begin{itemize*} + \item Beispiel: Tabelle mit 100GB Daten, Festplattentransferrate ca 50MB/s + \item Operation: Suchen eines Tupels (Selektion) + \item Implementierung: sequentielles Durchsuchen + \item Aufwand: 102.500/50 = 2048 sec ~ 34 Minuten +\end{itemize*} + +\paragraph{Implementierung \& Wartung} +\begin{itemize*} + \item Wartung + \item weitere Optimierung der physischen Ebene + \item Anpassung an neue Anforderungen und Systemplattformen + \item Portierung auf neue Datenbankmanagementsysteme + \item etc +\end{itemize*} + + +\subsection{Kapazitätserhaltende Abbildungen} +Umsetzung des konzeptionellen Schemas +\begin{itemize*} + \item Umsetzung auf logisches Schema + \item Erhaltung der Informationskapazität + \item Kapazitäts\textbf{erhöhende} Abbildung: Abbildung auf R mit genau einem Schlüssel K ( K={{A},{B}} ) + \item Kapazitäts\textbf{vermindernde} Abbildung: Relationsschema mit einem Schlüssel + \item Kapazitäts\textbf{erhaltende} Abbildung: kapazitätserhaltend mit Schlüssel beider Entity Typen im Relationsschema als neuer Schlüssel +\end{itemize*} + +\subsection{ER-auf-RM Abbildung} +\paragraph{ER Abbildung auf Relationen} +\begin{itemize*} + \item Entity-Typen und Beziehungstypen: jeweils auf Relationenschemata + \item Attribute: Attribute des Relationenschemas, Schlüssel werden übernommen + \item Kardinalitäten der Beziehungen: durch Wahl der Schlüssel bei den zugehörigen Relationenschemata ausgedrückt + \item in einigen Fällen: Verschmelzen der Relationenschemata von Entity- und Beziehungstypen + \item zwischen den verbleibenden Relationenschemata diverse Fremdschlüsselbedingungen einführen +\end{itemize*} + +\paragraph{Abbildung von Beziehungstypen} +\begin{itemize*} + \item neues Relationenschema mit allen Attributen des Beziehungstyps, zusätzlich Übernahme aller Primärschlüssel der beteiligten Entity-Typen + \item Festlegung der Schlüssel: + \begin{itemize*} + \item m:n-Beziehung: beide Primärschlüssel zusammen werden Schlüssel im neuen Relationenschema + \item 1:n-Beziehung: Primärschlüssel der n-Seite (bei der funktionalen Notation die Seite ohne Pfeilspitze) wird Schlüssel im neuen Relationenschema + \item 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 + \end{itemize*} + \item optionale Beziehungen ([0,1] oder [0,n]) werden nicht verschmolzen + \item bei Kardinalitäten [1,1] oder [1,n] (zwingende Beziehungen) Verschmelzung möglich: + \begin{itemize*} + \item 1:n-Beziehung: das Entity-Relationenschema der n-Seite kann in das Relationenschema der Beziehung integriert werden + \item 1:1-Beziehung: beide Entity-Relationenschemata können in das Relationenschema der Beziehung integriert werden + \end{itemize*} +\end{itemize*} + +\subsection{Ü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$ | + +\section{Relationaler Entwurf} +\subsection{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 +\begin{itemize*} + \item Attribute und Domänen + \begin{itemize*} + \item $U$ nichtleere, endliche Menge: Universum + \item $A\in U$: Attribut + \item $D = {D_1,..., D_m}$ Menge endlicher, nichtleerer Mengen: jedes $D_i$: Wertebereich oder Domäne + \item total definierte Funktion $dom:U \rightarrow D$ + \item $dom(A)$: Domäne von A + \item $w \in dom(A)$: Attributwert für A + \end{itemize*} + \item Relationenschemata und Relationen + \begin{itemize*} + \item $R\subseteq U$: Relationenschema + \item 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 + \item Es gilt $t(A) \in dom(A)$ ($t(A)$ Restriktion von $t$ auf $A \in R$) + \item für $X\subseteq R$ analog $t(X)$ X-Wert von $t$ + \item Menge aller Relationen über $R: REL(R) := {r | r(R)}$ + \end{itemize*} + \item Datenbankschema und Datenbank + \begin{itemize*} + \item Menge von Relationenschemata $S := {R_1,..., R_p }:$ Datenbankschema + \item Datenbank über $S$: Menge von Relationen $d:={r_1,..., r_p}$, wobei $r_i (R_i)$ + \item Datenbank $d$ über $S: d(S)$ + \item Relation $r\in d$: Basisrelation + \end{itemize*} + + Integritätsbedingung + \begin{itemize*} + \item 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)]$ + \item Schlüssel: ist minimale identifizierende Attributmenge + \item Primattribut: Element eines Schlüssels + \item Primärschlüssel: ausgezeichneter Schlüssel + \item Oberschlüssel oder Superkey: jede Obermenge eines Schlüssels (= identifizierende Attributmenge) + \item Fremdschlüssel: $X(R_1)\rightarrow Y(R_2)$ + \end{itemize*} +\end{itemize*} + + +\subsection{Relationaler DB-Entwurf} +\textbf{Redundanzen} in Basisrelationen sind aus mehreren Gründen unerwünscht: +\begin{itemize*} + \item Redundante Informationen belegen unnötigen Speicherplatz + \item Änderungsoperationen auf Basisrelationen mit Redundanzen nur schwer korrekt umsetzbar: + \begin{itemize*} + \item wenn eine Information redundant vorkommt, muss eine Änderung diese Information in allen ihren Vorkommen verändern + \item mit normalen relationalen Änderungsoperationen und den in + \item relationalen Systemen vorkommenden lokalen + \item Integritätsbedingungen (Schlüsseln) nur schwer realisierbar + \end{itemize*} +\end{itemize*} + +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. +\begin{itemize*} + \item Unterscheiden sich zwei Tupel in den X-Attributen nicht, so haben sie auch gleiche Werte für alle Y-Attribute + \item Notation für funktionale Abhängigkeit (FD, von functional dependency): X $\rightarrow$ Y +\end{itemize*} + +> Ziel des Datenbankentwurfs: alle gegebenen funktionalen Abhängigkeiten in Schlüsselabhängigkeiten umformen, ohne dabei semantische Information zu verlieren + +\subsection{Normalformen} +Schemaeigenschaften +\begin{itemize*} + \item Relationenschemata, Schlüssel und Fremdschlüssel so wählen, dass + \begin{itemize*} + \item alle Anwendungsdaten aus den Basisrelationen hergeleitet werden können, + \item nur semantisch sinnvolle und konsistente Anwendungsdaten dargestellt werden können und + \item die Anwendungsdaten möglichst nicht-redundant dargestellt werden. + \end{itemize*} + \item Hier: Forderung 3 + \begin{itemize*} + \item Redundanzen innerhalb einer Relation: Normalformen + \item globale Redundanzen: Minimalität + \end{itemize*} +\end{itemize*} + +Normalformen +\begin{itemize*} + \item legen Eigenschaften von Relationenschemata fest + \item verbieten bestimmte Kombinationen von funktionalen Abhängigkeiten in Relationen + \item sollen Redundanzen und Anomalien vermeiden +\end{itemize*} + +\begin{enumerate*} + \item Erste Normalform + \begin{itemize*} + \item 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 + \end{itemize*} + \item Zweite Normalform + \begin{itemize*} + \item Zweite Normalform eliminiert derartige partielle Abhängigkeiten bei Nichtschlüsselattributen + \item partielle Abhängigkeit liegt vor, wenn ein Attribut funktional schon von einem Teil des Schlüssels abhängt + \item Beispielrelation in 2 NF + \begin{itemize*} + \item R1(Name, Weingut, Preis) + \item R2(Name, Farbe) + \item R3(Weingut, Anbaugebiet, Region) + \end{itemize*} + \end{itemize*} + \item Dritte Normalform + \begin{itemize*} + \item eliminiert (zusätzlich) transitive Abhängigkeiten + \item etwa Weingut $\rightarrow$ Anbaugebiet und Anbaugebiet $\rightarrow$ Region in Relation + \item man beachte: 3 NF betrachtet nur Nicht-Schlüsselattribute als Endpunkt transitiver Abhängigkeiten + \item Beispielrelation in 3NF, transitive Abhängigkeit in R3, d.h. R3 verletzt 3NF + \end{itemize*} +\end{enumerate*} + +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$ +\begin{itemize*} + \item erweitertes Relationenschema $R=(R, \bf{K})$ ist in 3 NF bezüglich F genau dann, wenn $\not\exists A \in R$: + \item A ist Nicht-Primattribut in R + \item $\wedge A$ transitiv abhängig von einem $K\in \bf{K}$ bezüglich $F_i$. + \item Nicht-Primattribut: A ist in keinem Schlüssel von R enthalten +\end{itemize*} + +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 +\begin{itemize*} + \item Global Redundanzen vermeiden + \item andere Kriterien (wie Normalformen) mit möglichst wenig Schemata erreichen + \item Beispiel: Attributmenge ABC, FD-Menge ${A \rightarrow B, B \rightarrow C}$ +\end{itemize*} + +Ü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 | + +\subsection{Transformationseigenschaften} +\begin{itemize*} + \item bei einer Zerlegung einer Relation in mehrere Relationen ist darauf zu achten, dass + \begin{itemize*} + \item nur semantisch sinvolle und konsistente Anwendungsdaten dargestellt (Abhängigkeitstreue) und + \item alle Anwendungsdaten aus den Basisrelationen hergeleitet werden können (Verbundtreue) + \end{itemize*} + \item Abhänggikeitstreue (Kennung T1) + \begin{itemize*} + \item alle gegebenen Abhängigkeiten sind durch Schlüssel repräsentiert + \item eine Menge von Abhängigkeiten kann äquivalent in eine zweite Menge von Abhängigkeiten transformiert werden + \item spezieller: in die Menge der Schlüsselabhängigkeiten, da diese vom Datenbanksystem effizient überprüft werden kann + \item die Menge der Abhängigkeiten soll äquivalent zu der Menge der Schlüsselbedingungen im resultierenden Datenbankschema sein + \item Ä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 + \item 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}\}$ + \end{itemize*} + \item Verbundtreue (Kennung T2) + \begin{itemize*} + \item Originalrelationen können durch den Verbund der Basisrelationen wiedergewonnen werden + \item zur Erfüllung des Kriteriums der Normalformen müssen Relationenschemata teilweise in kleinere Relationenschemata zerlegt werden + \item 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 + \item Zerlegung des Relationenschemas $R = ABC$ in $R_1 = AB$ und $R_2 = BC$ + \item Dekomposition bei Vorliegen der Abhängigkeiten $F = \{A \rightarrow B, C \rightarrow B\}$ ist nicht verbundtreu + \item dagegen bei Vorliegen von $F" = \{A \rightarrow B, B \rightarrow C\}$ verbundtreu + \end{itemize*} +\end{itemize*} + +> 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. + +\subsection{Weitere Abhängigkeiten} +\begin{itemize*} + \item Mehrwertige Abhängigkeit (kurz: MVD) + \begin{itemize*} + \item 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 + \item Folge der 1NF: Mehrwertige Abhängigkeiten erzeugen Redundanz + \item eine (oder mehrere) Gruppe von Attributwerten ist von einem Schlüssel bestimmt, unabhängig von anderen Attributen + \item Resultat: Redundanz durch Bildung aller Kombinationen + \item wünschenswerte Schemaeigenschaft bei Vorliegen von MVDs: vierte Normalform + \item fordert die Beseitigung derartiger Redundanzen: keine zwei MVDs zwischen Attributen einer Relation + \item Elimination der rechten Seite einer der beiden mehrwertigen Abhängigkeiten, + \item linke Seite mit dieser rechten Seite in neue Relation kopiert + \item Verbundabhängigkeit (kurz: JD) + \item R kann ohne Informationsverlust in $R_1,..., R_p$ aufgetrennt werden: $\bowtie [R_1,..., R_p]$ + \item Inklusionsabhängigkeit (kurz: IND) + \item auf der rechten Seite einer Fremdschlüsselabhängigkeit nicht unbedingt der Primärschlüssel einer Relation + \end{itemize*} +\end{itemize*} + +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}$ + + +\section{Relationale Theorie} +\subsection{Rechnen mit FDs} +\begin{itemize*} + \item gilt für f über R $SAT_R(F)\subseteq SAT_R(f)$, dann impliziert F die FD f (kurz: $F\vdash f$) + \item Hüllenbildung: Ermittlung aller funktionalen Abhängigkeiten, die aus einer gegebenen $FD_Menge$ abgeleitet werden können + \item Hülle: $F_R^+ := \{ f | (f \text{ FD ueber R} ) \wedge F \vdash f\}$ +\end{itemize*} + +Ableitungsregel: +\begin{itemize*} + \item F1: Reflexivität $X\supseteq Y \Rightarrow X\rightarrow Y$ + \item F2: Augumentation $\{X\rightarrow Y\}\Rightarrow XZ\rightarrow YZ, \text{ sowie } XZ\rightarrow Y$ + \item F3: Transitivität $\{ X\rightarrow Y,Y\rightarrow Z\}\Rightarrow X\rightarrow Y$ + \item F4: Dekomposition $\{X\rightarrow YZ\} \Rightarrow X\rightarrow Y$ + \item F5: Vereinigung $\{X\rightarrow Y, X\rightarrow Z\}\Rightarrow X\rightarrow YZ$ + \item F6: Pseudotransitivität $\{X\rightarrow Y, WY\rightarrow Z\}\Rightarrow WX\rightarrow Z$ +\end{itemize*} + +F1-F3 bekannt als Armstrong-Axiome (sound, complete) +\begin{itemize*} + \item gültig (sound): Regeln leiten keine FDs ab, die logisch nicht impliziert + \item vollständig (complete): alle implizierten FDs werden abgeleitet + \item unabhängig (independent) oder auch bzgl. $\subseteq$ minimal: keine Regel kann weggelassen werden +\end{itemize*} + +Alternative Regelmenge +\begin{itemize*} + \item B-Axiome oder RAP-Regeln + \begin{itemize*} + \item R Reflexivität $\{\}\Rightarrow X\rightarrow X$ + \item A Akkumulation $\{X\rightarrow YZ, Z\rightarrow AW\}\Rightarrow X\rightarrow YZA$ + \item P Projektivität $\{X\rightarrow YZ\}\Rightarrow X\rightarrow Y$ + \end{itemize*} + \item Regelmenge ist vollständig, da Armstrong-Axiome daraus abgeleitet werden können +\end{itemize*} + +> 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^+$ +\begin{itemize*} + \item Hülle einer Attributmenge X bzgl. F ist $X^+_F := \{A | X\rightarrow A \in F^+\}$ + \item Membership-Problem kann durch das modifizierte Problem $Y\subseteq X_F^+$ in linearer Zeit gelöst werden +\end{itemize*} + +Überdeckungen +\begin{itemize*} + \item F heißt äquivalent zu G; oder + \item F Überdeckung von G; kurz: $F\equiv G$ falls $F^+=G^+$ + \item verschiedene Formen von Überdeckung: nicht-redundant, reduziert, minimal, ringförmig +\end{itemize*} + +Reduktionsoperationen +\begin{itemize*} + \item Ziel: Entfernen überflüssiger Attribute auf linker bzw. rechter Seite von FDs + \item Linksreduktion: entfernt unwesentliche Attribute auf der linken Seite einer FD + \item Rechtsreduktion: entsprechend auf der rechten Seite + \item erw. Relationenschema $R = (R, K)$, FD-Menge F über R, A ist ein Attribut aus R und $X\rightarrow Y$ eine FD aus F +\end{itemize*} + +Unwesentliche Attribute: A heißt unwesentlich in $X\rightarrow Y$ bzgl. F, wenn +\begin{itemize*} + \item $X=AZ,Z\not= X \Rightarrow (F-\{X\rightarrow Y\})\cup \{Z\rightarrow Y\} \equiv F$ oder + \item $Y=AW, W\not=Y\Rightarrow (F-\{X\rightarrow Y\})\cup \{X\rightarrow W\} \equiv F$ +\end{itemize*} +\begin{itemize*} + \item A kann also aus der FD $X\rightarrow Y$ entfernt werden, ohne dass sich die Hülle von F ändert + \item FD $X\rightarrow Y$ heißt linksreduziert, wenn kein Attribut in X unwesentlich ist + \item FD $X\rightarrow Y$ heißt rechtsreduziert, wenn kein Attribut in Y unwesentlich ist +\end{itemize*} + +Minimale Überdeckung +\begin{itemize*} + \item Eine minimale Überdeckung ist eine Überdeckung, die eine minimale Anzahl von FDs enthält + \item Auswahl der kleinsten aller nicht-redundanten Überdeckungen + \item FD-Menge F heißt minimal gdw. $\forall F" [F"\equiv \Rightarrow |F|\leq |F"|]$ + \item Bestimmung etwa durch reduzierte Überdeckung mit anschließender Äquivalenzklassenbildung (später) +\end{itemize*} + +Äquivalenzklassen +\begin{itemize*} + \item FDs mit äquivalenten linken Seiten werden zu einer Äquivalenzklasse zusammengefasst + \item 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 + \item In einigen Fällen können nun zwei solche FDs in einer Äquivalenzklasse zu einer FD $X\rightarrow Y_1 Y_2$ zusammengefasst werden + \item 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 + \item linke Seiten sind äquivalent, wenn sie sich gegenseitig funktional bestimmen +\end{itemize*} + + +\subsection{Mehr zu Normalformen} +\begin{itemize*} + \item partielle Abhängigkeit liegt vor, wenn ein Attribut funktional schon von einem Teil des Schlüssels abhängt + \item Hinweis: partiell abhängiges Attribut stören nur, wenn es kein Primattribut ist + \item 2NF formal: erweitertes Relationenschema $R = (R, K)$, FD-Menge F über R +\end{itemize*} + +Zweite Normalform +\begin{itemize*} + \item Y hängt partiell von X bzgl. F ab, wenn die FD $X\rightarrow Y$ nicht linksreduziert ist + \item Y hängt voll von X ab, wenn die FD $X\rightarrow Y$ linksreduziert ist + \item R ist in 2NF, wenn R in 1NF ist und jedes Nicht-Primattribut von R voll von jedem Schlüssel von R abhäng +\end{itemize*} + +\subsection{Entwurfsverfahren} +Ziele: +\begin{itemize*} + \item Universum $U$ und FD-Menge F gegeben + \item lokal erweitertes Datenbankschema $S=\{(R_1, K_1),...,(R_p, K_p)\}$ berechnen mit + \begin{itemize*} + \item T1: S charakterisiert vollständig F + \item S1: S ist in 3NF bezüglich F + \item T2: Dekomosition von $U$ in $R_1,...,R_p$ ist verbundtreu bezüglich F + \item S2: Minimalität, d.h. $\not\exists S":S"$ erfüllt T1,S1,T2 und $|S"|<|S|$ + \end{itemize*} +\end{itemize*} + +Dekomposition: +\begin{itemize*} + \item Geg.: initiales Universalrelationenschema $R = (U, K(F))$ mit allen Attributen und einer von erfassten FDs F über R implizierten Schlüsselmenge + \begin{itemize*} + \item Attributmenge U und eine FD-Menge F + \item suche alle $K\rightarrow U$ mit K minimal, für die $K\rightarrow U \in F^+$ gilt $(K(F))$ + \end{itemize*} + \item Ges.: Zerlegung in $D = \{R_1, R_2,... \}$ von 3NF-Relationenschemata + \item Beispiel: + \begin{itemize*} + \item initiales Relationenschema $R=ABC$ + \item funktionale Abhängigkeiten $F=\{A\rightarrow B, B\rightarrow C\}$ + \item Schlüssel $K=A$ + \end{itemize*} + \item Bewertung + \begin{itemize*} + \item Vorteile: 3NF, Verbundtreue + \item Nachteile: restliche Kriterien nicht, reihenfolgeabhängig, NP-vollständig (Schlüsselsuche) + \end{itemize*} +\end{itemize*} + +Details zum Syntheseverfahren +\begin{itemize*} + \item Prinzip: Synthese formt Original-FD-Menge F in resultierende Menge von Schlüsselabhängigkeiten G so um, dass $F\equiv G$ gilt + \item „Abhängigkeitstreue“ im Verfahren verankert + \item 3NF und Minimalität wird auch erreicht, reihenfolgeunabhängig + \item Zeitkomplexität: quadratisch +\end{itemize*} + +Syntheseverfahren für Relationenschema R mit FDs F +\begin{itemize*} + \item Ges.: verlustfreie und abhängigkeitstreue Zerlegung in $R_1,... R_n$, wobei alle $R_i$ in 3NF sind + \item 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 + \item Beispiel + \begin{itemize*} + \item FD-Menge $F=\{A\rightarrow B, AB\rightarrow C, A\rightarrow C, B\rightarrow A, C\rightarrow E\}$ + \item minimale Überdeckung $\hat{F}=\{A\rightarrow B,B\rightarrow C, B\rightarrow A, C\rightarrow E\}$ + \item Zusammenfassung zu Äquivalenzklassen $C_1=\{A\rightarrow B,B\rightarrow C, B\rightarrow A\}, C_2=\{C\rightarrow E\}$ + \item Syntheseergebnis: $(ABC,\{\{A\},\{B\}\}),(CE,\{C\})$ + \end{itemize*} +\end{itemize*} + +Erreichung der Verbundtreue +\begin{itemize*} + \item Erreichen der Verbundtreue durch einfachen „Trick“: + \begin{itemize*} + \item Erweitern der Original-FD-Menge F um $U\rightarrow \delta$ um Dummy-Attribut $\delta$ + \item $\delta$ wird nach Synthese entfernt + \end{itemize*} + \item Beispiel: $\{A\rightarrow B, C\rightarrow E\}$ + \begin{itemize*} + \item Syntheseergebnis $(AB, \{A\}), (CE, \{C\})$ ist nicht verbundtreu, da Universalschlüssel in keinem Schema enthalten ist + \item Dummy-FD $ABCE\rightarrow \delta$; reduziert auf $AC\rightarrow\delta$ + \item liefert drittes Relationenschema $(AC,\{AC\})$ + \end{itemize*} +\end{itemize*} + + +\section{Die relationale Anfragesprache SQL} +\subsection{Aufbau von SQL-Anfragen} +\begin{itemize*} + \item "select" + \begin{itemize*} + \item Projektionsliste + \item Festlegung der Projektionsattribute + \item arithmetische Operationen und Aggregatfunktionen + \item Attribute der hinter from stehenden Relationen, optional mit Präfix, der Relationennamen oder Namen der Tupelvariablen angibt + \item arithmetische Ausdrücke über Attributen dieser Relationen und passenden Konstanten + \item Aggregatfunktionen über Attributen dieser Relationen + \item Spezialfall der Projektionsliste: * ,liefert alle Attribute der Relation(en) aus dem from-Teil + \item distinct eliminiert Duplikate + \end{itemize*} + \item "from" + \begin{itemize*} + \item zu verwendende Relationen, evtl. Umbenennungen + \item einfachste Form; hinter jedem Relationennamen kann optional eine Tupelvariable stehen + \end{itemize*} + \item "where" + \begin{itemize*} + \item Selektions-, Verbundbedingungen + \item Geschachtelte Anfragen (wieder ein SFW-Block) + \end{itemize*} +\end{itemize*} + +\paragraph{Verbunde} +\begin{itemize*} + \item bei mehr als einer Relation wird das kartesische Produkt gebildet: + "select * from WEINE, ERZEUGER" + \item alle Kombinationen werden ausgegeben! + \item Einführung von Tupelvariablen erlaubt mehrfachen Zugriff auf eine Relation: + "select * from WEINE w1, WEINE w2" + \begin{itemize*} + \item Spalten lauten dann: + "w1.WeinID, w1.Name, w1.Farbe, w1.Jahrgang, w1.Weingut, w2.WeinID, w2.Name, w2.Farbe, w2.Jahrgang, w2.Weingut" + \end{itemize*} + \item Natürlicher Verbund in SQL92 + "select * from WEINE, ERZEUGER where WEINE.Weingut = ERZEUGER.Weingut" + \item 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" + \begin{itemize*} + \item Verbund mit beliebigem Prädikat: "select * from WEINE join ERZEUGER on WEINE.Weingut = ERZEUGER.Weingut" + \item Gleichverbund mit using: "select * from WEINE join ERZEUGER using (Weingut)" + \end{itemize*} + \item Kreuzprodukt "select * from WEINE, ERZEUGER" + \item als cross join "select * from WEINE cross join ERZEUGER" + \item "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" + \item Präfixe für Eindeutigkeit "select Name, Jahrgang, ERZEUGER.Weingut from WEINE natural join ERZEUGER" + \item 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" +\end{itemize*} + +\paragraph{Selektionen} +\begin{itemize*} + \item where Klausel: "select ...from ... where bedingung" + \begin{itemize*} + \item Formen der Bedingung: + \begin{itemize*} + \item Vergleich eines Attributs mit einer Konstanten: "attribut $\Theta$ konstante" + \item mögliche Vergleichssymbole $\Theta$ abhängig vom Wertebereich; etwa =, <>, >, <, >= sowie <=. + \item Vergleich zwischen zwei Attributen mit kompatiblen Wertebereichen: "attribut1 $\Theta$ attribut2" + \item logische Konnektoren or, and und not + \end{itemize*} + \end{itemize*} + \item Verbundbedingung + \begin{itemize*} + \item Verbundbedingung hat die Form: "relation1.attribut = relation2.attribut" + \item Beispiel: "select Name, Jahrgang, ERZEUGER.Weingut from WEINE, ERZEUGER where WEINE.Weingut = ERZEUGER.Weingut" + \end{itemize*} + \item Bereichsselektion + \begin{itemize*} + \item $attrib between konstante_1 and konstante_2$ + \item ist Abkürzung für $attrib \geq konstante_1$ and $attrib \leq konstante_2$ + \item schränkt damit Attributwerte auf das abgeschlossene Intervall $[konstante_1 , konstante_2 ]$ ein + \item Beispiel: "select * from WEINE where Jahrgang between 2000 and 2005" + \end{itemize*} + \item Ungewissheitsselektion + \begin{itemize*} + \item Notation "attribut like spezialkonstante" + \item Mustererkennung in Strings (Suche nach mehreren Teilzeichenketten) + \item Spezialkonstante kann die Sondersymbole $\%$ und $\_$ beinhalten + \begin{itemize*} + \item \% steht für kein oder beliebig viele Zeichen + \item $\_$ steht für genau ein Zeichen + \end{itemize*} + \item Beispiel: "select * from WEINE where Name like "La Rose\%"" + \end{itemize*} +\end{itemize*} + +\paragraph{Mengenoperationen} +Mengenoperationen erfordern kompatible Wertebereiche für Paare korrespondierender Attribute: +\begin{itemize*} + \item beide Wertebereiche sind gleich oder + \item beide sind auf character basierende Wertebereiche (unabhängig von der Länge der Strings) oder + \item beide sind numerische Wertebereiche (unabhängig von dem genauen Typ) wie integer oder float + \item Ergebnisschema := Schema der „linken“ Relation + ```sql + select A, B, C from R1 + union + select A, C, D from R2 + ``` +\end{itemize*} + +\begin{itemize*} + \item Vereinigung, Durchschnitt und Differenz als union, intersect und except + \item orthogonal einsetzbar: + \item "select * from (select Weingut from ERZEUGER except select Weingut from WEINE)" + \item äquivalent zu "select * from ERZEUGER except corresponding WEINE" + \item über corresponding by-Klausel: Angabe der Attributliste, über die Mengenoperation ausgeführt wird + \item "select * from ERZEUGER except corresponding by (Weingut) WEINE" + \item bei Vereinigung: Defaultfall ist Duplikateliminierung (union distinct); ohne Duplikateliminierung durch union all +\end{itemize*} + +\paragraph{Geschachtelte Anfragen} +Schachtelung von Anfragen +\begin{itemize*} + \item für Vergleiche mit Wertemengen notwendig: + \item Standardvergleiche in Verbindung mit den Quantoren all ($\forall$) oder any ($\exists$) + \item spezielle Prädikate für den Zugriff auf Mengen, in und exists + \item in-Prädikat und geschachtelte Anfragen + \begin{itemize*} + \item Notation: "attribut in ( SFW-block )" + \item Beispiel: "select Name from WEINE where Weingut in (select Weingut from ERZEUGER where Region = "Bordeaux")" + \item Auswertung von geschachtelten Anfragen + \begin{itemize*} + \item Auswertung der inneren Anfrage zu den Weingütern aus Bordeaux + \item Einsetzen des Ergebnisses als Menge von Konstanten in die äußere Anfrage hinter in + \item Auswertung der modifizierten Anfrage "select Name from WEINE where Weingut in ( "Château La Rose", "Château La Pointe")" + \end{itemize*} + \item interne Auswertung: Umformung in einen Verbund + "select Name from WEINE natural join ERZEUGER where Region = "Bordeaux"" + \end{itemize*} + \item Negation des in-Prädikats + \begin{itemize*} + \item Simulation des Differenzoperators $^\pi Weingut^{(ERZEUGER)}- ^\pi Weingut^{(WEINE)}$ durch SQL-Anfrage "select Weingut from ERZEUGER where Weingut not in ( select Weingut from WEINE )" + \end{itemize*} +\end{itemize*} + + +\paragraph{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 | + +\subsection{Erweiterungen des SFW-Blocks} +Erweiterungen des SFW-Blocks +\begin{itemize*} + \item innerhalb der from-Klausel weitere Verbundoperationen (äußerer Verbund), + \item innerhalb der where-Klausel weitere Arten von Bedingungen und Bedingungen mit Quantoren, + \item innerhalb der select-Klausel die Anwendung von skalaren Operationen und Aggregatfunktionen, + \item zusätzliche Klauseln group by und having + \item rekursive Anfragen +\end{itemize*} + +\paragraph{Skalare Ausdrücke} +Umbenennung von Spalten: "ausdruck as neuer-name" +\begin{itemize*} + \item skalare Operationen auf + \begin{itemize*} + \item numerischen Wertebereichen: etwa +, -, * und /, + \item Strings: Operationen wie $char_length$ (aktuelle Länge eines Strings), die Konkatenation $||$ und die Operation substring (Suchen einer Teilzeichenkette an bestimmten Positionen des Strings), + \item Datumstypen und Zeitintervallen: Operationen wie $current_date$ (aktuelles Datum), $current_time$ (aktuelle Zeit), $+, - und *$ + \end{itemize*} + \item bedingte Ausdrücke + \item Typkonvertierung + \item skalare Ausdrücke können mehrere Attribute umfassen + \item Anwendung ist tupelweise: pro Eingabetupel entsteht ein Ergebnistupel + \item 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"" + \item 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"" + \item Anfrage: "select Name, year($current_date - HerstDatum$) as Alter from WEINE" +\end{itemize*} + +\paragraph{Bedingte Ausdrücke} +\begin{itemize*} + \item case-Anweisung: Ausgabe eines Wertes in Abhängigkeit von der Auswertung eines Prädikats + "case when $praedikat_1$ then $ausdruck_1$ ... when $praedikat_{n-1}$ then $ausdruck_{n-1}$ [ else $ausdruck_n$ ] end" + \item 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" +\end{itemize*} + +\paragraph{Typkonvertierung} +\begin{itemize*} + \item explizite Konvertierung des Typs von Ausdrücken + "cast(ausdruck as typname)" + \item Beispiel: int-Werte als Zeichenkette für Konkatenationsoperator + "select cast(Jahrgang as varchar) || "er " || Name as Bezeichnung from WEINE" +\end{itemize*} + +\paragraph{Quantoren und Mengenvergleiche} +\begin{itemize*} + \item Quantoren: all, any, some und exists + \item Notation + "attribut $\Theta$ { all | any | some } ( select attribut from ...where ...)" + \item all: where-Bedingung wird erfüllt, wenn für alle Tupel des inneren SFW-Blocks der $\Theta$-Vergleich mit attribut true wird + \item any bzw. some: where-Bedingung wird erfüllt, wenn der $\Theta$-Vergleich mit mindestens einem Tupel des inneren SFW-Blocks true wird + \item Bestimmung des ältesten Weines + "select * from WEINE where Jahrgang <= all ( select Jahrgang from WEINE)" + \item alle Weingüter, die Rotweine produzieren + "select * from ERZEUGER where Weingut = any ( select Weingut from WEINE where Farbe = "Rot")" +\end{itemize*} + +\paragraph{Vergleich von Wertemengen} +\begin{itemize*} + \item Test auf Gleichheit zweier Mengen allein mit Quantoren nicht möglich + \item Beispiel: „Gib alle Erzeuger aus, die sowohl Rot- als auch Weißweine produzieren.“ + \item falsche Anfrage "select Weingut from WEINE where Farbe = "Rot" and Farbe = "Weiß"" + \item richtige Anfrage "select w1.Weingut from WEINE w1, WEINE w2 where w1.Weingut = w2.Weingut and w1.Farbe = "Rot" and w2.Farbe = "Weiß"" +\end{itemize*} + +\paragraph{Das exists/not exists-Prädikat} +\begin{itemize*} + \item einfache Form der Schachtelung + "exists ( SFW-block )" + \item liefert true, wenn das Ergebnis der inneren Anfrage nicht leer ist + \item speziell bei verzahnt geschachtelten (korrelierte) Anfragen sinnvoll + \begin{itemize*} + \item in der inneren Anfrage wird Relationen- oder Tupelvariablen-Name aus dem from-Teil der äußeren Anfrage verwendet + \end{itemize*} +\end{itemize*} + +\paragraph{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 ... + +\subsection{Aggregatfunktionen und Gruppierungen} +\begin{itemize*} + \item Aggregatfunktionen berechnen neue Werte für eine gesamte Spalte, etwa die Summe oder den Durchschnitt der Werte einer Spalte + \item Beispiel: Ermittlung des Durchschnittspreises aller Artikel oder des Gesamtumsatzes über alle verkauften Produkte + \item bei zusätzlicher Anwendung von Gruppierung: Berechnung der Funktionen pro Gruppe, z.B. der Durchschnittspreis pro Warengruppe oder der Gesamtumsatz pro Kunde + \item Aggregatfunktionen in Standard-SQL: + \begin{itemize*} + \item count: berechnet Anzahl der Werte einer Spalte oder alternativ (im Spezialfall count(*)) die Anzahl der Tupel einer Relation + \item sum: berechnet die Summe der Werte einer Spalte (nur bei numerischen Wertebereichen) + \item avg: berechnet den arithmetischen Mittelwert der Werte einer Spalte (nur bei numerischen Wertebereichen) + \item max bzw. min: berechnen den größten bzw. kleinsten Wert einer Spalte + \end{itemize*} + \item Argumente einer Aggregatfunktion: + \begin{itemize*} + \item ein Attribut der durch die from-Klausel spezifizierten Relation, + \item ein gültiger skalarer Ausdruck oder + \item im Falle der count-Funktion auch das Symbol * + \end{itemize*} + \item vor dem Argument (außer im Fall von count(*)) optional auch die Schlüsselwörter distinct oder all + \begin{itemize*} + \item distinct: vor Anwendung der Aggregatfunktion werden doppelte Werte aus der Menge von Werten, auf die die Funktion angewendet wird + \item all: Duplikate gehen mit in die Berechnung ein (Default-Voreinstellung) + \item Nullwerte werden in jedem Fall vor Anwendung der Funktion aus der Wertemenge eliminiert (außer im Fall von count(*)) + \end{itemize*} + \item Beispiel: Anzahl der Weine: + "select count(*) as Anzahl from WEINE" + \item Beispiel: Anzahl der verschiedenen Weinregionen: + "select count(distinct Region) from ERZEUGER" + \item Weine, die älter als der Durchschnitt sind: + "select Name, Jahrgang from WEINE where Jahrgang < ( select avg(Jahrgang) from WEINE)" + \item 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 ...)" + \item Aggregatfunktionen in where-Klausel + \begin{itemize*} + \item Aggregatfunktionen liefern nur einen Wert $\rightarrow$ Einsatz in Konstanten-Selektionen der where-Klausel möglich + \item alle Weingüter, die nur einen Wein liefern: + "select * from ERZEUGER e where 1 = ( select count(*) from WEINE w where w.Weingut = e.Weingut )" + \end{itemize*} + \item group by und having + \begin{itemize*} + \item Notation + \begin{itemize*} + \item select ... + \item from ... + \item [where ...] + \item [group by attributliste ] + \item [having bedingung ] + \end{itemize*} + \item Beispiel + \begin{itemize*} + \item Regionen mit mehr als einem Wein + "select Region, count(*) as Anzahl from ERZEUGER natural join WEINE group by Region having count(*) > 1" + \end{itemize*} + \end{itemize*} +\end{itemize*} + +\paragraph{Äußere Verbunde} +\begin{itemize*} + \item outer join übernimmt alle Tupel beider Operanden (Langfassung: full outer join) + \item left outer join bzw. right outer join übernimmt alle Tupel des linken bzw. des rechten Operanden + \item äußerer natürlicher Verbund jeweils mit Schlüsselwort natural, also z.B. natural left outer join +\end{itemize*} + +\paragraph{Sortierung} +order by attributliste + +select w1.Name, count(*) as Rang +from WEINE w1, WEINE w2 +where w1.Jahrgang <= w2.Jahrgang +group by w1.Name, w1.WeinID +having count(*) <= 4 +order by Rang + +\paragraph{Nullwerte} +\begin{itemize*} + \item skalare Ausdrücke: Ergebnis null, sobald Nullwert in die Berechnung eingeht + \item in allen Aggregatfunktionen bis auf count(*) werden Nullwerte vor Anwendung der Funktion entfernt + \item fast alle Vergleiche mit Nullwert ergeben Wahrheitswert unknown (statt true oder false) + \item Ausnahme: is null ergibt true, is not null ergibt false + \item Boolesche Ausdrücke basieren dann auf dreiwertiger Logik + \item Null-Selektion wählt Tupel aus, die bei einem bestimmten Attribut Nullwerte enthalten + \item Notation "attribut is null" +\end{itemize*} + + +\subsection{Rekursion} +\begin{itemize*} + \item Anwendung: Bill of Material-Anfragen, Berechnung der transitiven Hülle (Flugverbindungen etc.) + \item Formulierung über erweiterte with recursive-Anfrage + \begin{itemize*} + \item Notation + ```sql + with recursive rekursive-tabelle as ( + anfrage-ausdruck -- rekursiver Teil + ) + [traversierungsklausel] [zyklusklausel] + anfrage-ausdruck -- nicht rekursiver Teil + ``` + \end{itemize*} + \item Sicherheit (= Endlichkeit der Berechnung) ist wichtige Anforderung an Anfragesprache + \begin{itemize*} + \item Behandlung in SQL + \item Begrenzung der Rekursionstiefe + \item Zyklenerkennung + \end{itemize*} +\end{itemize*} + +\section{Grundlagen von Anfragen: Algebra \& Kalkül} +\subsection{Kriterien für Anfragesprachen} +\begin{itemize*} + \item bisher: Relationenschemata mit Basisrelationen, die in der Datenbank gespeichert sind + \item jetzt: „abgeleitete“ Relationenschemata mit virtuellen Relationen, die aus den Basisrelationen berechnet werden (Basisrelationen bleiben unverändert) +\end{itemize*} + +Begriffe +\begin{itemize*} + \item Anfrage: Folge von Operationen, die aus den Basisrelationen eine Ergebnisrelation berechnet + \begin{itemize*} + \item Ergebnisrelation interaktiv auf dem Bildschirm anzeigen oder + \item per Programm weiterverarbeiten („Einbettung“) + \end{itemize*} + \item Sicht: Folge von Operationen, die unter einem Sichtnamen langfristig abgespeichert wird und unter diesem Namen wieder aufgerufen werden kann; ergibt eine Sichtrelation + \item Snapshot: Ergebnisrelation einer Anfrage, die unter einem Snapshot-Namen abgelegt wird, aber nie ein zweites Mal (mit geänderten Basisrelationen) berechnet wird (etwa Jahresbilanzen) +\end{itemize*} + +Kriterien für Anfragesprachen +\begin{itemize*} + \item Ad-Hoc-Formulierung: Benutzer soll eine Anfrage formulieren können, ohne ein vollständiges Programm schreiben zu müssen + \item Deskriptivität: Benutzer soll formulieren „Was will ich haben?“ und nicht „Wie komme ich an das, was ich haben will?“ + \item Mengenorientiertheit: jede Operation soll auf Mengen von Daten gleichzeitig arbeiten, nicht navigierend nur auf einzelnen Elementen („one-tuple-at-a-time“) + \item Abgeschlossenheit: Ergebnis ist wieder eine Relation und kann wieder als Eingabe für die nächste Anfrage verwendet werden + \item Adäquatheit: alle Konstrukte des zugrundeliegenden Datenmodells werden unterstützt + \item Orthogonalität: Sprachkonstrukte sind in ähnlichen Situationen auch ähnlich anwendbar + \item Optimierbarkeit: Sprache besteht aus wenigen Operationen, für die es Optimierungsregeln gibt + \item Effizienz: jede Operation ist effizient ausführbar (im Relationenmodell hat jede Operation eine Komplexität $\leq$ O(n 2 ), n Anzahl der Tupel einer Relation). + \item Sicherheit: keine Anfrage, die syntaktisch korrekt ist, darf in eine Endlosschleife geraten oder ein unendliches Ergebnis liefern + \item Eingeschränktheit: (folgt aus Sicherheit, Optimierbarkeit, Effizienz) Anfragesprache darf keine komplette Programmiersprache sein + \item Vollständigkeit: Sprache muss mindestens die Anfragen einer Standardsprache ausdrücken können +\end{itemize*} + +\subsection{Anfragealgebren} +\begin{itemize*} + \item Mathematik: Algebra definiert durch Wertebereich und auf diesem definierte Operatoren + \item für Datenbankanfragen: Inhalte der Datenbank sind Werte, und Operatoren definieren Funktionen zum Berechnen von Anfrageergebnissen + \begin{itemize*} + \item Relationenalgebra + \item Algebra-Erweiterungen + \end{itemize*} +\end{itemize*} + +Relationenalgebra +\begin{itemize*} + \item Spalten ausblenden: Projektion $\pi$ + \item Zeilen heraussuchen: Selektion $\sigma$ + \item Tabellen verknüpfen: Verbund (Join) $\rtimes$ + \item Tabellen vereinigen: Vereinigung $\cup$ + \item Tabellen voneinander abziehen: Differenz $-$ + \item Spalten umbenennen: Umbenennung $\beta$ (wichtig für $\rtimes$ und $\cup$, $-$) +\end{itemize*} + +Projektion +\begin{itemize*} + \item Syntax $\pi_{Attributmenge}(Relation)$ + \item Semantik $\pi_X (r) := \{t(X) | t \in r\}$ + \begin{itemize*} + \item für r(R) und X $\subseteq$ R Attributmenge in R + \end{itemize*} + \item Eigenschaft für Y $\subseteq$ X $\subseteq$ R + \begin{itemize*} + \item $\pi_Y (\pi_X (r)) = \pi_Y (r)$ + \end{itemize*} + \item Achtung: $\pi$ entfernt Duplikate (Mengensemantik) +\end{itemize*} + +Selektion +\begin{itemize*} + \item Syntax $\sigma_{Bedingung} (Relation)$ + \item Semantik (für $A\in R$) $\sigma_{A=a}(r) := \{t \in r | t(A) = a\}$ + \item Konstantenselektion $Attribut \Theta Konstante$ + \begin{itemize*} + \item boolesches Prädikat $\Theta$ ist = oder$\not=$, bei linear geordneten Wertebereichen auch $\leq, <, \geq$ oder $>$ + \end{itemize*} + \item Attributselektion $Attribut_1 \Theta Attribut_2$ + \item logische Verknüpfung mehrerer Konstanten- oder Attribut-Selektionen mit $\vee, \wedge$ oder $\neg$ + \item Eigenschaften + \begin{itemize*} + \item Kommutativität $\sigma_{A=a}(\sigma_{B=b} (r)) = \sigma_{B=b} (\sigma_{A=a} (r))$ + \item falls $A\in X, X \subseteq R: \pi_X(\sigma_{A=a} (r)) = \sigma_{A=a} (\pi_{X} (r))$ + \item Distributivität bzgl. $\cup, \cap, - , \sigma_{A=a} (r \cup s) = \sigma_{A=a} (r) \cup \sigma_{A=a} (s)$ + \end{itemize*} + \item Verbund + \begin{itemize*} + \item Syntax des (natürlichen) Verbundes (engl.: natural join) $Relation_1 \bowtie Relation_2$ + \item Semantik $r_1 \bowtie r_2 := {t | t(R_1\cup R_2 ) \vee [\forall i \in \{1, 2\}\exists t_i \in r_i : t_i = t(R_i )]}$ + \item Verbund verknüpft Tabellen über gleichbenannten Spalten bei gleichen Attributwerten + \item Schema für $r(R) \bowtie r(S)$ ist Vereinigung der Attributmengen $R = R \cup S$ + \item aus $R_1 \cap R_2 = \{\}$ folgt $r_1\bowtie r_2 = r_1 \times r_2$ + \item Kommutativität: $r_1 \rtimes r_2 = r_2 \rtimes r_1$ + \item Assoziativität: $(r_1 \rtimes r_2 ) \rtimes \ltimes r_3 = r_1 \ltimes (r_2 \rtimes r_3 )$ + \item daher erlaubt: $\bowtie_{i=1}^p r_i$ + \end{itemize*} + \item Umbenennung + \begin{itemize*} + \item Syntax $\beta_{neu\leftarrow alt} (Relation)$ + \item Semantik $\beta_{B\leftarrow A} (r) := \{t" | \exists t \in r : t" (R-A) = t(R-A) \vee t"(B) = t(A)\}$ + \item ändert Attributnamen von alt in neu + \end{itemize*} + \item Berechnung des Kreuzproduktes + \begin{itemize*} + \item natürlicher Verbund entartet zum Kreuzprodukt, wenn keine gemeinsamen Attribute existieren + \item Erzwingen durch Umbenennung + \item Kreuzprodukt + Selektion simuliert natürlichen Verbund + \end{itemize*} +\end{itemize*} + +Unabhängigkeit und Vollständigkeit +\begin{itemize*} + \item Minimale Relationenalgebra: $\Omega$ = $\pi$, $\sigma$, $\rtimes$, $\beta$, $\cup$ und - + \item unabhängig: kein Operator kann weggelassen werden ohne Vollständigkeit zu verlieren + \item andere unabhängige Menge: $\ltimes$ und $\beta$ durch × ersetzen + \item Relationale Vollständigkeit: jede andere Menge von Operationen genauso mächtig wie $\Omega$ + \item strenge relationale Vollständigkeit: zu jedem Ausdruck mit Operatoren aus $\Omega$ gibt es einen Ausdruck auch mit der anderen Menge von Operationen +\end{itemize*} + +\subsection{Erweiterungen der Relationenalgebra} +Verbundvarianten +\begin{itemize*} + \item Gleichverbund (engl. equi-join): Gleichheitsbedingung über explizit angegebene und evtl. verschiedene Attribute + \begin{itemize*} + \item $r(R) \bowtie_{C=D} r(S)$ + \end{itemize*} + \item Theta-Verbund (engl. $\Theta$-join): beliebige Verbundbedingung + \begin{itemize*} + \item $r(R) \bowtie_{C>D} r(S)$ + \end{itemize*} + \item Semi-Verbund: nur Attribute eines Operanden erscheinen im Ergebnis + \begin{itemize*} + \item $r(L) \bowtie r(R) = \pi_L (r(L) \bowtie r(R))$ + \end{itemize*} + \item äußere Verbunde (engl. outer join) + \begin{itemize*} + \item voller äußerer Verbund übernimmt alle Tupel beider Operanden + \item linker äußerer Verbund übernimmt alle Tupel des linken Operanden + \item rechter äußerer Verbund übernimmt alle Tupel des rechten Operanden + \end{itemize*} +\end{itemize*} + +Problem: Quantoren +\begin{itemize*} + \item Allquantor in Relationenalgebra ausdrücken, obwohl in Selektionsbedingungen nicht erlaubt + \item Division (kann aus $\Omega$ hergeleitet werden) +\end{itemize*} + +> Division: Die ganzzahlige Division ist in dem Sinne die Inverse zur Multiplikation, indem sie als Ergebnis die größte Zahl liefert, für die die Multiplikation mit dem Divisor kleiner ist als der Dividend. +Analog gilt: $r = r_1 / r_2$ ist die größte Relation, für die $r \bowtie r_2 \subseteq r_1$ ist. + +Gruppierungsoperator $Y$ +\begin{itemize*} + \item erweitert Attributschema von r(R) um neue Attribute, die mit den Funktionsanwendungen $f_1 (x_1 ), f_2 (x_2 ),..., f_n (x_n )$ korrespondieren + \item Anwendung der Funktionen $f_i (x_i)$ auf die Teilmenge derjenigen Tupel von $r(R)$ die gleiche Attributwerte für die Attribute A haben +\end{itemize*} + +\subsection{Anfragekalküle} +\begin{itemize*} + \item Kalkül: eine formale logische Sprache zur Formulierung von Aussagen + \item Ziel: Einsatz eines derartigen Kalküls zur Formulierung von Datenbank-Anfragen + \item Logikbasierter Ansatz: + \begin{itemize*} + \item Datenbankinhalte entsprechen Belegungen von Prädikaten einer Logik + \item Anfragen abgeleiteten Prädikaten + \end{itemize*} +\end{itemize*} + +Ein allgemeiner Kalkül +\begin{itemize*} + \item Motivation: mathematische Notation $\{x^2 | x \in N \vee x^3 > 0 \vee x^3 < 1000\}$ + \item Anfrage hat die Form $\{f(\bar{x}) | p(\bar{x})\}$ + \begin{itemize*} + \item x bezeichnet Menge von freien Variablen $x = \{x_1:D_1,...,x_n:D_n\}$ + \item Funktion f bezeichnet Ergebnisfunktion über $\bar{x}$ + \item p Selektionsprädikat über freien Variablen $\bar{x}$ + \end{itemize*} + \item Ergebnisbestimmung einer Anfrage + \begin{itemize*} + \item Bestimme aller Belegungen der freien Variablen in x, für die das Prädikat p wahr wird. + \item Wende Funktion f auf die durch diese Belegungen gegebenen Werte an. + \end{itemize*} + \item Unter welchen Umständen liefern Kalkülanfragen endliche Ergebnisse? $\rightarrow$ Sicherheit von Anfragen +\end{itemize*} + +Relationale Kalküle +\begin{itemize*} +\item Bereichskalkül: Variablen nehmen Werte elementarer Datentypen (Bereiche) an +\begin{itemize*} + \item Terme: + \begin{itemize*} + \item Konstanten, etwa 42 oder "MZ-4" + \item Variablen zu Datentypen, etwa x Datentypangabe erfolgt in der Regel implizit und wird nicht explizit deklariert! + \item Funktionsanwendung $f(t_1,...,t_n )$: Funktion f, Terme $t_i$ , etwa $plus(12, x)$ bzw. in Infixnotation $12 + x$ + \end{itemize*} + \item Atomare Formeln: + \begin{itemize*} + \item Prädikatanwendung $\Theta(t_1,...,t_n ), \Theta\in\{<, >, \leq, \geq, \not = , =,...\}$ + \begin{itemize*} + \item Datentypprädikat, Terme $t_i$ + \item Zweistellige Prädikate wie üblich in Infix-Notation. + \item Beispiele: $x = y$, $42 > x$ oder $3 + 7 = 11$. + \end{itemize*} + \item Prädikatanwendungen für Datenbankprädikate, notiert als $R(t_1,...,t_n)$ für einen Relationennamen R + \begin{itemize*} + \item Voraussetzung: n muss die Stelligkeit der Relation R sein und alle $t_i$ müssen vom passenden Typ sein + \item Beispiel: "ERZEUGER(x, ’Hessen’, z)" + \end{itemize*} + \item Formeln wie üblich $\vee, \wedge, \neg, \forall, \exists$ + \end{itemize*} + \item Anfragen: $\{x_1,..., x_n | \phi(x_1,..., x_n )\}$ + \begin{itemize*} + \item $\phi$ ist Formel über den in der Ergebnisliste aufgeführten Variablen $x_1$ bis $x_n$ + \item Ergebnis ist eine Menge von Tupeln + \item Tupelkonstruktion erfolgt implizit aus den Werten der Variablen in der Ergebnisliste + \end{itemize*} + \item Basiskalkül + \begin{itemize*} + \item Einschränkung des Bereichskalküls: + \begin{itemize*} + \item Wertebereich: ganze Zahlen + \item Datentypprädikate werden wie bei der Relationenalgebra auf Gleichheit und elementare Vergleichsoperatoren eingeschränkt + \item Funktionsanwendungen sind nicht erlaubt; nur Konstanten dürfen neben Bereichsvariablen als Terme verwendet werden + \end{itemize*} + \item Tupelkalkül: Variablen variieren über Tupelwerte (entsprechend den Zeilen einer Relation) + \begin{itemize*} + \item Grundlage von SFW-Anfragen in SQL + \item Variablen sind tupelwertig + \item Beispiel: $\{w | w\in WEINE \vee w.Farbe = "Rot"\}$ + \end{itemize*} + \end{itemize*} +\end{itemize*} + + Motivation: Die Sprache QBE + \begin{itemize*} + \item „Query by Example“ + \item Anfragen in QBE: Einträge in Tabellengerüsten + \item Intuition: Beispieleinträge in Tabellen + \item Vorläufer verschiedener tabellenbasierter Anfrageschnittstellen kommerzieller Systeme + \item basiert auf logischem Kalkül mit Bereichsvariablen + \end{itemize*} + + > Semantisch sichere Anfragen: Anfragen, die für jeden Datenbankzustand $\sigma(R)$ ein endliches Ergebnis liefern + + > Semantische Sicherheit Semantische Sicherheit ist im Allgemeinen nicht entscheidbar! + + > Syntaktische Sicherheit: Jede freie Variable $x_i$ muss überall in $\phi(x_1,...)$ durch positives Auftreten $x_i = t$ oder $R(. . . , x_i , . . . )$ an endliche Bereiche gebunden werden. + \begin{itemize*} + \item Syntaktisch sichere Anfragen: Anfragen, die syntaktischen Einschränkungen unterliegen, um die semantische Sicherheit zu erzwingen. + \item Bindung an endliche Bereiche muss für die ganze Bedingung gelten, also insbesondere für alle Zweige einer Disjunktion + \end{itemize*} + + \subsection{Eigenschaften des Bereichskalküls} + Ausdrucksfähigkeit des Bereichskalküls: Bereichskalkül ist streng relational vollständig, d.h. zu jedem Term $\tau$ der Relationenalgebra gibt es einen äquivalenten (sicheren) Ausdruck $\eta$ des Bereichskalküls. + + \section{Transaktionen, Integrität und Trigger} + \subsection{Grundbegriffe} + Integritätsbedingung (engl. integrity constraint oder assertion): Bedingung für die „Zulässigkeit“ oder „Korrektheit“ + + \begin{itemize*} + \item Typintegrität + \begin{itemize*} + \item SQL erlaubt Angabe von Wertebereichen zu Attributen + \item Erlauben oder Verbieten von Nullwerten + \end{itemize*} + \item Schlüsselintegrität + \begin{itemize*} + \item Angabe eines Schlüssels für eine Relation + \end{itemize*} + \item Referentielle Integrität + \begin{itemize*} + \item die Angabe von Fremdschlüsseln + \end{itemize*} + \end{itemize*} + + \subsection{Transaktionsbegriff} + Beispiel: + \begin{itemize*} + \item Platzreservierung für Flüge gleichzeitig aus vielen Reisebüros $\rightarrow$ Platz könnte mehrfach verkauft werden, wenn mehrere Reisebüros den Platz als verfügbar identifizieren + \item überschneidende Kontooperationen einer Bank + \item statistische Datenbankoperationen $\rightarrow$ Ergebnisse sind verfälscht, wenn während der Berechnung Daten geändert werden + \end{itemize*} + + > Transaktion: Eine Transaktion ist eine Folge von Operationen (Aktionen), die die Datenbank von einem konsistenten Zustand in einen konsistenten, eventuell veränderten, Zustand überführt, wobei das ACID-Prinzip eingehalten werden muss. + \begin{itemize*} + \item Aspekte: + \begin{itemize*} + \item Semantische Integrität: Korrekter (konsistenter) DB-Zustand nach Ende der Transaktion + \item Ablaufintegrität: Fehler durch "gleichzeitigen" Zugriff mehrerer Benutzer auf dieselben Daten vermeiden + \end{itemize*} + \item ACID-Eigenschaften + \begin{itemize*} + \item Atomicity (Atomarität): Transaktion wird entweder ganz oder gar nicht ausgeführt + \item Consistency (Konsistenz oder auch Integritätserhaltung): Datenbank ist vor Beginn und nach Beendigung einer Transaktion jeweils in einem konsistenten Zustand + \item Isolation (Isolation): Nutzer, der mit einer Datenbank arbeitet, sollte den Eindruck haben, dass er mit dieser Datenbank alleine arbeitet + \item Durability (Dauerhaftigkeit / Persistenz): nach erfolgreichem Abschluss einer Transaktion muss das Ergebnis dieser Transaktion „dauerhaft“ in der Datenbank gespeichert werden + \end{itemize*} + \item Kommandos einer Transaktionssprache + \begin{itemize*} + \item Beginn einer Transaktion: Begin-of-Transaction-Kommando BOT (in SQL implizit!) + \item commit: die Transaktion soll erfolgreich beendet werden + \item abort: die Transaktion soll abgebrochen werden + \end{itemize*} + \end{itemize*} + + Vereinfachtes Modell für Transaktion + \begin{itemize*} + \item Repräsentation von Datenbankänderungen einer Transaktion + \begin{itemize*} + \item "read(A,x)": weise den Wert des DB-Objektes A der Variablen x zu + \item "write(x, A)": speichere den Wert der Variablen x im DB-Objekt A + \end{itemize*} + \item Beispiel einer Transaktion T: + \begin{itemize*} + \item "read(A, x); x := x - 200; write(x, A);" + \item "read(B, y); y := y + 100; write(y, B);" + \end{itemize*} + \item Ausführungsvarianten für zwei Transaktionen $T_1 , T_2$: + \begin{itemize*} + \item seriell, etwa $T_1$ vor $T_2$ + \item „gemischt“, etwa abwechselnd Schritte von $T_1$ und $T_2$ + \end{itemize*} + \item Probleme im Mehrbenutzerbetrieb + \begin{itemize*} + \item Inkonsistentes Lesen: Nonrepeatable Read + \item Variablen/Speicher ändert sich durch fertigstellen anderer Transaktionen während des Ablaufs + \item dirty read + \item Das Phantom-Problem: durch "insert" ändert sich "select" ergebnis; nachfolgende rechnungen auf vorherigen abruf sind falsch + \item Verlorengegangenes Ändern: "Lost Update" updates gehen verloren, wenn gleiche Variablen gleicheitig beschrieben werden (oder kurz nacheinander) + \end{itemize*} + \end{itemize*} + + Abhängigkeiten von nicht freigegebenen Daten: Dirty Read + \begin{itemize*} + \item $T_1$ ändert X + \item $T_2$ liest X und rechnet damit + \item $T_1$ bricht ab und setzt änderung zurück + \item Ergebnis von $T_2$ ist damit falsch + \end{itemize*} + + > Serialisierbarkeit: Eine verschränkte Ausführung mehrerer Transaktionen heißt serialisierbar, wenn ihr Effekt identisch zum Effekt einer (beliebig gewählten) seriellen Ausführung dieser Transaktionen ist. + Schedule: "Ablaufplan" für Transaktion, bestehend aus Abfolge von Transaktionsoperationen + + \subsection{Transaktionen in SQL} + Aufweichung von ACID in SQL: Isolationsebenen + ```sql + set transaction + [ { read only | read write }, ] + [isolation level + { read uncommitted | + read committed | + repeatable read | + serializable }, ] + [ diagnostics size ...] + ``` + Standardeinstellung: + ```sql + set transaction read write, + isolation level serializable + ``` + + Bedeutung der Isolationsebenen + \begin{itemize*} + \item \textbf{read uncommitted} + \begin{itemize*} + \item schwächste Stufe: Zugriff auf nicht geschriebene Daten, nur für read only Transaktionen + \item statistische und ähnliche Transaktionen (ungefährer Überblick, nicht korrekte Werte) + \item keine Sperren $\rightarrow$ effizient ausführbar, keine anderen Transaktionen werden behindert + \end{itemize*} + \item \textbf{read committed}: nur Lesen endgültig geschriebener Werte, aber nonrepeatable read möglich + \item \textbf{repeatable read}: kein nonrepeatable read, aber Phantomproblem kann auftreten + \item \textbf{serializable}: garantierte Serialisierbarkeit + \end{itemize*} + + + \subsection{Integritätsbedingungen in SQL} + \begin{itemize*} + \item \textbf{not null}: Nullwerte verboten + \item \textbf{default}: Angabe von Default-Werten + \item \textbf{check} ( search-condition ): + \begin{itemize*} + \item Attributspezifische Bedingung (in der Regel Ein-Tupel-Integritätsbedingung) + \item Festlegung weitere lokale Integritätsbedingungen innerhalb der zu definierenden Wertebereiche, Attribute und Relationenschemata + \item Beispiel: + ```sql + create table WEINE ( + WeinID int primary key, + Name varchar(20) not null, + Jahr int check(Jahr between 1980 and 2010), + ... + ) + ``` + \end{itemize*} + \item \textbf{primary key}: Angabe eines Primärschlüssel + \item \textbf{foreign key} ( Attribut(e) ) references Tabelle( Attribut(e) ): Angabe der referentiellen Integrität + \item \textbf{create domain}: Festlegung eines benutzerdefinierten Wertebereichs + \begin{itemize*} + \item Beispiel: + ```sql + create domain WeinFarbe varchar(4) + default "Rot" + check (value in ("Rot", "Weiß", "Rose")) + + create table WEINE ( WeinID int primary key, Name varchar(20) not null, Farbe WeinFarbe, ...) + ``` + \end{itemize*} + \end{itemize*} + + Erhaltung der referentiellen Integrität + \begin{itemize*} + \item Überprüfung der Fremdschlüsselbedingungen nach Datenbankänderungen + \item Überprüfungsmodi von Bedingungen + \begin{itemize*} + \item "on update | delete": Angabe eines Auslöseereignisses, das die Überprüfung der Bedingung anstößt + \item "cascade | set null | set default | no action": Kaskadierung: Behandlung einiger Integritätsverletzungen pflanzt sich über mehrere Stufen fort, z.B. Löschen als Reaktion auf Verletzung der referentieller Integrität + \item "deferred | immediate" legt Überprüfungszeitpunkt für eine Bedingung fest + \item "deferred": Zurückstellen an das Ende der Transaktion + \item "immediate": sofortige Prüfung bei jeder relevanten Datenbankänderung + \item Beispiel: "... foreign key (Weingut) references ERZEUGER (Weingut) on delete cascade" + \end{itemize*} + \end{itemize*} + + Die assertion-Klausel + \begin{itemize*} + \item Assertion: Prädikat, das eine Bedingung ausdrückt, die von der Datenbank immer erfüllt sein muss + \item Syntax (SQL:2003) "create assertion name check ( prädikat )" + \end{itemize*} + + \subsection{Trigger} + \begin{itemize*} + \item Trigger: Anweisung/Prozedur, die bei Eintreten eines bestimmten Ereignisses automatisch vom DBMS ausgeführt wird + \item Anwendung: + \begin{itemize*} + \item Erzwingen von Integritätsbedingungen („Implementierung“ von Integritätsregeln) + \item Auditing von DB-Aktionen + \item Propagierung von DB-Änderungen + \end{itemize*} + \item Definition:$create trigger ... after Operation Anweisungen$ + \item Spezifikation von + \begin{itemize*} + \item Ereignis und Bedingung für Aktivierung des Triggers + \item Aktion(en) zur Ausführung + \end{itemize*} + \item verfügbar in den meisten kommerziellen Systemen (aber mit anderer Syntax) + \item Weitere Angaben bei Triggern + \begin{itemize*} + \item \textbf{for each row} bzw. \textbf{for each statement}: Aktivierung des Triggers für jede Einzeländerungen einer mengenwertigen Änderung oder nur einmal für die gesamte Änderung + \item \textbf{before} bzw. \textbf{after}: Aktivierung vor oder nach der Änderung + \item \textbf{referencing new as} bzw. \textbf{referencing old as}: Binden einer Tupelvariable an die neu eingefügten bzw. gerade gelöschten („alten“) Tupel einer Relation $\rightarrow$ Tupel der Differenzrelationen + \end{itemize*} + \end{itemize*} + + Integritätssicherung durch Trigger + \begin{itemize*} + \item Bestimme Objekt $o_i$ , für das die Bedingung $\phi$ überwacht werden soll + \begin{itemize*} + \item i.d.R. mehrere $o_i$ betrachten, wenn Bedingung relationsübergreifend ist + \item Kandidaten für $o_i$ sind Tupel der Relationsnamen, die in $\phi$ auftauchen + \end{itemize*} + \item Bestimme die elementaren Datenbankänderungen $u_{ij}$ auf Objekten $o_i$ , die $\phi$ verletzen können + \begin{itemize*} + \item Regeln: z.B. Existenzforderungen beim Löschen und Ändern prüfen, jedoch nicht beim Einfügen etc. + \end{itemize*} + \item Bestimme je nach Anwendung die Reaktion $r_i$ auf Integritätsverletzung + \begin{itemize*} + \item Rücksetzen der Transaktion (rollback) + \item korrigierende Datenbankänderungen + \end{itemize*} + \item Formuliere folgende Trigger: + \begin{itemize*} + \item create trigger $t_{phi_{ij}}$ after $u_{ij}$ on $o i$ when $\neq\phi$ begin $r i$ end + \end{itemize*} + \item Wenn möglich, vereinfache entstandenen Trigger + \end{itemize*} + + Trigger in Oracle: Arten + \begin{itemize*} + \item Prädikat zur Einschränkung (when) + \item Zugriff auf altes (:old.col) bzw. neues (:new.col) Tupel + \begin{itemize*} + \item für delete: nur (:old.col) + \item für insert: nur (:new.col) + \item in when-Klausel nur (new.col) bzw. (old.col) + \end{itemize*} + \item Transaktionsabbruch durch $raise_application_error(code, message)$ + \item Unterscheidung der Art der DML-Anweisung + \begin{itemize*} + \item "if deleting then ... end if;" + \item "if updating then ... end if;" + \item "if inserting then ... end if;" + \end{itemize*} + \end{itemize*} + + \subsection{Schemaevolution} + \begin{itemize*} + \item Änderung eines Datenbankschemas durch neue/veränderte Anforderungen + \begin{itemize*} + \item Hinzufügen oder Löschen von Tabellen, Spalten, Integritätsbedingungen + \item Umbenennen oder Datentypänderungen + \end{itemize*} + \item erfordert oft auch Anpassung/Übertragung der vorhandenen Datenbank $\rightarrow$ Datenbankmigration + \item leider nur eingeschränkte Unterstützung durch DB-Werkzeuge (DDL + Export/Import der Daten) + \end{itemize*} + + \begin{itemize*} + \item SQL-DDL zum Löschen von Tabellen + \begin{itemize*} + \item Löschen von Tabellendefinitionen (beachte Unterschied zu delete) + "drop table relationenname [ restrict | cascade ]" + \item cascade: erzwingt Löschen aller Sichten und Integritätsbedingungen, die zu dieser Basisrelation gehören + \item restrict (Defaultfall): das drop-Kommando wird zurückgewiesen, falls noch solche Sichten und Integritätsbedingungen existieren + \end{itemize*} + \item SQL-DDL zur Änderung von Tabellen + \begin{itemize*} + \item "alter table relationenname modifikation" + \item \textbf{add column spaltendefinition} fügt eine neue Spalte hinzu; alle bereits in der Tabelle existierenden Tupel erhalten als Wert der neuen Spalte den angegebenen Defaultwert bzw. den null-Wert + \item \textbf{drop column spaltenname} löscht die angegebene Spalte (inkl. restrict- bzw. cascade) + \item \textbf{alter column spaltenname set default defaultwert} verändert Defaultwert der Spalte + \end{itemize*} + \item Änderung von Integritätsbedingungen + \begin{itemize*} + \item nachträgliches Hinzufügen/Löschen von Tabellenbedingungen über \textbf{alter table} + \item Vergabe von Namen für Bedingungen über constraint bed-name-Klausel + ```sql + alter table WEINE + add constraint $WeinBed_Eindeutig$ + unique (Name, Weingut) + ``` + \item Löschen über Namen "alter table WEINE drop constraint $WeinBed_Eindeutig$" + \end{itemize*} + \end{itemize*} + + \section{Sichten und Zugriffskontrolle} + \subsection{Sichtenkonzept} + > Sichten: virtuelle Relationen (bzw virtuelle Datenbankobjekte in anderen Datenmodellen) (englisch view) + \begin{itemize*} + \item Sichten sind externe DB-Schemata folgend der 3-Ebenen-Schemaarchitektur + \begin{itemize*} + \item Sichtdefinition + \item Relationenschema (implizit oder explizit) + \item Berechnungsvorschrift für virtuelle Relation, etwa SQL-Anfrage + \end{itemize*} + \item Vorteile + \begin{itemize*} + \item Vereinfachung von Anfragen für den Benutzer der Datenbank, etwa indem oft benötigte Teilanfragen als Sicht realisiert werden + \item Möglichkeit der Strukturierung der Datenbankbeschreibung, zugeschnitten auf Benutzerklassen + \item logische Datenunabhängigkeit ermöglicht Stabilität der Schnittstelle für Anwendungen gegenüber Änderungen der Datenbankstruktur + \item Beschränkung von Zugriffen auf eine Datenbank im Zusammenhang mit der Zugriffskontrolle + \end{itemize*} + \item Probleme + \begin{itemize*} + \item automatische Anfragetransformation + \item Durchführung von Änderungen auf Sichten + \end{itemize*} + \item Definition von Sichten in SQL + ```sql + create view SichtName [ SchemaDeklaration ] + as SQLAnfrage + [ with check option ] + ``` + \item Beispiel: alle Rotweine aus Bordeaux + ```sql + create view Rotweine as + select Name, Jahrgang, WEINE.Weingut + from WEINE natural join ERZEUGER + where Farbe = "Rot" and Region = "Bordeaux" + ``` + \end{itemize*} + + \subsection{Änderungen auf Sichten} + Kriterien für Änderungen auf Sichten + \begin{itemize*} + \item Effektkonformität: Benutzer sieht Effekt als wäre die Änderung auf der Sichtrelation direkt ausgeführt worden + \item Minimalität: Basisdatenbank sollte nur minimal geändert werden, um den erwähnten Effekt zu erhalten + \item Konsistenzerhaltung: Änderung einer Sicht darf zu keinen Integritätsverletzungen der Basisdatenbank führen + \item Respektierung des Datenschutzes: Wird die Sicht aus Datenschutzgründen eingeführt, darf der bewusst ausgeblendete Teil der Basisdatenbank von Änderungen der Sicht nicht betroffen werden + \end{itemize*} + + Projektionssicht: $WNW:=\pi_{WeinID, Name, Weingut}(WEINE)$ + \begin{itemize*} + \item in sql mit create view Anweisung + "create view WNW as select WeinID, Name, Weingut from WEINE" + \item Änderungsanweisung für die Sicht WNW: + "insert into WNW values (3333, "Dornfelder", "Müller")" + \item Problem der Konsistenzerhaltung falls Farbe oder Jahrgang als not null deklariert! + \end{itemize*} + + Selektionssichten: $WJ:=\sigma_{Jahrgang>2000}(\pi_{WeinID, Jahrgang}(WEINE))$ + ```sql + create view WJ as + select WeinID, Jahrgang + from WEINE + where Jahrgang > 2000 + ``` + + Kontrolle der Tupelmigration + ```sql + create view WJ as + select WeinID, Jahrgang + from WEINE + where Jahrgang > 2000 + with check option + ``` + + Verbundsichten $WE := WEINE \bowtie ERZEUGER$ + In SQL: + ```sql + create view WE as + select WeinID, Name, Farbe, Jahrgang, + WEINE.Weingut, Anbaugebiet, Region + from WEINE, ERZEUGER + where WEINE.Weingut = ERZEUGER.Weingut + ``` + \begin{itemize*} + \item Änderungsoperationen hier in der Regel nicht eindeutig übersetzbar: + "insert into WE values (3333, "Dornfelder", "Rot", 2002, "Helena", "Barossa Valley", "Südaustralien")" + \item Änderung wird transformiert zu + "insert into WEINE values (3333, "Dornfelder", "Rot", 2002, "Helena")" + \item plus Änderung auf ERZEUGER ! + \end{itemize*} + + Klassifikation der Problembereiche + \begin{itemize*} + \item Verletzung der Schemadefinition (z.B. Einfügen von Nullwerten bei Projektionssichten) + \item Datenschutz: Seiteneffekte auf nicht-sichtbaren Teil der Datenbank vermeiden (Tupelmigration, Selektionssichten) + \item nicht immer eindeutige Transformation: Auswahlproblem + \item Aggregierungssichten (u.a.): keine sinnvolle Transformation möglich + \item elementare Sichtänderung soll genau einer atomaren Änderung auf Basisrelation entsprechen: 1:1-Beziehung zwischen Sichttupeln und Tupeln der Basisrelation (kein Herausprojizieren von Schlüsseln) + \end{itemize*} + + SQL-92-Standard + \begin{itemize*} + \item Integritätsverletzende Sichtänderungen nicht erlaubt + \item datenschutzverletzende Sichtänderungen: Benutzerkontrolle (with check option) + \item Sichten mit nicht-eindeutiger Transformation: Sicht nicht änderbar (SQL-92 restriktiver als notwendig) + \end{itemize*} + + Einschränkungen für Sichtänderungen + \begin{itemize*} + \item änderbar nur Selektions- und Projektionssichten (Verbund und Mengenoperationen nicht erlaubt) + \item 1:1-Zuordnung von Sichttupeln zu Basistupeln: kein distinct in Projektionssichten + \item Arithmetik und Aggregatfunktionen im select-Teil sind verboten + \item genau eine Referenz auf einen Relationsnamen im from-Teil erlaubt (auch kein Selbstverbund) + \item keine Unteranfragen mit „Selbstbezug“ im where-Teil erlaubt (Relationsname im obersten SFW-Block nicht in from-Teilen von Unteranfragen verwenden) + \item group by und having verboten + \item seit SQL:2003 Aufhebung einiger Einschränkungen, insbesondere + \begin{itemize*} + \item updates auf union all-Sichten (ohne Duplikateliminierung) + \item Inserts in Verbundsichten mit Primär-/Fremdschlüsselbeziehungen (mit einigen Einschränkungen) + \item Updates auf Verbundsichten mit Cursor + \end{itemize*} + \end{itemize*} + + Alternative: Sichtänderungen mit Instead-of-Triggern + Definition von Triggern auf Sichten zur anwendungsspezifischen Propagierung der Änderungen auf die Basistabellen + ```sql$ + create view V_WEINERZEUGER as + select * from WEINE natural join ERZEUGER; + create trigger V_WEINERZEUGER_Insert + instead of insert on V_WEINERZEUGER + referencing new as N + for each row + begin + insert into WEINE values (:N.WeinID, :N.Name, + :N.Farbe, :N.Jahrgang, :N.Weingut); + end;$ + ``` + + Auswertung von Anfragen an Sichten + \begin{itemize*} + \item select: Sichtattribute evtl. umbenennen bzw. durch Berechnungsterm ersetzen + \item from: Namen der Originalrelationen + \item konjunktive Verknüpfung der where-Klauseln von Sichtdefinition und Anfrage (evtl. Umbenennungen) + \item Vorsicht bei Aggregationssichten! + \begin{itemize*} + \item having versus where + \item keine geschachtelten Aggregationen in SQL + \end{itemize*} + \end{itemize*} + + \subsection{Rechtevergabe} + \begin{itemize*} + \item Zugriffsrechte (AutorisierungsID, DB-Ausschnitt, Operation) + \item AutorisierungsID ist interne Kennung eines „Datenbankbenutzers“ + \item Datenbank-Ausschnitte: Relationen und Sichten + \item DB-Operationen: Lesen, Einfügen, Ändern, Löschen + \end{itemize*} + + ```sql + grant Rechte + on Tabelle + to BenutzerListe + [with grant option] + ``` + \begin{itemize*} + \item In Rechte-Liste: all bzw. Langform all privileges oder Liste aus select, insert, update, delete + \item Hinter on: Relationen- oder Sichtname + \item Hinter to: Autorisierungsidentifikatoren (auch public, group) + \item spezielles Recht: Recht auf die Weitergabe von Rechten (with grant option) + \end{itemize*} + + Autorisierung für public: „Jeder Benutzer kann seine Aufträge sehen und neue Aufträge einfügen (aber nicht löschen!).“ + ```sql + create view MeineAufträge as + select * + from AUFTRAG + where KName = user; + grant select, insert + on MeineAufträge + to public; + ``` + + Zurücknahme von Rechten + ```sql + revoke Rechte + on Tabelle + from BenutzerListe + [restrict | cascade ] + ``` + \begin{itemize*} + \item restrict: Falls Recht bereits an Dritte weitergegeben: Abbruch von revoke + \item cascade: Rücknahme des Rechts mittels revoke an alle Benutzer propagiert, die es von diesem Benutzer mit grant erhalten haben + \end{itemize*} + + + \subsection{Privacy-Aspekte} + > Privacy (Privatsphäre): das Recht jedes Einzelnen auf einen geschützten privaten Raum, der von anderen nur in definierten Ausnahmefällen verletzt werden darf + \begin{itemize*} + \item elektronische Autobahn-Mautsysteme: Überwachung von Fahrzeugen + \item Kreditkartenaktivitäten und diverse Payback- bzw. Rabattkarten: Kaufverhalten von Kunden + \item Mobilfunksysteme: Bewegungsprofile der Nutzer + \item RFID-Technologie: etwa im Einzelhandel Kaufverhalten, Warenflüsse, etc. + \end{itemize*} + + Statistische Datenbanken + \begin{itemize*} + \item Datenbanken, in denen die Einzeleinträge dem Datenschutz unterliegen, aber statistische Informationen allen Benutzern zugänglich sind + \item statistische Information = aggregierte Daten (Durchschnittseinkommen etc.) + \item Problem: Gewinnung von Einzelinformationen durch indirekte Anfragen + \begin{itemize*} + \item Abhilfe: keine Anfragen, die weniger als n Tupel selektieren + \item Abhilfe: statistische Anfragen nicht erlauben, die paarweise einen Durchschnitt von mehr als m vorgegebenen Tupeln betreffen + \end{itemize*} + \end{itemize*} + > Sind nur Ergebnisse von Aggregatfunktionen erlaubt, dann benötigt eine Person 1 + (n - 2)/m Anfragen, um einen einzelnen Attributwert zu ermitteln + + > k-Anonymität: ein bestimmter Sachverhalt kann nicht zwischen einer vorgegebenen Anzahl k von Tupeln unterschieden werden + \begin{itemize*} + \item für viele Zwecke (klinische Studien etc.) werden auch Detaildaten (Mikrodaten) benötigt + \begin{itemize*} + \item weitere Zuordnungen (Namen etc.) etwa durch Verbund mit anderen Daten möglich? + \item Lösung: Data Swapping (Vertauschen von Attributwerten einzelner Tupel) + \item eine Anfrage nach einer beliebigen Kombination von Alter, Geschlecht, Familienstand und Postleitzahl liefert entweder eine leere Relation oder mindestens k Tupel + \end{itemize*} + \item Ansätze + \begin{itemize*} + \item Generalisierung: Attributwerte durch allgemeinere Werte ersetzen, die einer Generalisierungshierarchie entnommen sind + \item die Verallgemeinerung des Alters einer Person zu Altersklassen: $\{35, 39\} \rightarrow 30-40$ + \item Weglassen von Stellen bei Postleitzahlen: $\{ 39106, 39114 \}\rightarrow 39***$ + \item Unterdrücken von Tupeln: Löschen von Tupeln, welche die k-Anonymität verletzen und damit identifizierbar sind + \end{itemize*} + \end{itemize*} + + \section{NoSQL Datenbanken} + \subsection{Motivation für NoSQL} + \begin{itemize*} + \item NoSQL = Not only SQL + \item im Umfeld vieler aktueller Buzzwords + \begin{itemize*} + \item NoSQL + \item Big Data + \item BASE + \item ... + \end{itemize*} + \item oft einfach als Etikett einer Neuentwicklung eines DBMS pauschal vergeben + \end{itemize*} + + Was ist NoSQL? + \begin{itemize*} + \item SQL-No! + \begin{itemize*} + \item SQL-Datenbanken sind zu komplex, nicht skalierbar, ... + \item man braucht was einfacheres! + \end{itemize*} + \item Not only SQL + \begin{itemize*} + \item SQL-Datenbanken haben zu wenig (oder die falsche) Funktionalität + \item Operationen auf Graphen, Data Mining Operatoren, ... + \end{itemize*} + \item New SQL + \begin{itemize*} + \item SQL-Datenbanken sind (software-technisch) in die Jahre gekommen + \item eine neue Generation von DBMS muss her (ohne die etablierten Vorteile von SQL zu ignorieren) + \end{itemize*} + \end{itemize*} + + Kritik an RDBMS / SQL + \begin{itemize*} + \item nicht skalierbar + \begin{itemize*} + \item Normalisierung von Relationen, viele Integritätsbedingungen zu prüfen + \item kann man in RDBMS auch vermeiden! + \end{itemize*} + \item starre Tabellen nicht flexibel genug + \begin{itemize*} + \item schwach typisierte Tabellen (Tupel weichen in den tatsächlich genutzten Attributen ab) + \item viele Nullwerte wenn alle potentiellen Attribute definiert + \item alternativ Aufspaltung auf viele Tabellen + \item Schema-Evolution mit alter table skaliert bei Big Data nicht + \item tatsächlich in vielen Anwendungen ein Problem + \end{itemize*} + \item Integration von spezifischen Operationen (Graphtraversierung, Data-Mining-Primitive) mit Stored Procedures zwar möglich führt aber oft zu schwer interpretierbarem Code + \end{itemize*} + + + \subsection{Datenmodelle für NoSQL} + Datenmodelle für NoSQL + \begin{itemize*} + \item KV-Stores + \item Wide Column Stores + \item Dokumenten-orientierte Datenhaltung + \item Graph-Speicher + \item ... + \end{itemize*} + + Anfragesprachen für NoSQL + \begin{itemize*} + \item unterschiedliche Ansätze: + \item einfache funktionale API + \item Programmiermodell für parallele Funktionen + \item angelehnt an SQL-Syntax + \item ... + \end{itemize*} + + \subsection{KV-Stores und Wide Column} + Datenmodell: Key-Value-Stores + \begin{itemize*} + \item Key-Value-Store: binäre Relationen, bestehend aus + \begin{itemize*} + \item einem Zugriffsschlüssel (dem Key) und + \item den Nutzdaten (dem Value) + \end{itemize*} + \item Nutzdaten + \begin{itemize*} + \item binäre Daten ohne Einschränkung, + \item Dateien oder Dokumente, $\rightarrow$ Document Databases + \item oder schwachstrukturierte Tupel $\rightarrow$ Wide Column Store + \end{itemize*} + \item Anfragen an KV-Stores + \begin{itemize*} + \item einfache API + ```sql + store.put(key, value) + value = store.get(key) + store.delete(key) + ``` + \item aufgesetzte höherer Sprache angelehnt an SQL + \item Map-Reduce: Framework zur Programmierung paralleler Datenaggregation auf KV-Stores + \end{itemize*} + \item Beispielsysteme für KV-Stores + \begin{itemize*} + \item Amazon DynamoDB + \item Riak + \end{itemize*} + \end{itemize*} + + Datenmodell: Wide Column + \begin{itemize*} + \item Basisidee: KV-Store mit schwachstrukturiertem Tupel als Value + \item Value = Liste von Attributname-Attributwert-Paaren + \begin{itemize*} + \item schwache Typisierung für Attributwerte (auch Wiederholgruppen) + \end{itemize*} + \item nicht alle Einträge haben die selben Attributnamen + \begin{itemize*} + \item offene Tupel + \item Hinzufügen eines neuen Attributs unproblematisch + \item Nullwerte aus SQL ersetzt durch fehlende Einträge + \end{itemize*} + \item Beispiel in DynamoDB + \item Anfragen bei Wide Column + \begin{itemize*} + \item CRUD: Create, Read, Update und Delete + \item in DynamoDB: PutItem, GetItem, Scan + \item Aufruf über HTTP oder aus Programmiersprachen heraus + \end{itemize*} + \end{itemize*} + + + \subsection{Document Stores} + Datenmodell: dokumentenorientierte Speicherung + \begin{itemize*} + \item Basisidee: KV-Store mit (hierarchisch) strukturiertem Dokument als Value + \item strukturiertes Dokument: + \begin{itemize*} + \item JSON-Format: geschachtelte Wide Column-Daten + \item XML (eher unüblich auf KV-Stores) + \end{itemize*} + \item Anfragen bei dokumentenorientierter Speicherung + \begin{itemize*} + \item CRUD erweitert um dokumentspezifische Suche + \item Beispiele (MongoDB mit BSON statt JSON) "$db.kritiker.find(\{Name: "Bond"\})$" + \end{itemize*} + \item Beispielsysteme für dokumentenorientierte Speicherung + \begin{itemize*} + \item MongoDB + \item CouchDB + \end{itemize*} + \end{itemize*} + + \subsection{Graph Stores} + Graph-Datenmodelle: Grundlagen + \begin{itemize*} + \item spezielle Form der Datenrepräsentation = Graphen, insb. Beziehungen zwischen Objekten + \item Anwendungsgebiete: + \begin{itemize*} + \item Transportnetze + \item Networking: Email-Verkehr, Mobilfunk-Nutzer + \item Soziale Netzwerke: Eigenschaften, Communities + \item Web: Verlinkte Dokumente + \item Chemie: Struktur chemischer Komponenten + \item Bioinformatik: Proteinstrukturen, metabolische Pathways, Genexpressionen + \end{itemize*} + \item Graph $G = (V, E)$ + \begin{itemize*} + \item $V$: Menge der Knoten (vertices) + \item $E \subseteq V \times V$: Menge der Kanten (edges) + \item Kanten können mit Gewicht versehen werden + \end{itemize*} + \item Adjazenzmatrix + \begin{itemize*} + \item Repräsentation von Graphen durch Matrix (Knoten als Zeilen und Spalten) + \item ungerichteter Graph: symmetrische Matrix + \item ungewichteter Graph: Zellen nur 0 oder 1 + \end{itemize*} + \item Knotengrad + \begin{itemize*} + \item Eigenschaft eines Knotens: Anzahl der verbundenen Knoten + \item bei gerichteren Graphen: Unterscheidung in Eingangs- und Ausgangsgrad + \end{itemize*} + \item Traversierung + \begin{itemize*} + \item Tiefensuche (DFS): zunächst rekursiv alle Kindknoten besuchen bevor alle Geschwisterknoten besucht werden (Bestimmung der Zusammenhangskomponente) + \item Breitensuche (BFS): zunächst alle Geschwisterknoten besuchen bevor die Kindknoten besucht werden (Bestimmung des kürzesten Weges) + \end{itemize*} + \end{itemize*} + + Subjekt-Prädikat-Objekt-Modell: RDF + \begin{itemize*} + \item Sprache zur Repräsentation von Informationen über (Web)-Ressourcen + \item Ziel: automatisierte Verarbeitung + \item zentraler Bestandteil von Semantic Web, Linked (Open) Data + \item Repräsentation von Daten, aber auch Wissensrepräsentation (z.B. Ontologie) + \end{itemize*} + + Ontologien + \begin{itemize*} + \item Ontologie = formale Spezifikation einer Konzeptualisierung, d.h. einer Repräsentation von Begriffen (Konzepten) und deren Beziehungen + \item Anwendung: Annotation von Daten, semantische Suche + \end{itemize*} + + RDF: Graphen \& Tripel + \begin{itemize*} + \item Graph = Menge von Tripeln, die Aussagen über Web-Ressourcen repräsentieren + \item Identifikation der Web-Ressourcen über Uniform Resource Identifier (URI) + \item Tripel: subjekt prädikat objekt . + \item Beispiel " \ " und " "Pinot Noir"." + \item Subjekt: URI-Referenz, d.h. Ressource, auf die sich die Aussage bezieht + \item Prädikat: Eigenschaft, ebenfalls in Form einer URI-Referenz + \item Objekt: Wert der Eigenschaft als Literal (Konstante) oder URI- Referenz + \item abkürzende Notation für Namensräume über Präfixe: + ```sql + prefix wo: + prefix weine: + weine:2171 wo:name "Pinot Noir". + ``` + \item Komplexe Graphen + \begin{itemize*} + \item mehrere Aussagen zum gleichen Subjekt + \item Objekte nicht nur Literale sondern selbst Objekte (URI) + ```sql + weine:2171 wo:name "Pinot Noir". + weine:2171 wo:farbe "Rot". + weine:2171 wo:jahrgang "1999". + weine:2171 wo:erzeuger werzeuger:567 . + ``` + \end{itemize*} + \end{itemize*} + + Repräsentation, Schema und Vokabulare + \begin{itemize*} + \item Repräsentation von RDF-Daten: N-Tripel, RDF/XML + \item RDF Schema: + \begin{itemize*} + \item objektorientierte Spezifikationssprache + \item erweitert RDF um Typsystem: Definition von Klassen und Klassenhierarchien mit Eigenschaften, Ressourcen als Instanzen von Klassen + \item RDF Schema ist selbst RDF-Spezifikation + \end{itemize*} + \item Beispiel RDF Schema + ```sql + Wein rdf:type rdfs:Class . + Schaumwein rdf:type rdfs:Class . + Schaumwein rdfs:subClassOf Wein . + Name rdf:type rdf:Property . + Jahrgang rdf:type rdf:Property . + Jahrgang rdfs:domain Wein . + Jahrgang rdfs:range xsd:integer . + ``` + \item für komplexere Ontologien: OWL (Web Ontology Language) + \item Vokabular: vordefinierte Klassen und Eigenschaften + \begin{itemize*} + \item Bsp: Dublin Core (Metadaten für Dokumente), FOAF (Soziale Netze), ... + \item wichtig z.B. für Linked Open Data + \end{itemize*} + \end{itemize*} + + SPARQL als RDF-Anfragesprache + \begin{itemize*} + \item SPARQL Protocol And RDF Query Language: Anfragesprache für RDF + \item W3C-Recommendation + \item unterschiedliche Implementierungen möglich: + \begin{itemize*} + \item Aufsatz für SQL-Backends (z.B. DB2, Oracle) + \item Triple Stores (RDF-Datenbank) + \item SPARQL-Endpoints + \end{itemize*} + \item syntaktisch an SQL angelehnt, aber Unterstützung für Graph-Anfragen + \item SPARQL-Elemente + \begin{itemize*} + \item Grundelemente: select-where-Block und Tripelmuster "?wein wo:name ?name ." + \item Auswertung: finden aller Belegungen (Bindung) für Variable (?name) bei Übereinstimmung mit nicht-variablen Teilen + ```sql + wo:name "Pinot Noir". + wo:name "Creek Shiraz". + wo:name "Chardonnay". + ``` + \end{itemize*} + \item SPARQL: Basic Graph Pattern + \begin{itemize*} + \item Graphmuster (BGP = Basic Graph Pattern): Kombination von Tripelmustern über gemeinsame Variablen + ```sql + ?wein wo:name ?name . + ?wein wo:farbe ?farbe . + ?wein wo:erzeuger ?erzeuger . + ?erzeuger wo:weingut ?ename . + ``` + \item Einsatz in SPARQL-Anfragen im where-Teil + ```sql + select ?wein ?name ?farbe ?ename + where { ?wein wo:name ?name . + ?wein wo:farbe ?farbe . + ?wein wo:erzeuger ?erzeuger . + ?erzeuger wo:weingut ?ename . } + ``` + \end{itemize*} + \item SPARQL: Weitere Elemente + \begin{itemize*} + \item filter: Filterbedingungen für Bindungen + \item optional: optionale Muster – erfordern nicht zwingend ein Matching + ```sql + prefix wo: + select ?name + where { ?wein wo:name ?name . } + optional { ?wein wo:jahrgang ?jahrgang } . + filter ( bound(?jahrgang) \&\& ?jahrgang < 2010 ) + ``` + \end{itemize*} + \end{itemize*} + + Property-Graph-Modell + \begin{itemize*} + \item Knoten und (gerichtete) Kanten mit Eigenschaften (Properties) + \item nicht streng typisiert, d.h. Eigenschaften als Name-Wert-Paare + \item Unterstützung in diversen Graph-Datenbanksystemen: neo4j, Microsoft Azure Cosmos DB, OrientDB, Amazon, Neptune, ... + \item Property-Graph-Modell in Neo4j + \begin{itemize*} + \item Elemente: Nodes, Relationships, Properties, Labels + \item Properties = Key-Value-Paare: Key (=String), Value (=Java-Datentypen + Felder) + \item Nodes mit Labels ($\approx$ Klassenname) + \item Relationships: sind gerichtet, mit Namen und ggf. Properties + \end{itemize*} + \end{itemize*} + + Anfragen auf Graphen + \begin{itemize*} + \item keine Standardsprache + \item aber wiederkehrende Grundelemente + \begin{itemize*} + \item Graph Matching: Knoten, Kanten, Pfade (siehe BGP in SPARQL) + \item Filter für Knoten- und Kanteneigenschaften + \item Konstruktion neuer Graphen + \end{itemize*} + \item Anfragen in Cypher + \begin{itemize*} + \item Basis: Muster der Form „Knoten $\rightarrow$ Kante $\rightarrow$ Knoten ...“ "(von)-[:relationship]->(nach)" + \item Beschränkung über Label und Properties $(e:ERZEUGER)-[:LiegtIn]->(a:ANBAUGEBIET \{gebiet: "Napa Valley"\} )$ + \end{itemize*} + \item Klauseln + \begin{itemize*} + \item match: Beispielmuster für Matching + \item return: Festlegung der Rückgabedaten (Projektion) + \item where: Filterbedingung für „gematchte“ Daten + \item create: Erzeugen von Knoten oder Beziehungen + \item set: Ändern von Property-Werten + \end{itemize*} + \end{itemize*} +\end{itemize*} + +Zusammenfassung +\begin{itemize*} + \item NoSQL als Oberbegriff für diverse Datenbanktechniken + \item große Bandbreite: von einfachen KV-Stores bis zu Graphdatenbanken + \item höhere Skalierbarkeit / Performance gegenüber SQL-DBMS meist durch Einschränkungen erkauft + \item Abschwächung von ACID-Eigenschaften + \item begrenzte Anfragefunktionalität + \item Nicht-Standard bzw. proprietäre Schnittstellen +\end{itemize*} + +\section{Anwendungsprogrammierung} +Lernziele: +\begin{itemize*} + \item Wissen zu Konzepten und Schnittstellen zum Zugriff auf SQL-Datenbanken aus Programmiersprachen heraus + \item Verständnis prozeduraler Schnittstellen am Beispiel von JDBC + \item Kenntnisse zu Embedded SQL und prozeduralen SQL-Erweiterungen + \item Grundverständnis objektrelationaler Abbildungen +\end{itemize*} + +\subsection{Programmiersprachenanbindung} +Kopplungsarten: +\begin{itemize*} + \item prozedurale oder CALL-Schnittstellen (call level interface) + \begin{itemize*} + \item Beispiele: SQL/CLI, ODBC, JDBC, ... + \end{itemize*} + \item Einbettung einer DB-Sprache in Programmiersprachen + \begin{itemize*} + \item statische Einbettung: Vorübersetzer-Prinzip $\rightarrow$ SQL-Anweisungen zur Übersetzungszeit festgelegt + \item Beispiele: Embedded SQL, SQLJ + \item dynamische Einbettung $\rightarrow$ Konstruktion von SQL-Anweisungen zur Laufzeit + \end{itemize*} + \item Spracherweiterungen und neue Sprachentwicklungen + \begin{itemize*} + \item Beispiele: SQL/PSM, PL/SQL, Transact-SQL, PL/pgSQL + \end{itemize*} + \item Cursor-Konzept + \begin{itemize*} + \item Cursor: Iterator über Liste von Tupeln (Anfrageergebnis) + \end{itemize*} +\end{itemize*} + +\subsection{JDBC} +\begin{itemize*} + \item Datenbankzugriffsschnittstelle für Java + \item abstrakte, datenbankneutrale Schnittstelle + \item vergleichbar mit ODBC + \item Low-Level-API: direkte Nutzung von SQL + \item Java-Package java.sql + \begin{itemize*} + \item DriverManager: Einstiegspunkt, Laden von Treibern + \item Connection: Datenbankverbindung + \item Statement: Ausführung von Anweisungen über eine Verbindung + \item ResultSet: verwaltet Ergebnisse einer Anfrage, Zugriff auf einzelne Spalten + \end{itemize*} +\end{itemize*} + +%![JDBC Struktur](Assets/Datenbanksysteme_JDBC_Struktur.png) + +%![JDBC Treiber](Assets/Datenbanksysteme_JDBC_Treiberkonzept.png) + +\paragraph{Ablauf} +\begin{enumerate*} + \item Aufbau einer Verbindung zur Datenbank + \begin{itemize*} + \item Angabe der Verbindungsinformationen + \item Auswahl und Laden des Treibers + \end{itemize*} + \item Senden einer SQL-Anweisung + \begin{itemize*} + \item Definition der Anweisung + \item Belegung von Parametern + \end{itemize*} + \item Verarbeiten der Anfrageergebnisse + \begin{itemize*} + \item Navigation über Ergebnisrelation + \item Zugriff auf Spalten + \end{itemize*} +\end{enumerate*} + +\paragraph{Verbindungsaufbau} +1. Treiber laden "Class.forName("com.company.DBDriver");" + +2. Verbindung herstellen +```java +String url = "jdbc:subprotocol:datasource"; +Connection con = DriverManager.getConnection +(url, "scott", "tiger"); +``` + +JDBC-URL spezifiziert +\begin{itemize*} + \item Datenquelle/Datenbank + \item Verbindungsmechanismus (Protokoll, Server und Port) +\end{itemize*} + +\paragraph{Anfrageausführung} +1. Anweisungsobjekt (Statement) erzeugen "Statement stmt = con.createStatement();" + +2. Anweisung ausführen +```java +String query = "select Name, Jahrgang from WEINE"; +ResultSet rSet = stmt.executeQuery(query); +``` + +Klasse java.sql.Statement +\begin{itemize*} + \item Ausführung von Anfragen (SELECT) mit executeQuery + \item Ausführung von Änderungsanweisungen (DELETE, INSERT, UPDATE) mit executeUpdate +\end{itemize*} + +\paragraph{Ergebnisverarbeitung} +1. Navigation über Ergebnismenge (Cursor-Prinzip) +```java +while (rSet.next()) { + // Verarbeitung der einzelnen Tupel + ... + } +``` + +2. Zugriff auf Spaltenwerte über getType-Methoden +\begin{itemize*} + \item über Spaltenindex "String wName = rSet.getString(1);" + \item über Spaltenname "String wName = rSet.getString("Name");" +\end{itemize*} + +\paragraph{Fehlerbehandlung} +\begin{itemize*} + \item Fehlerbehandlung mittels Exception-Mechanismus + \item SQLException für alle SQL- und DBMS-Fehler +\end{itemize*} +```java +try { + // Aufruf von JDBC-Methoden + ... + } catch (SQLException exc) { + System.out.println("SQLException: " + + exc.getMessage()); + } +``` + +\paragraph{Änderungsoperationen} +\begin{itemize*} + \item DDL- und DML-Operationen mittels executeUpdate + \item liefert Anzahl der betroffenen Zeilen (für DML-Operationen) +\end{itemize*} +```java +Statement stmt = con.createStatement(); +int rows = stmt.executeUpdate( +"update WEINE set Preis = Preis * 1.1 " + +"where Jahrgang < 2000"); +``` + +\paragraph{Transaktionssteuerung} +\begin{itemize*} + \item Methoden von Connection + \begin{itemize*} + \item commit () + \item rollback () + \end{itemize*} + \item Auto-Commit-Modus + \begin{itemize*} + \item implizites Commit nach jeder Anweisung + \item Transaktion besteht nur aus einer Anweisung + \item Umschalten mittels setAutoCommit (boolean) + \end{itemize*} +\end{itemize*} + +\subsection{SQLJ} +\paragraph{Embedded SQL für Java} +\begin{itemize*} + \item Einbettung von SQL-Anweisungen in Java-Quelltext + \item Vorübersetzung des erweiterten Quelltextes in echten Java-Code durch Translator sqlj + \item Überprüfung der SQL-Anweisungen + \begin{itemize*} + \item korrekte Syntax + \item Übereinstimmung der Anweisungen mit DB-Schema + \item Typkompatibilität der für Datenaustausch genutzten Variablen + \end{itemize*} + \item Nutzung von JDBC-Treibern +\end{itemize*} +%![SQLJ Prinzip](Assets/Datenbanksysteme_SQLJ_Prinzip.png) + +Anweisungen +\begin{itemize*} + \item Kennzeichnung durch \#sql Deklarationen + \item Klassendefinitionen für Iteratoren + \item SQL-Anweisungen: Anfragen, DML- und DDL-Anweisungen "\#sql { SQL-Operation };" + \item Beispiel: "\#sql { insert into ERZEUGER (Weingut, Region) values ( "Wairau Hills", "Marlborough") };" +\end{itemize*} + +Host-Variablen +\begin{itemize*} + \item Variablen einer Host-Sprache (hier Java), die in SQL-Anweisungen auftreten können + \item Verwendung: Austausch von Daten zwischen Host-Sprache und SQL + \item Kennzeichnung durch ":variable" + \item Beispiel: + ```java + String name; + int weinID = 4711; + \#sql { select Name into :name + from WEINE where WeinID = :weinID }; + System.out.println("Wein = " + name); + ``` + \item Nullwerte: Indikatorvariable "":variable:indvar"" +\end{itemize*} + +\paragraph{Iteratoren} +\begin{enumerate*} + \item Deklaration des Iterators "\#sql public iterator WeinIter(String Name, String Weingut, int Jahrgang);" + \item Definition des Iteratorobjektes "WeinIter iter;" + \item Ausführung der Anweisung "\#sql iter = { select Name, Weingut, Jahrgang from WEINE };" + \item Navigation + ```java + while (iter.next()) { + System.out.println(iter.Name() + " " iter.Weingut()); + } + ``` +\end{enumerate*} + +Dynamic SQL: SQL-Statements als zur Laufzeit konstruierte Strings +```java +exec sql begin declare section; +AnfrageString char(256) varying; +exec sql end declare section; +exec sql declare AnfrageObjekt statement; +AnfrageString = "delete from WEINE where WeinID = 4711"; +... +exec sql prepare AnfrageObjekt from :AnfrageString; +exec sql execute AnfrageObjekt; +``` + +\subsection{LINQ} +Language Integrated Query (LINQ) +\begin{itemize*} + \item Einbettung einer DB-Sprache (SQL) in eine Programmiersprache (C\#) + \item spezielle Klassenmethoden $IEnumerable res = weine.Where(w => w.Farbe == "Rot").Select(w => new { w.Name });$ + \item eigene Sprachkonstrukte (ab C\#) $IEnumerable res = from w in weine where w.Farbe == "Rot" select new { w.Name };$ +\end{itemize*} + +\subsection{Objekt-relationales Mapping} +\begin{itemize*} + \item Einsatz von + \begin{itemize*} + \item relationalen Backends (SQL-DBMS) + \item objektrelationalen Anwendungen, Applikationsservern, Middleware, ... + \end{itemize*} + \item Implementierung von „Geschäftslogik“ in Form von Objekten (Kunde, Bestellung, Vorgang, ...) + \begin{itemize*} + \item z.B. als Java Bean, CORBA-Objekt + \end{itemize*} + \item erfordert: Abbildung Klasse $\leftrightarrow$ Relation + \item Aspekte: + \begin{itemize*} + \item konzeptionelle Abbildung + \item Laufzeitunterstützung + \end{itemize*} + \item Technologien/Produkte: JDO, Hibernate, ADO.NET Entity Framework... +\end{itemize*} + +%![ORM Prinzip](Assets/Datenbanksysteme_ORM_Prinzip.png) + +Klassen und Tabellen +\begin{itemize*} + \item OO: Klasse definiert Eigenschaften von Objekten (Intension) + umfasst Menge aller Objekte (Extension) + \item RM: Relation umfasst alle Tupel, Relationenschema beschreibt Struktur + \item naheliegend: Klasse = Tabelle + \item aber: Normalisierung zerlegt Relationen! + \begin{itemize*} + \item 1 Klasse = 1 Tabelle + \item 1 Klasse = n Tabellen + \item n Klassen = 1 Tabelle + \end{itemize*} + %\item Beispiel %![Klassen und Tabellen Beispiel](Assets/Datenbanksysteme_Tabellenbeispiel.png) +\end{itemize*} + +Beziehungen +\begin{itemize*} + \item eingebetteter Fremdschlüssel in der Relation der Klasse, d.h. der Identifikator des assoziierten Objektes wird als Fremdschlüssel in zusätzlichen Spalten gespeichert + \item Fremdschlüsseltabellen: die Beziehungsinstanz wird als Tupel mit den Schlüsseln der beteiligten Objekte repräsentiert + \item Abbildung der in Beziehung stehenden Klassen auf eine einzelne Tabelle: Verletzung der Normalformen + \item konkrete Abbildung + \begin{itemize*} + \item 1:1-Beziehungen: eingebettete Fremdschlüssel + \item 1:n-Beziehungen: eingebettete Fremdschlüssel oder Fremdschlüsseltabellen + \item Beziehungen mit Attributen: Fremdschlüsseltabellen + \item m:n-Beziehungen: Fremdschlüsseltabellen + \item Drei- und mehrstellige Beziehungen: Fremdschlüsseltabellen + \end{itemize*} + %\item %![Beziehungen](Assets/Datenbanksysteme_Beziehungen.png) +\end{itemize*} + +Hibernate +\begin{itemize*} + \item Java-Framework für objekt-relationales Mapping + \item Idee: Abbildung von Java-Objekten auf Tupel einer relationalen Datenbank + \item Prinzip: Java-Klasse + Abbildungsvorschrift $\rightarrow$ SQL-Tabelle + \item keine expliziten SQL-Anweisungen nötig! + \item Unterstützung der Navigation über Beziehungen (automatisches Nachladen der referenzierten Objekte) + \item Anfragen über eigene Sprache (HQL bzw. QBC/QBE) + \item Deklaration der Abbildung in einer XML-Mapping-Datei + \item Abbildungsvorschrift wird zur Systemlaufzeit interpretiert +\end{itemize*} + +Objekterzeugung +```java +Transaction tx = null; + +Wein wein = new Wein(); +wein.setName("Pinot Noir"); +wein.setFarbe("Rot"); +wein.setJahr(1999); +wein.setWeingut("Helena"); + +try { + tx = session.beginTransaction(); + session.save(wein); + tx.commit(); + } catch (HibernateException exc) { + if (tx != null) tx.rollback(); + } +``` + +Anfragen +\begin{itemize*} + \item Anfragen über Hibernate-eigene Anfragesprache HQL + \item Formulierung auf dem konzeptuellen Schema (Java-Klassen) + \item Select-Klausel nicht benötigt (Ergebnisse sind immer Objekte) + \item Beispiel + ```java + Query query = session.createQuery("from Wein where Farbe = "Rot""); + Iterator iter = query.iterate(); + while (iter.hasNext()) { + Wein wein = (Wein) iter.next(); + ... + } + ``` +\end{itemize*} + +\subsection{Prozedurale SQL-Erweiterungen: SQL/PSM} +\begin{itemize*} + \item SQL-Standard für prozedurale Erweiterungen + \item PSM: Persistent Stored Modules + \begin{itemize*} + \item gespeicherte Module aus Prozeduren und Funktionen + \item Einzelroutinen + \item Einbindung externer Routinen (implementiert in C, Java, ...) + \item syntaktische Konstrukte für Schleifen, Bedingungen etc. + \item Basis für Methodenimplementierung für objektrelationale Konzepte + \end{itemize*} +\end{itemize*} + +Vorteile gespeicherter Prozeduren +\begin{itemize*} + \item bewährtes Strukturierungsmittel + \item Angabe der Funktionen und Prozeduren erfolgt in der Datenbanksprache selbst; daher nur vom DBMS abhängig + \item Optimierung durch DBMS möglich + \item Ausführung der Prozeduren erfolgt vollständig unter Kontrolle des DBMS + \item zentrale Kontrolle der Prozeduren ermöglicht eine redundanzfreie Darstellung relevanter Aspekte der Anwendungsfunktionalität + \item Konzepte und Mechanismen der Rechtevergabe des DBMS können auf Prozeduren erweitert werden + \item Prozeduren können in der Integritätssicherung verwendet werden (etwa als Aktionsteil von Triggern) +\end{itemize*} + +Variablendeklaration +\begin{itemize*} + \item Variablen vor Gebrauch deklarieren + \item Angabe von Bezeichner und Datentyp + \item optional mit Initialwert +\end{itemize*} +```java +declare Preis float; +declare Name varchar(50); +declare Menge int default 0; +``` + +\paragraph{Ablaufkontrolle} +\begin{itemize*} + \item Zuweisung "set var = 42;" + \item Bedingte Verzweigungen + ```java + if Bedingung then Anweisungen + [ else Anweisungen ] end if; + ``` + \item Schleifen + ```java + loop Anweisungen end loop; + while Bedingung do + Anweisungen end while; + repeat Anweisungen + until Bedingung end repeat; + ``` + \item Schleifen mit Cursor + ```java + for SchleifenVariable as CursorName cursor for + CursorDeklaration + do + Anweisungen + end for; + ``` +\end{itemize*} + +Ablaufkontrolle Beispiel: +```java +declare wliste varchar(500) default " "; +declare pos integer default 0; + +for w as WeinCurs cursor for +select Name from WEINE where Weingut = "Helena" +do +if pos > 0 then +set wliste = wliste || "," || w.Name; +else +set wliste = w.Name; +end if; +set pos = pos + 1; +end for; +``` + +\paragraph{Ausnahmebehandlung} +\begin{itemize*} + \item Auslösen einer Ausnahme (Condition) "signal ConditionName;" + \item Deklarieren von Ausnahmen + $declare fehlendes_weingut condition; + declare ungueltige_region + condition for sqlstate value "40123";$ + \item Ausnahmebehandlung + ```java + begin + declare exit handler for ConditionName + begin + - Anweisungen zur Ausnahmebehandlung + end + - Anweisungen, die Ausnahmen auslösen können + end + ``` +\end{itemize*} + +\paragraph{Funktionen} +\begin{itemize*} + \item Funktionsdefinition + ```java + create function geschmack (rz int) + returns varchar(20) + begin + return case + when rz <= 9 then "Trocken" + when rz > 9 and rz <= 18 then "Halbtrocken" + when rz > 18 and rz <= 45 then "Lieblich" + else "Süß" + end + end + ``` + \item Aufruf innerhalb einer Anfrage + ```java + select Name, Weingut, geschmack(Restzucker) from WEINE + where Farbe = "Rot" and geschmack(Restzucker) = "Trocken" + ``` + \item Nutzung außerhalb von Anfragen "set $wein_geschmack$ = geschmack (12);" +\end{itemize*} + +\paragraph{Prozeduren} +Prozedurdefinition +```java +create procedure weinliste (in erz varchar(30), +out wliste varchar(500)) +begin +declare pos integer default 0; +for w as WeinCurs cursor for +select Name from WEINE where Weingut = erz +do xy +end for; +end; end; +``` + +Nutzung über call-Anweisung +```java +declare wliste varchar(500); +call weinliste ("Helena", wliste); +``` + +Zugriffscharakteristik: +Eigenschaften von Prozeduren, die Anfrageausführung und -optimierung beeinflussen +\begin{itemize*} + \item \textbf{deterministic}: Routine liefert für gleiche Parameter gleiche Ergebnisse + \item \textbf{no sql}: Routine enthält keine SQL-Anweisungen + \item \textbf{contains sql}:Routine enthält SQL-Anweisungen (Standard für SQL-Routinen) + \item \textbf{reads sql data}: Routine führt SQL-Anfragen (select-Anweisungen) aus + \item \textbf{modifies sql data}: Routine, die DML-Anweisungen (insert, update, delete) enthält +\end{itemize*} + +\subsection{Zusammenfassung} +\begin{itemize*} + \item Verbindung zwischen SQL und imperativen Sprachen + \item Call-Level-Schnittstelle vs. Embedded SQL + \item objektrelationales Mapping + \item SQL/PSM: imperative Erweiterungen von SQL $\rightarrow$ Implementierung von Funktionen und Prozeduren +\end{itemize*} + + +\end{multicols} +\end{document} \ No newline at end of file diff --git a/Datenbanksysteme.md b/Datenbanksysteme.md index 71623be..0c2e445 100644 --- a/Datenbanksysteme.md +++ b/Datenbanksysteme.md @@ -32,8 +32,6 @@ Datenbank (DB): strukturierter, von DBMS verwalteter Datenbestand Datenbanksystem (DBS) = DBMS + DB - - ## Architekturen die neun Codd'schen Regeln 1. Integration: einheitliche, nichtredundante Datenverwaltung diff --git a/README.md b/README.md index 537b990..6aae8b6 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Unterlagen zu Informatik Vorlesungen der TU Ilmenau - [Computergrafik Cheatsheet](Computergrafik%20-%20Cheatsheet.pdf) (work in progress) - [Datenbanksysteme](Datenbanksysteme.md) - [Fragenkatalog](Datenbanksysteme%20-%20Fragen.md) + - [Cheatsheet](Datenbanksysteme%20-%20Cheatsheet.pdf) (work in progress) - [Einführung in die Medizinische Informatik](Einführung%20in%20die%20Medizinische%20Informatik.md) - [Grundlagen und diskrete Strukturen](Grundlagen%20und%20Diskrete%20Strukturen.md) - [GudS - Cheatsheet](Grundlagen%20und%20Diskrete%20Strukturen%20-%20Cheatsheet.pdf)