Databases Reference
In-Depth Information
id int generated always as identity primary key,
reihe int not null references reihe
);
create table band(
id int generated always as identity primary key,
nr int not null,
titel varchar(20) not null,
album int not null references alben
);
Die Elemente werden hier in Form von Tabellen dargestellt. Weil das
name
-
Element im Element
reihen
verbindlich vorgesehen ist, haben wir es als
not
null
markiert. Da es im
name
-Element nur den Text und keine weiteren Elemen-
te gibt, sind wir von der Faustregel abgewichen und haben
name
einfach auf eine
Spalte der Tabelle
reihe
abgebildet. Die Elemente
alben
und
band
setzen wir
mit Tabellen, die Attribute
nr
und
titel
mit Spalten um. Weil wir die Tabelle
band
nicht in die Tabelle
alben
einbetten können, verknüpfen wir beide Tabel-
len mit einer Schlüssel-Fremdschlüssel-Beziehung.
Uns fällt auf, dass die Tabelle
alben
, bis auf etwas Verwaltungsinformation, keine
weiteren Daten enthält. Sie ist daher verzichtbar und kann mit der Tabelle
band
fusioniert werden:
Listing 22.5:
Tabellen für spezielle XML-Dokumente
create table reihe(
id int generated always as identity primary key,
name varchar(20) not null
);
create table alben(
id int generated always as identity primary key,
nr int not null,
titel varchar(20) not null,
reihe int not null references reihe
)
Die Erfahrung zeigt indes, dass jedes noch so komplexe Regelwerk, mit dem wir
ähnlich wie in diesem Beispiel XML-Dokumente auf Tabellen abbilden,
nur eine Annäherung an die XML-Dokumente liefert;
früh an seine Grenzen stößt.
Für einfache, datenzentrierte Dokumente können wir weitgehend äquivalente Ta-
bellen finden. Sobald die Komplexität zunimmt, sind immer wieder Dokumente
möglich, deren Daten nicht ohne Weiteres in Tabellen eingefügt werden können.
In den meisten Fällen können wir für datenzentrierte Dokumente auch auf ein