Databases Reference
In-Depth Information
autor int unique references autoren
und für Alben ohne Autor das Attribut
id
einfach auf
null
setzen. Doch spielt
uns SQL hier einen Streich, da es in Einklang mit dem Standard auch Dialekte gibt,
in denen jede
unique
-Constraint auch eine
not null
-Constraint erfordert (siehe
Abschnitt 5.14). Wenn wir diesen Eigenschaften Rechnung tragen müssen, dann
finden wir keine Lösung, die mit zwei Tabellen auskommt. In Abschnitt 7.4 haben
wir gelernt, dass wir jede binäre Beziehung durch zwei binäre Beziehungen und
einen zusätzlichen Entitätstyp zur Verwaltung der Beziehung ersetzen können.
Diesen Trick wenden wir hier an. Wir belassen die Tabellen
autoren
und
alben
so einfach wie in Listing 7.2 und fügen eine dritte Tabelle hinzu:
Listing 7.6:
Beispiel einer C-C-Beziehung
create table albenautoren(
album int not null unique references alben,
autor int not null unique references autoren,
primary key(album, autor)
)
Die Tabelle besteht nur aus Spalten, die den Primärschlüsseln der Tabellen
autoren
und
alben
entsprechen. Jede der beiden Spalten der neuen Tabelle re-
ferenziert jeweils eine dieser beiden Tabellen. Wenn es eine Beziehung zwischen
einem Datensatz aus
autoren
und einem aus
alben
gibt, wird darüber in der
Tabelle
albenautoren
Buch geführt. Die beiden Tabellen stehen so nicht mehr
direkt, sondern nur indirekt über
albenautoren
zueinander in Beziehung.
Autoren
Alben
Autoren
AlbenAutoren
Alben
Abbildung 7.10:
Auflösung einer C-C-Beziehung
Durch die beiden
unique
-Constraints gewährleisten wir, dass jeder Autor und je-
des Album nur maximal einmal in
albumautoren
auftritt und somit auch wirk-
lich eine C-C-Beziehung realisiert ist. Wie in Abbildung 7.10 dargestellt, haben wir
die C-C-Beziehung in zwei 1-C-Beziehungen zerlegt.