uni:5:dbs
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| uni:5:dbs [2014-01-26 00:37] – created skrupellos | uni:5:dbs [2020-11-18 18:11] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 52: | Line 52: | ||
| * DSL | * DSL | ||
| + | ===== Optimierung ===== | ||
| + | | %%|%% \\ Anfrage (deklarativ) \\ ↓ | | ||
| + | ^ Scanner/ | ||
| + | | %%|%% \\ algebraischer Ausdruck \\ ↓ | | ||
| + | ^ Anfrageoptimierung | ||
| + | | %%|%% \\ Auswertungsplan (prozedural) \\ ↓ | | ||
| + | ^ Ausführung | ||
| + | |||
| + | ==== Kanonischer Auswertungsplan ==== | ||
| + | Query in Funktionsbaum übersetzten | ||
| + | * Kaskadierter Kartesische Produkte (//nur 2 Eingänge// | ||
| + | * Jede '' | ||
| + | |||
| + | Beispiel | ||
| + | <code sql> | ||
| + | SELECT A1, A2 | ||
| + | FROM R1, R2, R3 | ||
| + | WHERE B1, B2 | ||
| + | </ | ||
| + | |||
| + | Ergibt $\pi_{A_1, A_2}(\sigma_{B_1}(\sigma_{B_2}(R_1 \times (R_2 \times R_3))))$ | ||
| + | |||
| + | Optimierung: | ||
| + | |||
| + | ==== Wo kann optimiert werden ==== | ||
| + | * **Logische Anfrageoptimierung** \\ Auswertungsplan umbauen | ||
| + | * **Physische Anfrageoptimierung** | ||
| + | * Join Strategie | ||
| + | * **Nested Loop** \\ Kartesisches Produkt Filtern | ||
| + | * **Sort Merge** \\ Vorher Sortieren, dann mergen | ||
| + | * **Indexed Loop** \\ Tabelle 1 abarbeiten, Tabelle 2 über Index mergen | ||
| + | * Index Verwenden? | ||
| + | |||
| + | ==== Wie kann optimiert werden ==== | ||
| + | * **Regelbasiert** \\ Heuristiken | ||
| + | * **Kostenbasiert** \\ Iterativ Heuristiken ausprobieren und Kostenentwicklung beobachten | ||
| + | |||
| + | ===== Transaktionen ===== | ||
| + | * **Atomicity** | ||
| + | * **Consistency** | ||
| + | * **Isolation** | ||
| + | * **Durability** | ||
| + | |||
| + | ==== Datensicherheit ==== | ||
| + | Technische Fehler | ||
| + | |||
| + | ^ Wann ^ Was ^ Undo ^ Redo ^ | ||
| + | | Transaktionsfehler | Rücksetzen | //Lokales Undo// \\ nicht abgeschlossene Transaktion rückgängig | | | ||
| + | | Systemfehler | Warmstart | //Globales Undo// \\ nicht abgeschlossene Transaktionen rückgängig | //Globales Redo// \\ Alle abgeschlossenen Transaktionen nachholen | | ||
| + | | Medienfehler | Kaltstart | \\ Backup einspielen | //Globales Redo// \\ Alle abgeschlossenen Transaktionen nachholen | | ||
| + | |||
| + | ==== Integrität ==== | ||
| + | * **Statische Integrität** \\ Einschränkung der Datenbank// | ||
| + | * **Dynamische Integrität** \\ Einschränkung der // | ||
| + | * **Modellinhärente Integrität** | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | ==== Synchronisation ==== | ||
| + | === Anomalien === | ||
| + | == Lost update == | ||
| + | ^ t1 | r(x) | | w(x) | | ||
| + | ^ t2 | | w(x) | | | ||
| + | |||
| + | == Dirty read/write == | ||
| + | ^ t1 | w(x) | | w(x) | | ||
| + | ^ t2 | | r(x) | | | ||
| + | |||
| + | == Non-repeatable read == | ||
| + | ^ t1 | r(x) | | r(x) | | ||
| + | ^ t2 | | w(x) | | | ||
| + | |||
| + | == Phantom-Problem == | ||
| + | // | ||
| + | |||
| + | === Serialisierung === | ||
| + | ^ allgemeiner Schedule | Durcheinander | < | ||
| + | ^ serialisierbarer (allgemeiner) Schedule | Durcheinander kann in Blockform gebracht werden | | ||
| + | ^ serieller Schedule | Blockform | < | ||
| + | |||
| + | Graph Zeichen | ||
| + | * Knoten: Transaktionen | ||
| + | * Kanten: Abhängigkeiten | ||
| + | |||
| + | ^ Übergang ^ Markierung ^ | ||
| + | | $w_i(x) \rightarrow r_j(x)$ | wr(x) | | ||
| + | | $r_i(x) \rightarrow w_j(x)$ | rw(x) | | ||
| + | | $w_i(x) \rightarrow w_j(x)$ | ww(x) | | ||
| + | //Kein// rr(x) | ||
| + | |||
| + | Zyklenfrei? => Serialisierbar durch topologisches sorieren | ||
| + | |||
| + | === Technicken === | ||
| + | * Pessimistische Ablaufsteuerung (Locking) | ||
| + | * Optimistische Ablaufsteuerung (Zeitstempelverfahren) \\ Notfalls rollback | ||
| + | ===== Anwendung ===== | ||
| + | ==== " | ||
| + | ^ ^ Thin client | ||
| + | ^ Client | GUI | GUI \\ Logik | GUI \\ Hauptprogramm | ||
| + | ^ Application \\ Server | | | | | Logik | | ||
| + | ^ DB-Server | \\ Logik \\ DB-Schnittstelle \\ DB | \\ \\ DB-Schnittstelle \\ DB | \\ Prozeduren \\ DB-Schnittstelle \\ DB | Webserver \\ Logik \\ DB-Schnittstelle \\ DB | \\ \\ DB-Schnittstelle \\ DB | | ||
| + | |||
| + | ==== Interaktion ==== | ||
| + | * Call-Level-Schnittstelle (library) | ||
| + | * Embedded SQL | ||
| + | |||
| + | ==== Cursor ==== | ||
| + | - **Declaration** \\ SQL eingeben | ||
| + | - **Open** \\ Ausführen | ||
| + | - **Fetch** loop | ||
| + | - **Close** | ||
| + | |||
| + | Vorübersetzes SQL mit Platzhaltern | ||
| ===== Mathe ===== | ===== Mathe ===== | ||
| + | ==== Funktionale Abhängigkeiten ==== | ||
| + | === Arten === | ||
| + | * **Partielle funktionale Abhängigkeit**: | ||
| + | * **Volle funktionale Abhängigkeit**: | ||
| + | |||
| + | === Axiome === | ||
| + | ^ Reflexivität | ${\color{ForestGreen}Y} \subseteq {\color{red}X}$ | $\Longrightarrow$ | ${\color{red}X} \rightarrow {\color{ForestGreen}Y}$ | ||
| + | ^ Verstärkung | ${\color{red}X} \rightarrow {\color{ForestGreen}Y}$ | $\Longrightarrow$ | ${\color{red}X}{\color{RoyalBlue}Z} \rightarrow {\color{ForestGreen}Y}{\color{RoyalBlue}Z}$ | | ||
| + | ^ Transistivität | ${\color{red}X} \rightarrow {\color{ForestGreen}Y} \wedge {\color{ForestGreen}Y} \rightarrow {\color{RoyalBlue}Z}$ | $\Longrightarrow$ | ${\color{red}X} \rightarrow {\color{RoyalBlue}Z}$ | | ||
| + | ^ Vereinigung | ${\color{red}X} \rightarrow {\color{ForestGreen}Y} \wedge {\color{red}X} \rightarrow {\color{RoyalBlue}Z}$ | $\Longrightarrow$ | ${\color{red}X} \rightarrow {\color{ForestGreen}Y}{\color{RoyalBlue}Z}$ | | ||
| + | ^ Dekomposition | ${\color{red}X} \rightarrow {\color{ForestGreen}Y}{\color{RoyalBlue}Z}$ | $\Longrightarrow$ | ${\color{red}X} \rightarrow {\color{ForestGreen}Y} \wedge {\color{red}X} \rightarrow {\color{RoyalBlue}Z}$ | | ||
| + | ^ Pseudotransitivität | ${\color{red}X} \rightarrow {\color{ForestGreen}Y} \wedge {\color{RoyalBlue}Z}{\color{ForestGreen}Y} \rightarrow V$ | $\Longrightarrow$ | ${\color{red}X}{\color{RoyalBlue}Z} \rightarrow V$ | | ||
| + | |||
| + | |||
| + | === Attributhülle === | ||
| + | // | ||
| + | |||
| + | Starte mit //X// und wende so lange F ab, bis nichts mehr geht. (" | ||
| + | |||
| + | ==== Normalisierung ==== | ||
| + | === Anomalien === | ||
| + | * **Update~** \\ Nicht alles wird geupdatet | ||
| + | * **Insert~** \\ Inkonsistentes insert | ||
| + | * **Delete~** \\ Löschen der letzten Verwendung, löscht auch Objekt | ||
| + | |||
| + | === 1. NF === | ||
| + | Bedingung | ||
| + | > Alle Attribute //atomar// | ||
| + | |||
| + | Attributwerte dürfen nicht ... | ||
| + | * Listen sein: {Telefon1, Telefon2, Telefon3, ...} | ||
| + | * Zusammengesetzt sein: (Hausnummer, | ||
| + | |||
| + | === 2. NF === | ||
| + | Bedingung | ||
| + | > //Jedes// Attribut entweder | ||
| + | > voll funktional Abhängig von //jedem// Schlüsselkandidaten | ||
| + | > -- oder -- | ||
| + | > prim (teil eines Schlüsselkandidaten) | ||
| + | |||
| + | Trivial: nur //ein einelementiger// | ||
| + | |||
| + | Sonst: Vom Schlüssel nicht voll funktional Abhängige Attribute werden herausgelöst, | ||
| + | |||
| + | === 3. NF === | ||
| + | Bedingung | ||
| + | <WRAP help 60%> | ||
| + | //Jede// FD $X \rightarrow Y$ ist mindestens eins: | ||
| + | * tivial | ||
| + | * X enthält Schlüsselkandidat | ||
| + | * $\forall a \in (Y-X)$ ist prim | ||
| + | </ | ||
| + | |||
| + | <WRAP info 60%> | ||
| + | Keine (nicht trivialen) FDs unter Nicht-Schlüssel-Attributen | ||
| + | </ | ||
| + | |||
| + | - **Kanonische Überdeckung** | ||
| + | - Linksreduktion | ||
| + | - Rechtsreduktion \\ Komme ich von //X// und //FD ohne y// dennoch auf y in Y, dann streiche y aus Y | ||
| + | - $X \rightarrow \emptyset$ entfernen | ||
| + | - Gleiche X zusammenfassen | ||
| + | - **Relationsschema erzeugen und FDs zuweisen** | ||
| + | - Aus jedem FD erzeuge eine Relation mit X als Primärschlüssel und Y als Attribute | ||
| + | - Ordne jedes FD den Relationen zu, die alle seine " | ||
| + | - **Schlüsselkandidat rekonstruieren** \\ Stelle sicher, dass eine Relation einen ehemaligen Schlüsselkandidaten enthält, notfalls erzeuge eine neue mit leerem ohne zugeordnete FDs | ||
| + | - **Überflüssige Relationen eliminieren** \\ Lösche Relationen, die Teilmenge einer anderen sind. | ||
| + | |||
| + | === Boyce-Codee-Normalform === | ||
| + | Bedingung | ||
| + | <WRAP help 60%> | ||
| + | //Jede// FD $X \rightarrow Y$ ist mindestens eins: | ||
| + | * tivial | ||
| + | * X enthält Schlüsselkandidat | ||
| + | </ | ||
| + | |||
| + | <WRAP info 60%> | ||
| + | Keine (nicht trivialen) FDs unter Schlüssel-Attributen | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | === 4. NF === | ||
| + | Wirkung | ||
| + | > Nicht mehrere Tabellen in einer. | ||
| + | |||
| + | Bedingung | ||
| + | <WRAP help 60%> | ||
| + | //Jede// MVD $X \twoheadrightarrow Y$ ist mindestens eins: | ||
| + | * tivial | ||
| + | * X enthält Schlüsselkandidat | ||
| + | </ | ||
| + | |||
| + | MVD (Multi Valued Dependency): | ||
| + | |||
| + | |||
| ==== Begriffe ==== | ==== Begriffe ==== | ||
| * Domain | * Domain | ||
| Line 69: | Line 278: | ||
| === Eigenschaften === | === Eigenschaften === | ||
| - Eindeutig \\ $t_1 \ne t_2 \Rightarrow \pi_S(t_1) \ne \pi_S(t_1)$ \\ Unterschiedliche Tupel ⇒ Unterschiedliche Schlüssel | - Eindeutig \\ $t_1 \ne t_2 \Rightarrow \pi_S(t_1) \ne \pi_S(t_1)$ \\ Unterschiedliche Tupel ⇒ Unterschiedliche Schlüssel | ||
| - | - Minimal \\ $\text{Eindeutig} T \wedge T \subseteq S \Rightarrow T = S$ \\ Keine Teilmenge des Schlüssels erfüllt die 1. Eigenschaft | + | - Minimal \\ $\text{Eindeutig}(T) \wedge T \subseteq S \Rightarrow T = S$ \\ Keine Teilmenge des Schlüssels erfüllt die 1. Eigenschaft |
| - | (Minimal bedeutet //nicht//: Die wenigsten Attribute | + | (Minimal bedeutet //nicht//: Die wenigsten Attribute) |
| + | Schlüssel und FD sind // | ||
| === Arten === | === Arten === | ||
| - | * Superschlüssel: | + | * Superschlüssel: |
| - | * Schlüsselkandidat: | + | * Schlüsselkandidat: |
| * Primärschlüssel: | * Primärschlüssel: | ||
| + | Primes Attribut: Teil eines Schlüsselkandidaten | ||
| + | === Beweis === | ||
| + | Beispiel: Beweise das //S = (A, B)// Schlüsselkandidat ist. | ||
| + | |||
| + | - **Eindeutigkeit** \\ $S \rightarrow R$ herleiten | ||
| + | - **Minimalität** \\ Zeigen das weder $A \rightarrow R$ noch $B \rightarrow R$ gild | ||
| ==== Relationsschemata ==== | ==== Relationsschemata ==== | ||
| === geordnet === | === geordnet === | ||
| Line 89: | Line 305: | ||
| ===== Relationale Algebra ===== | ===== Relationale Algebra ===== | ||
| ^ Formel | ^ Formel | ||
| - | ^ $A \cup B$ | Vereinigung | + | ^ $A \cup B$ | Vereinigung |
| - | ^ $A - B$ | Differenz | + | ^ $A - B$ | Differenz |
| ^ $A \times B$ | Kreuzprodukt \\ Kartesisches Produkt | | | | | | ^ $A \times B$ | Kreuzprodukt \\ Kartesisches Produkt | | | | | | ||
| ^ $\sigma_F(A)$ | ^ $\sigma_F(A)$ | ||
| ^ $\pi_{a, b, \dots}(A)$ | ^ $\pi_{a, b, \dots}(A)$ | ||
| - | ^ $A \cap B$ | Durchschnitt | X | | '' | + | ^ $A \cap B$ | Durchschnitt | X | | '' |
| ^ $A \div B$ | Quotient | ^ $A \div B$ | Quotient | ||
| ^ $A \bowtie B$ | Natural Join | | ^ $A \bowtie B$ | Natural Join | | ||
| Line 139: | Line 355: | ||
| | Schema(t) = Schema(Städte) \\ {t %%|%% Städte(t) ∧ (∃ u ∈ Länder)(u.Lname = t.Land ∧ u.Partei = CDU) } | $\{x_1 \mid \exists x_2, x_3, y_2 : (\text{Städte}(x_1, | | Schema(t) = Schema(Städte) \\ {t %%|%% Städte(t) ∧ (∃ u ∈ Länder)(u.Lname = t.Land ∧ u.Partei = CDU) } | $\{x_1 \mid \exists x_2, x_3, y_2 : (\text{Städte}(x_1, | ||
| ^ SPD alleinregierte Länder ^^ | ^ SPD alleinregierte Länder ^^ | ||
| - | | Schema(t) = SChema(Länder) \\ {t %%|%% Länder(t) ∧ (∀ u ∈ Länder)(u.LName = t.LName ⇒ u.Partei = SPD} | $\{x_1 \mid \exists x_2 : (\text{Länder}(x_1, | + | | Schema(t) = SChema(Länder) \\ {t %%|%% Länder(t) ∧ (∀ u ∈ Länder)(u.LName = t.LName ⇒ u.Partei = SPD} | $\{x_1 \mid \exists x_2 : (\text{Länder}(x_1, |
| | Schema(t) = SChema(Länder) \\ {t %%|%% Länder(t) ∧ (∀ u ∈ Länder)(u.LName = t.LName ⇒ u.Partei = SPD} | | | | Schema(t) = SChema(Länder) \\ {t %%|%% Länder(t) ∧ (∀ u ∈ Länder)(u.LName = t.LName ⇒ u.Partei = SPD} | | | ||
| + | |||
| + | ===== Speicher Stukturen ===== | ||
| + | Jeder zusätzlich Schlüssel wirkt sich negativ auf updates aus. | ||
| + | |||
| + | * **// | ||
| + | * **// | ||
| + | |||
| + | Seitenarten (für Daten- und Raumorganisierende Strukturen) | ||
| + | * **// | ||
| + | * **// | ||
| + | |||
| + | Schlüsselarten | ||
| + | * Primärschlüsselsuche | ||
| + | * B+-Baum | ||
| + | * Lineares Hashing | ||
| + | * Sekundärschlüsselsuche | ||
| + | * Invertierte Listen | ||
| + | |||
| + | ==== B+ Baum ==== | ||
| + | {{http:// | ||
| + | |||
| + | * //Alle Daten// ausschließlich in den Blättern (Datenseiten) | ||
| + | * Schlüssel (Seperatoren) kommen mehrfach in Directoryseiten vor. | ||
| + | * Mit //rechtem// Bruder ausgleichen | ||
| + | |||
| + | * Ordnung //m// | ||
| + | * Wurzel: //1// ... //2m// Kinder | ||
| + | * Knoten: //m// ... //2m// Kinder | ||
| + | |||
| + | ==== Erweiterbares Hashing (Directory) ==== | ||
| + | {{http:// | ||
| + | |||
| + | * Die Zahlen geben an, wie viele Bits " | ||
| + | * Die Zahl des Diresctorys ist immer größer-gleich der Zahl der Datenseiten, | ||
| + | * Läuft eine Datenseite über => Split + Zahl inkrementieren | ||
| + | |||
| + | ==== Lineares Hashing (Ohne directory) ==== | ||
| + | $\text{Belegungsfaktor} = \frac{\text{Alle Schlüssel}}{\text{Kapazität in \textit{Primär}seite}} > 0.8 \Rightarrow \text{Expansion}$ | ||
| + | |||
| + | ==== Invertierte Listen ==== | ||
| + | * Alle Attribute einzeln indizieren | ||
| + | * einzeln suchen | ||
| + | * Schnittmenge der Ergebnislisten bilden | ||
| + | |||
| + | ==== Reverse pattern matching ==== | ||
| + | * Für '' | ||
| + | |||
| + | ==== Composite Indizes ==== | ||
| + | mehrere Attribute | ||
| + | * Attributwerte werden concatiniert sortiert gespeichert | ||
| + | * Reihenfolge wichtig | ||
| + | |||
| + | ===== E/R-Modell ===== | ||
| + | Elemente: | ||
| + | * Entitie (eckig) | ||
| + | * Relationship (raute) | ||
| + | * Können Attribute haben | ||
| + | * Attribute (oval) | ||
| + | * Primärschlüssel unterstreichen | ||
| + | * (strich) | ||
| + | * Können Rollen haben | ||
| + | * Pfeil = 1-KArdinalität | ||
| + | * Voller Kringel: 1.. / NOT NULL | ||
| + | * Hohler Kringel: 0.. / NULL | ||
| + | * Vererbung (Pyramide) | ||
| + | * Text: " | ||
| + | |||
| + | Umsetzen: | ||
| + | * Vererbung | ||
| + | * Eine gemeinsame Tabelle \\ -- ODER -- | ||
| + | * " | ||
| + | * 1:1 Relation | ||
| + | - Beide Relationen zusamenfassen | ||
| + | - Nur //einer// der alten Primärschlüssel wird der neue Primärschlüssel | ||
| + | |||
| + | |||
| ===== SQL ===== | ===== SQL ===== | ||
| ==== Typen ==== | ==== Typen ==== | ||
| Line 190: | Line 482: | ||
| | ''// | | ''// | ||
| | ''// | | ''// | ||
| + | | ''// | ||
| | ''// | | ''// | ||
| | ''// | | ''// | ||
| Line 240: | Line 533: | ||
| t.a, | t.a, | ||
| 42, | 42, | ||
| - | 32 AS Foo -- Hier AS | + | 32 AS Foo -- Hier AS |
| FROM | FROM | ||
| t, | t, | ||
| - | Unisinn u -- KEIN AS | + | Unisinn u, -- KEIN AS |
| + | (SELECT ...) | ||
| WHERE | WHERE | ||
| </ | </ | ||
| Line 272: | Line 566: | ||
| [WHERE ...] | [WHERE ...] | ||
| </ | </ | ||
| - | | ||
| - | === Mengen Operationen === | ||
| - | == Join == | + | <code sql> |
| + | GRANT | ||
| + | ALL | ||
| + | ALL PRIVILEGES | ||
| + | SELECT | ||
| + | INSERT | ||
| + | DELETE | ||
| + | UPDATE | ||
| + | UPDATE(a, b) | ||
| + | ON | ||
| + | t | ||
| + | TO | ||
| + | TU PUBLIC, | ||
| + | userName | ||
| + | [WIDTH GRANT OPTION] | ||
| + | </ | ||
| + | <code sql> | ||
| + | REVOKE | ||
| + | ALL | ||
| + | ALL PRIVILEGES | ||
| + | SELECT | ||
| + | INSERT | ||
| + | DELETE | ||
| + | UPDATE | ||
| + | UPDATE(a, b) | ||
| + | ON | ||
| + | t | ||
| + | FROM | ||
| + | TU PUBLIC, | ||
| + | userName | ||
| + | [RESTRICT | CASCADE] | ||
| + | -- CASCADE: nehme die rechte auch denjenigen, die sie vom user bekommen haben | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | CREATE INDEX name ON t (a1, a2, ...); | ||
| + | DROP INDEX name; | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | -- Laut script kein START TRANSACTION | ||
| + | SET TRANSACTION READ-ONLY | ||
| + | SET TRANSACTION READ-WRITE -- default | ||
| + | SAVEPOINT name | ||
| + | COMMIT | ||
| + | ROLLBACK | ||
| + | ROLLBACK TO name | ||
| + | </ | ||
| + | ==== Join ==== | ||
| | '' | | '' | ||
| | '' | | '' | ||
| Line 291: | Line 631: | ||
| ^ ::: ^ L ^ R ^ L ^ R ^ | ^ ::: ^ L ^ R ^ L ^ R ^ | ||
| | '' | | '' | ||
| - | | '' | + | | '' |
| - | | '' | + | | '' |
| - | | '' | + | | '' |
| - | == Quantoren == | + | ==== Quantoren |
| <code sql> | <code sql> | ||
| WHERE EXISTS (SELECT ...) -- Ergebnis Form egal | WHERE EXISTS (SELECT ...) -- Ergebnis Form egal | ||
| Line 304: | Line 644: | ||
| </ | </ | ||
| - | == Grouping == | + | ==== Grouping |
| <code sql> | <code sql> | ||
| GROUP BY x | GROUP BY x | ||
| Line 333: | Line 673: | ||
| | '' | | '' | ||
| - | == Order == | + | ==== Order ==== |
| <code sql> | <code sql> | ||
| ORDER BY a [ASC/DESC], b [ASC/DESC], ... | ORDER BY a [ASC/DESC], b [ASC/DESC], ... | ||
| Line 341: | Line 681: | ||
| * '' | * '' | ||
| - | == Weitere | + | ==== Mengenoperatoren ==== |
| //Typ// jedes Attributs muss kompatibel sein | //Typ// jedes Attributs muss kompatibel sein | ||
| * Nur die Position ist maßgebend | * Nur die Position ist maßgebend | ||
| Line 349: | Line 689: | ||
| [Im Gegensatz zur relationalen Algebra, wo //Typ// und //Name// jedes Attributs übereinstimmen muss (Schemata identisch)] | [Im Gegensatz zur relationalen Algebra, wo //Typ// und //Name// jedes Attributs übereinstimmen muss (Schemata identisch)] | ||
| - | | $A \cup B$ | Vereinigung | + | | $A \cup B$ | Vereinigung |
| - | | | Vereinigung | + | | | Vereinigung |
| - | | $A - B$ | Differenz | + | | $A - B$ | Differenz |
| - | | $A \cap B$ | Durchschnitt | '' | + | | $A \cap B$ | Durchschnitt | '' |
| <code sql> | <code sql> | ||
| Line 364: | Line 704: | ||
| * Tip: Explizites '' | * Tip: Explizites '' | ||
| + | ==== View ==== | ||
| + | Nutzen | ||
| + | * Übersicht | ||
| + | * Datenschutz | ||
| - | === Beispiele === | + | === Normaler View === |
| + | <code sql> | ||
| + | CREATE [OR REPLACE] VIEW v AS SELECT ... | ||
| + | DROP VIEW v | ||
| + | </ | ||
| + | |||
| + | Nicht erlaubt in // | ||
| + | * '' | ||
| + | |||
| + | === Materialisierter View === | ||
| + | <code sql> | ||
| + | INSERT INTO mv (SELECT ...) | ||
| + | </ | ||
| + | |||
| + | === Effekt-Konformität === | ||
| + | > Kein merkbarer unterschied zwischen View und Relation | ||
| + | |||
| + | ^ Teil im \\ View ^ Angewendete \\ Operation ^ Problembeschreibung ^ | ||
| + | | '' | ||
| + | | ::: | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | Subquerry | '' | ||
| + | |||
| + | |||
| + | ==== Beispiele | ||
| Finde Paare mit gleicher Eigenschaft | Finde Paare mit gleicher Eigenschaft | ||
| <code sql> | <code sql> | ||
| Line 374: | Line 743: | ||
| AND | AND | ||
| t1.name < t2.name | t1.name < t2.name | ||
| + | |||
| + | |||
uni/5/dbs.1390693024.txt.gz · Last modified: (external edit)
