Referentielle Integrität erzwingen

ocsme

Top Contributor
Hallo zusammen,

ich hab eine Frage zu SQL Referentielle Integrität mit on Delete set Null und on Update cascade.
Bezieht sich das ganze nur auf die Relation in der dieses Definiert wurde?

Hier mal ein Beispiel:
SQL:
create table Produkt (
    name varchar(20) Primary Key,
    herkunft varchar(120)
);

create table Verkäufer (
    Stand varchar(20),
    Produkt varchar(20),
    Preis numeric (5,2),
    Foreign Key (Produkt) REFERENCES Produkt(name)
    on Delete set Null
    on Update Cascade
);

Sagen wir mal die Tabellen sind so gefühlt:
Produkt
NameHerkunft
N1O1
N2O2
N3O3

Verkäufer:
StandProduktPreis
Stand1N12
Stand1N11
Stand1N23
Stand2N34
Stand3N36
Stand3N14

Nun folgende DML Statements:
SQL:
Delete From Produkt Where Name = 'N1';
Update Produkt set Name = 'N4' where name ='N3';

Wenn man nun ein SQL Abfrage abgibt um Preise zu ermitteln so:
SQL:
select sum(preis) from verkäufer where verkäufer.produkt is null or verkäufer.produkt = 'N3';

Was würde dann raus kommen?

Meines Verständnis würde ich die N1 Spalten in Verkäufe mit NULL füllen das bedeutet diese würden definitiv bei dem SQL Statement aufsummiert werden.
Doch wie ist das mit denn N3 Produkten? Was ja echt ärgerlich wäre, wäre wenn die so in der Datenbank stehen bleiben würden. Das wären ja Referenzen auf nichts mehr oder =D Da N3 in Produkte nicht mehr existiert diese Spalte heißt ja nun N4. Wird also bei Verkäufe das ganze auch umbenannt?

Kann mir das jemand irgendwie erklären?
 

ocsme

Top Contributor
Für den Fremdschlüssel der Spalte "Produkt" in "Verkäufer" wurde ja ein kaskadierendes Update gesetzt. N3 wird also auf N4 geändert.
Danke für die schnelle Antwort :)

Die Seite von oben kenne ich nicht. Hab mir auch überlegt schnell MySQL zu installieren :-D Doch dachte bevor ich mich wieder mehr selbst verwirre frage ich lieber bei Leuten nach die mehr verstehen ;-)

Danke =)
 

Neue Themen


Oben