Aufgabe 3-1 Schlüssel und Fremdschlüssel
Aufgabe 3-1 Schlüssel und Fremdschlüssel
Ein Fremdschlüssel ist ein Attribute oder eine Attributkombination einer Relation, welches auf einen Primärschlüssel (bzw. Schlüsselkandidat) einer anderen oder der gleichen Relation verweist.
Eine relationale Datenbank enthält alle Informationen über bereits gesehenen Serien einer Streamingplattform und die darin vorkommenden Rollen:
Series
SID | Sender | Serienname |
---|---|---|
47 | HBO | Game of Thrones |
59 | CBS | The Big Bang Theory |
Rolle
RID | Vorname | Nachname | SID |
---|---|---|---|
13 | Jon | Snow | 47 |
19 | Tyrion | Lannister | 47 |
24 | Sheldon | Cooper | 59 |
33 | Rick | Grimes | null |
Die Attribute Serie.SID
und Rolle.RID
stellen die Primärschlüssel der beiden Relationen dar. Das Schema enthält außerdem folgende Fremdschlüsselbeziehung zwischen Rollen und Series:
Rolle.SID → Series.SID
a) Wie reagiert ein Datenbanksystem wenn Primärschlüssel definiert wurden?
- Das Datenbanksystem achtet darauf das jeder Primärschlüssel einzigartig ist
- verhindert das einfügen von Duplikaten
b) Warum fordert man, dass Schlüssel minimal sein sollen? (Minimale Schlüssel)
- Effizientere Überprüfbarkeit von Schlüssel-/ Fremdschlüsselbedingungen
- Beispiel:
```Stellen Sie sich eine Tabelle vor, die Studenteninformationen an einer Universität speichert. Die Tabelle könnte folgende Spalten haben:
StudentenID
,Name
,Alter
,Studiengang
undE-Mail-Adresse
.
- Beispiel:
```Stellen Sie sich eine Tabelle vor, die Studenteninformationen an einer Universität speichert. Die Tabelle könnte folgende Spalten haben:
In diesem Fall könnte die StudentenID
ein minimaler Schlüssel sein, da jede StudentenID
einzigartig ist und jeden Studenten eindeutig identifiziert. Kein anderes Attribute kann aus diesem Schlüssel entfernt werden, ohne seine Eindeutigkeit zu verlieren.
Hier ist ein einfaches Beispiel:
StudentenID | Name | Alter | Studiengang | E-Mail-Adresse |
---|---|---|---|---|
12345 | Max Mustermann | 21 | Informatik | max@uni.de |
67890 | Erika Muster | 22 | Physik | erika@uni.de |
In dieser Tabelle ist StudentenID der minimale Schlüssel.``` |
c) Was versteht man under referenzieller Integrität?
- Bedingungen zur Sicherung der Datenintegrität bei Nutzung relationaler Datenbanken
- Ein Datensatz mit Fremdschlüssel kann nur dann eingefügt werden, wenn in der referenzierter Tabelle ein Datensatz mit den entsprechenden Werten also Primärschlüssel oder einem eindeutigen Alternativschlüssel existiert. (nur erstellbar falls reference existiert)
- Datensatzlöschung oder Änderung ist nur möglich falls zu diesem Datensatz keine abhängigen Datensätze in Beziehung stehen (nur bearbeitbar falls keine abhängigen Daten in Beziehung) No dangeling references
d) Gehen Sie davon aus, dass sich nur die oben gezeigten Eintrage in der Datenbank befinden. Welche der Einfügeoperationen wird das Datenbanksystem erfolgreich verarbeiten können? Bitte begründen Sie Ihre Antwort kurz.
Gehe davon aus, dass sich nur die oben gezeigten Einträge in der Datenbank befinden. Welche der Einfügeoperationen wird das Datenbanksystem erfolgreich verarbeiten können? Bitte begründe define Antwort kurz.
- Einfügen von (12, ‘Harvey’, ‘Specter’, 41) in Rolle → referenzierte SID existiert nicht
- Einfügen von (47, ‘FOX’, ‘Suits’) in Series → SID existiert bereits also nicht korrekt
- Einfügen von (42, ‘Leonard’, ‘Hofstadter’, 59) in Rolle → Passt alles
Aufgabe 3-2 SQL-DDL Data Definition Language (DDL)
Es ist die Datenbank eines Softwareunternehmens gegeben, welches spezielle Anwendungen für unterschiedliche Kunden entwickelt. Die Datenbank beinhaltet die Relationen Kunde K, Team T und Leistung L. Zusätzlich existiert die Relation KTL, welche die Aufträge beinhaltet und so die Beziehungen der vorgenannten Relationen modelliert.
Relationen
-
Kunde (K):
- K (KNr, KName, Ansprechpartner)
-
Team (T):
- T (TNr, TLeiter, TGröße, Stundensatz)
-
Leistung (L):
- L (LNr, Bezeichnung, Komplexität)
-
Kundenteamleistung (KTL):
- KTL (KNr, TNr, LNr, Volumen, Datum)
Attribute und Beschränkungen
- Die Schlüssel der jeweiligen Relationen sind integer Werte.
- TGröße ist eine positive ganze Zahl.
- Komplexität ist eine ganze Zahl kleiner oder gleich 10.
- Stundensatz ist eine Festkommazahl mit insgesamt 5 Stellen, davon 2 Nachkommastellen.
- Volumen ist eine mit maximaler Länge von 50 Zeichen.
- Alle übrigen Attribute sind variable Strings.
- Die Attribute KName, TLeiter und Bezeichnung müssen immer einen Wert enthalten.
a) Geben sie mit CREATE TABLE
Befehle mit den dafür notwendigen Constraints zur Definition des o.g. Datenbankschemas an. Data Definition Language (DDL)
- Kunde
- Team
- Leistung
- KTL
b) Fügen Sie in die Kunden-Relation “K” eine weitere Spalte “Branche” also variable Text der Länge 30 mit dem Default-Wert ‘Automobil’ ein
c) Löschen Sie die Spalte Teamgröße aus der Team-Relation T.
d) Ändern Sie den Datentyp des Attributes Volumen
aus der Relation KTL
in eine ganze Zahl, die größer also 0 ist.
FALSCH: X
RICHTIG: V
→ Die erste, also falsch markierte SQL-Anweisung hat ein paar Problem, die sie in den meisten SQL-Dialekten ungültig machen würden:
- In vielen SQL-Dialekten, darunter MySQL, ist die Syntax
MODIFY(Volumen INTEGER CHECK(Volumen > 0))
nicht korrekt. DasCHECK
-Constraint wird typischerweise nicht innerhalb derMODIFY
-Anweisung definiert. - In manchen SQL-Systemen, wie zum Beispiel SQLite, ist die direkte Einbettung des
CHECK
-Constraints in einerALTER TABLE … MODIFY COLUMN
-Anweisung nicht erlaubt.
Die zweite, also richtig markierte SQL-Anweisung umgeht diese Problem:
ALTER TABLE KTL MODIFY (Volumen INTEGER)
– Diese Anweisung ist syntaktisch korrekt. Sie ändert den Datentyp der SpalteVolumen
aufINTEGER
, ohne irgendwelche Constraints anzugeben.ALTER TABLE KTL ADD CONSTRAINT volumen_constraint CHECK (Volumen > 0)
– Diese separate Anweisung fügt dasCHECK
-Constraint korrekt hinzu. Hierbei wird dasCHECK
-Constraint also eigenerCONSTRAINT
definiert, was in den meisten SQL-Datenbanksystemen der richtige Weg ist.
Zusammenfassend ist das “richtige” Statement korrekt, weil es die Syntax-Regeln befolgt, die von den meisten SQL-Datenbanksystemen erwartet werden.
e) Nun sollen Sie alle Tabellen wieder loschen ohne die referenzielle Integrität zu verletzen.
Also nächstes: DBS-Blatt 4