uni:5:dbs
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
uni:5:dbs [2014-01-29 21:12] – [ACID] skrupellos | uni:5:dbs [2020-11-18 18:11] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 90: | Line 90: | ||
===== Transaktionen ===== | ===== Transaktionen ===== | ||
- | ==== ACID ==== | ||
* **Atomicity** | * **Atomicity** | ||
* **Consistency** | * **Consistency** | ||
Line 96: | Line 95: | ||
* **Durability** | * **Durability** | ||
- | ==== Fehler | + | ==== Datensicherheit |
- | === Datensicherheit | + | |
Technische Fehler | Technische Fehler | ||
Line 105: | Line 103: | ||
| Medienfehler | Kaltstart | \\ Backup einspielen | //Globales Redo// \\ Alle abgeschlossenen Transaktionen nachholen | | | Medienfehler | Kaltstart | \\ Backup einspielen | //Globales Redo// \\ Alle abgeschlossenen Transaktionen nachholen | | ||
- | === Integrität === | + | ==== Integrität |
* **Statische Integrität** \\ Einschränkung der Datenbank// | * **Statische Integrität** \\ Einschränkung der Datenbank// | ||
* **Dynamische Integrität** \\ Einschränkung der // | * **Dynamische Integrität** \\ Einschränkung der // | ||
Line 112: | Line 110: | ||
* // | * // | ||
* // | * // | ||
- | === Synchronisation === | + | ==== Synchronisation |
- | == Anomalien == | + | === Anomalien |
- | **Lost update** | + | == Lost update |
^ t1 | r(x) | | w(x) | | ^ t1 | r(x) | | w(x) | | ||
^ t2 | | w(x) | | | ^ t2 | | w(x) | | | ||
- | rww | ||
- | **Dirty read/write** | + | == Dirty read/ |
^ t1 | w(x) | | w(x) | | ^ t1 | w(x) | | w(x) | | ||
^ t2 | | r(x) | | | ^ t2 | | r(x) | | | ||
- | wrw | ||
- | **Non-repeatable read** | + | == Non-repeatable read == |
^ t1 | r(x) | | r(x) | | ^ t1 | r(x) | | r(x) | | ||
^ t2 | | w(x) | | | ^ t2 | | w(x) | | | ||
- | rwr | ||
- | **Phantom-Problem** | + | == Phantom-Problem |
// | // | ||
- | == Serialisierung == | + | === Serialisierung |
- | * **allgemeiner Schedule** \\ Durcheinander | + | ^ allgemeiner Schedule |
- | * **serialisierbarer (allgemeiner) Schedule** \\ Durcheinander kann in Blockform gebracht werden | + | ^ serialisierbarer (allgemeiner) Schedule |
- | * **serieller Schedule** \\ Blockform | + | ^ serieller Schedule |
- | $\frac{(m_1 + m_2 + \dots){\color{red}!}}{(m_1 + m_2 + \dots)}$ | + | 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) | ||
+ | //Kein// rr(x) | ||
+ | |||
+ | Zyklenfrei? => Serialisierbar durch topologisches sorieren | ||
+ | |||
+ | === Technicken === | ||
+ | * Pessimistische Ablaufsteuerung (Locking) | ||
+ | * Optimistische Ablaufsteuerung (Zeitstempelverfahren) \\ Notfalls rollback | ||
===== Anwendung ===== | ===== Anwendung ===== | ||
==== " | ==== " | ||
Line 183: | Line 192: | ||
=== 1. NF === | === 1. NF === | ||
+ | Bedingung | ||
> Alle Attribute //atomar// | > Alle Attribute //atomar// | ||
Line 190: | Line 200: | ||
=== 2. NF === | === 2. NF === | ||
+ | Bedingung | ||
> //Jedes// Attribut entweder | > //Jedes// Attribut entweder | ||
> voll funktional Abhängig von //jedem// Schlüsselkandidaten | > voll funktional Abhängig von //jedem// Schlüsselkandidaten | ||
Line 198: | Line 209: | ||
Sonst: Vom Schlüssel nicht voll funktional Abhängige Attribute werden herausgelöst, | 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 545: | Line 609: | ||
<code sql> | <code sql> | ||
-- Laut script kein START TRANSACTION | -- Laut script kein START TRANSACTION | ||
+ | SET TRANSACTION READ-ONLY | ||
+ | SET TRANSACTION READ-WRITE -- default | ||
SAVEPOINT name | SAVEPOINT name | ||
COMMIT | COMMIT |
uni/5/dbs.1391026378.txt.gz · Last modified: (external edit)