Folien

Werbung
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Datenbanken
Unit 4: Das Relationale Modell & Datenintegrität
Ronald Ortner
14. III. 2017
Ronald Ortner
Organisatorisches
SQL
Outline
1
Organisatorisches
2
SQL
3
Relationale Algebra – Notation
4
Datenintegrität
Ronald Ortner
Relationale Algebra – Notation
Datenintegrität
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Organisatorisches
Erster Zwischentest:
nächste Woche am 22. März zur Übungszeit
Stoff: alles bisher (ohne Joins)
Zwei Beispiele in 30 – 40 Minuten
Weitere Übungsbeispiele: auf der Lehrveranstaltungsseite
Neue Übungsblätter zum Thema Joins:
zu machen bis 29. März
Wissensüberprüfung über Joins am 29. März
Ronald Ortner
Organisatorisches
SQL-Lesson 4
Heute:
Joins
NULL-Werte
Ronald Ortner
SQL
Relationale Algebra – Notation
Datenintegrität
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Relationale Algebra
Relationale Algebra:
formale Sprache für Anfragen an relationale Datenbank
theoretische Grundlage für SQL
SQL kann typischerweise mehr als in der relationalen Algebra
formulierbar
Wir verwenden zur Vereinfachung ein wenig Notation aus der
relationalen Algebra.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Relationale Algebra – Selektion
Für ein sogenanntes Selektionsprädikat F wählt eine Selektion alle
Tupel (∼
= Zeilen) t einer Relation (∼
= Tabelle) R, die F erfüllen:
σF (R) := {t ∈ R | F (t)}
Das Prädikat (∼
= Eigenschaft) F kann dabei aus folgenden
Komponenten bestehen:
Konstanten
Namen von Attributen der Relation R
Vergleichsoperatoren: <, >, ≤, ≥, =, 6=
Logische Verknüpfungen: ∧ (und), ∨ (oder), ¬ (nicht)
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Relationale Algebra – Selektion
Beispiel:
Zeige alle Länder Europas, die größer als 100000km2 sind.
Konstanten: ‘Europe’, 100000
Namen von Attributen der Relation R: country, region, area
Vergleichsoperatoren: =, >
Logische Verknüpfungen: AND
D.h., Selektion entspricht dem WHERE in SQL-Abfrage.
(Welche Zeilen?)
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Relationale Algebra – Projektion
Selektion wählt Zeilen,
Projektion wählt Spalten:
Für eine Relation R und Attribute A1 , A2 , . . . , An wählt die Projektion
ΠA1 ,A2 ,...,An (R) := (t.A1 , t.A2 , . . . , t.An ) t ∈ R
für jedes Tupel der Relation die entsprechenden Attributwerte aus.
Typischerweise kommt dabei jedes Tupel der Projektion nur einmal vor.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Relationale Algebra – Projektion
Für eine Relation R und Attribute A1 , A2 , . . . , An wählt die Projektion
ΠA1 ,A2 ,...,An (R) := (t.A1 , t.A2 , . . . , t.An ) t ∈ R
für jedes Tupel der Relation die entsprechenden Attributwerte aus.
Typischerweise kommt dabei jedes Tupel der Projektion nur einmal vor.
Beispiele:
Zeige alle Regionen aus cia.
Zeige die in sowe vorkommenden Kombinationen von Monaten und
Jahren.
D.h., Projektion entspricht dem SELECT einer SQL-Abfrage.
(Welche Spalten?)
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Datenintegrität: Konsistenz der gespeicherten Daten.
Bisher implizite Anforderungen an Datenintegrität:
Ronald Ortner
Datenintegrität
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Datenintegrität
Datenintegrität: Konsistenz der gespeicherten Daten.
Bisher implizite Anforderungen an Datenintegrität:
Primärschlüssel:
keine verschiedenen Zeilen mit demselben Primärschlüssel
z.B. keine zwei Studenten mit derselben Matrikelnummer
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Datenintegrität
Datenintegrität: Konsistenz der gespeicherten Daten.
Bisher implizite Anforderungen an Datenintegrität:
Primärschlüssel:
keine verschiedenen Zeilen mit demselben Primärschlüssel
z.B. keine zwei Studenten mit derselben Matrikelnummer
1 : N Relationen:
Für jeden Wert des Primärschlüssels lässt sich nur ein
entsprechender Attributwert speichern.
z.B. hat jedes Land in cia nur eine zugeordnete Region region
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Datenintegrität
Datenintegrität: Konsistenz der gespeicherten Daten.
Bisher implizite Anforderungen an Datenintegrität:
Primärschlüssel:
keine verschiedenen Zeilen mit demselben Primärschlüssel
z.B. keine zwei Studenten mit derselben Matrikelnummer
1 : N Relationen:
Für jeden Wert des Primärschlüssels lässt sich nur ein
entsprechender Attributwert speichern.
z.B. hat jedes Land in cia nur eine zugeordnete Region region
Domänen für Attribute:
bestimmt Datentyp für Attribute
z.B. population in cia muss Integer sein
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Datenintegrität
Zwei Arten von Datenintegrität:
Statische Integrität:
Konsistenz des Datensatzes zu einem bestimmten Zeitpunkt
Dynamische Integrität:
garantiert, dass eine statisch integre Datenbank auch nach
Änderungen statisch integer bleibt
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Referentielle Integrität
Idee:
Ein Wert für einen Fremdschlüssel braucht entsprechenden Wert für
Primärschlüssel.
Zur Erinnerung:
Wird ein Primärschlüssel einer Tabelle als Attribut in anderer Tabelle
verwendet, nennt man letzteren einen Fremdschlüssel.
Beispiel:
In den Tabellen Orders und Order_Options der ldb-Datenbank ist
P_No ein Fremdschlüssel: Dieses Attribut bezieht sich auf den
Primärschlüssel P_No der Tabelle Parts.
→ Für jeden Wert von P_No in Orders und Order_Options
muss es entsprechende P_No in Parts geben.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Referentielle Integrität
Idee:
Ein Wert für einen Fremdschlüssel braucht entsprechenden Wert für
Primärschlüssel.
Zur Erinnerung:
Wird ein Primärschlüssel einer Tabelle als Attribut in anderer Tabelle
verwendet, nennt man letzteren einen Fremdschlüssel.
Beispiel:
director in der movie Datenbank ist ein Fremdschlüssel:
director bezieht sich auf den Primärschlüssel id in der Tabelle
actor.
→ Für jeden Wert von director muss es entsprechende id in
actor geben.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Referentielle Integrität: Formale Definition
Definition (Fremdschlüssel, referentielle Integrität)
Seien R und R 0 zwei Relationen (Tabellen), κ der Primärschlüssel in R
und α ein entsprechender Fremdschlüssel in R 0 . Dann muss für alle
Tupel (Zeilen) r 0 in R 0 gelten:
1
2
Entweder r 0 .α enthält lauter NULL-Werte oder nur Werte 6= NULL.
Wenn r 0 .α keine NULL-Werte enthält, dann gibt es ein r in R,
sodass
r 0 .α = r .κ.
Dies wird als referentielle Integrität bezeichnet.
Beispiel: Jede P_No in Orders ist entweder NULL oder entspricht
einer P_No in Parts.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Referentielle Integrität: “Dangling References”
Weiteres Beispiel: Jeder Wert für director in movie ist entweder
NULL oder entspricht einer id in actor.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Referentielle Integrität: “Dangling References”
Weiteres Beispiel: Jeder Wert für director in movie ist entweder
NULL oder entspricht einer id in actor.
Fügen wir einen neuen Film in die Tabelle movie
?id
title
votes
score
12345
Databaseland
1
2.3
director
0
mit einem Wert für director (0), der nicht als id in actor vorkommt,
so wird die referentielle Integrität der Datenbank verletzt.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Referentielle Integrität: “Dangling References”
Weiteres Beispiel: Jeder Wert für director in movie ist entweder
NULL oder entspricht einer id in actor.
Fügen wir einen neuen Film in die Tabelle movie
?id
title
votes
score
12345
Databaseland
1
2.3
director
0
mit einem Wert für director (0), der nicht als id in actor vorkommt,
so wird die referentielle Integrität der Datenbank verletzt.
Der entsprechende Eintrag für director ist eine sogenannte
“Dangling Reference”.
→ Bei Änderungen in einer Datenbank müssen solche Einträge
vermieden werden! (dynamische Integrität)
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Erhaltung der referentiellen Integrität
Definition (Fremdschlüssel, referentielle Integrität)
Seien R und R 0 zwei Relationen, κ der Primärschlüssel in R und α ein
entsprechender Fremdschlüssel in R 0 . Dann muss für alle Tupel r 0 in
R 0 gelten:
1
2
Entweder r 0 .α enthält lauter NULL-Werte oder nur Werte 6= NULL.
Wenn r 0 .α keine NULL-Werte enthält, dann gibt es ein r in R,
sodass
r 0 .α = r .κ.
Dies wird als referentielle Integrität bezeichnet.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Erhaltung der referentiellen Integrität
Gemäß der Definition muss gelten:
Πα (R 0 ) ⊆ Πκ (R),
wobei Πα (R 0 ) alle α-Werte in R 0 sind und Πκ (R) alle κ-Werte in R.
→ Erlaubte Änderungen in Datenbank:
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Erhaltung der referentiellen Integrität
Gemäß der Definition muss gelten:
Πα (R 0 ) ⊆ Πκ (R),
wobei Πα (R 0 ) alle α-Werte in R 0 sind und Πκ (R) alle κ-Werte in R.
→ Erlaubte Änderungen in Datenbank:
1
Hinzufügen von r 0 in R 0 wenn r 0 (α) in Πκ (R):
z.B. einen neuen Film hinzufügen, dessen director in actor
bereits vorkommt
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Erhaltung der referentiellen Integrität
Gemäß der Definition muss gelten:
Πα (R 0 ) ⊆ Πκ (R),
wobei Πα (R 0 ) alle α-Werte in R 0 sind und Πκ (R) alle κ-Werte in R.
→ Erlaubte Änderungen in Datenbank:
1
Hinzufügen von r 0 in R 0 wenn r 0 (α) in Πκ (R):
z.B. einen neuen Film hinzufügen, dessen director in actor
bereits vorkommt
2
Ändern eines Wertes r 0 .α von w auf w 0 mit w 0 in Πκ (R):
z.B. Ändern des director eines Films auf einen in actor
vorkommenden Wert
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Erhaltung der referentiellen Integrität
Gemäß der Definition muss gelten:
Πα (R 0 ) ⊆ Πκ (R),
wobei Πα (R 0 ) alle α-Werte in R 0 sind und Πκ (R) alle κ-Werte in R.
→ Erlaubte Änderungen in Datenbank:
1
Hinzufügen von r 0 in R 0 wenn r 0 (α) in Πκ (R):
z.B. einen neuen Film hinzufügen, dessen director in actor
bereits vorkommt
2
Ändern eines Wertes r 0 .α von w auf w 0 mit w 0 in Πκ (R):
z.B. Ändern des director eines Films auf einen in actor
vorkommenden Wert
3
Ändern oder Löschen von r .κ in R wenn σα=r .κ (R 0 ) = ∅:
z.B. Ändern oder Löschen einer id in actor,
wenn es keine Filme in movie mit dieser id als director gibt
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
2
Setze Werte im Fremdschlüssel auf NULL:
Beispiel: Wenn ein director in actor gelöscht oder seine id
verändert wird, dann setze den Wert von director in movie auf
NULL.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
2
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
Setze Werte im Fremdschlüssel auf NULL.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
2
3
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
Setze Werte im Fremdschlüssel auf NULL.
Kaskadieren:
Beispiele:
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
2
3
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
Setze Werte im Fremdschlüssel auf NULL.
Kaskadieren:
Beispiele:
Wenn id in actor verändert wird
→ verändere entsprechende Werte von director in movie.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
2
3
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
Setze Werte im Fremdschlüssel auf NULL.
Kaskadieren:
Beispiele:
Wenn id in actor verändert wird
→ verändere entsprechende Werte von director in movie.
Wenn id in actor gelöscht wird
→ lösche alle entsprechenden Filme in movie.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
2
3
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig.
Setze Werte im Fremdschlüssel auf NULL.
Kaskadieren:
Beispiele:
Wenn id in actor verändert wird
→ verändere entsprechende Werte von director in movie.
Wenn id in actor gelöscht wird
→ lösche alle entsprechenden Filme in movie.
NB:
Kaskadieren kann riskant sein, da z.B. ein Löschvorgang mehrere
automatische Operationen auslösen kann!
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig
2
Setze Werte im Fremdschlüssel auf NULL.
3
Kaskadieren
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig
2
Setze Werte im Fremdschlüssel auf NULL.
3
Kaskadieren
4
Verwende Trigger :
d.h., lasse bestimmte Prozeduren ablaufen, wenn es Änderung in
Datenbank gibt.
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Wenn referentielle Integrität verletzt wird
Was kann man im Falle einer Verletzung der referentiellen Integrität
(verursacht durch eine Änderung in der Datenbank) machen?
1
Erlaube entsprechende Operation nicht / mache sie wieder
rückgängig
2
Setze Werte im Fremdschlüssel auf NULL.
3
Kaskadieren
4
Verwende Trigger :
d.h., lasse bestimmte Prozeduren ablaufen, wenn es Änderung in
Datenbank gibt.
NB:
Wie Kaskadieren beinhaltet auch das Verwenden von Triggern u.U.
bestimmte Risiken!
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
Komplexere Integritätsbedingungen
Referentielle Integrität ist eine einfache Form von Bedingungen an
die Datenintegrität.
Komplexere Integritätsbedingungen sind möglich.
Beispiel:
Erlaube nur jenen Studierenden eine Prüfungsanmeldung, die
auch zur Lehrveranstaltung angemeldet waren und/oder
bestimmte andere Fächer bereits positiv abgeschlossen haben.
über Trigger oder Applikation in höherer Programmiersprache
behandeln
Ronald Ortner
Organisatorisches
SQL
Relationale Algebra – Notation
Datenintegrität
SQL and Datenintegrität
In Abhängigkeit von der SQL Implementierung gibt es in SQL die
Möglichkeit,
√
Primär- und Fremdschlüssel in Tabellen festzulegen (MySQL )
die statische Datenintegrität zu überprüfen (MySQL×)
√
Kaskadieren zu benutzen (MySQL )
√
Trigger zu definieren (MySQL )
Ronald Ortner
Herunterladen