Databases Reference
In-Depth Information
5.15
Änderungen von referenzierten Daten
Tabellen, die von anderen Tabellen referenziert werden, können wir nicht löschen.
Wenn also zwei Tabellen wie in Listing 5.11 miteinander verbunden wurden,
schlägt die Anweisung
drop table personen
fehl. Die referenzierende Tabelle lässt sich selbstverständlich löschen. Datensätze
verhalten sich im Standardfall analog: Wenn wir mit
insert into personen values(0, 'Donald');
insert into personen values(1, 'Mickey');
insert into spielkarten values('Pik', 'Ass', 1);
insert into spielkarten values('Pik', '7', 1)
einige Datensätze einfügen, dann ist die folgende Anweisung erfolgreich:
delete from personen where id = 0
weil es es ja hier keine referenzierenden Datensätze gibt. Dagegen wird die Aus-
führung von
delete from personen where id=1
verweigert, da dieser Datensatz von zwei Datensätzen aus der Tabelle
spielkarten referenziert wird. Zu dieser Regel sind aber auch Alternativen
denkbar:
1.
Wenn im referenzierenden Datensatz der Fremdschlüssel auf null gesetzt
wird, ist es kein Problem mehr, den zu Mickey gehörenden Datensatz zu lö-
schen. Die beiden Spielkarten sind dann eben keinem Spieler zugeordnet.
2.
Wurden für den Fremdschlüssel mit default Standardwerte vereinbart, kön-
nen diese gesetzt werden, wenn der referenzierte Datensatz gelöscht wird.
3.
Wenn der Spieler Mickey gelöscht wird, werden auch die beiden referenzie-
renden Datensätze gelöscht.
In allen drei Fällen ist die referenzielle Integrität und somit die logische Konsis-
tenz der Datenbank gesichert. Mit Hilfe von SQL können wir unsere Tabellen dem
ersten der drei Fälle entsprechend definieren:
create table spielkarten(
farbe varchar(20),
karte varchar(20),
primary key(farbe, karte),
pid int references personen on delete set null
)
Search WWH ::




Custom Search