Referentielle Integrität - Verknüfung Fremdschlüssel mit Primärschlüssel

Es sollen in einer Datenbank Personen und Firmen verwaltet werden. Eine Person arbeitet in einer Firma. In Firmen arbeiten viele Personen:

 

Umsetzung:

Eine Person muss sich die Firma merken. Daher wird der Primärschlüssel einer Firma als Fremsschlüssel in die Tabelle Person übernommen.

create table person(
    personenid int primary key,
    name varchar(50),
    vorname varchar(50),
    geburtsdatum date,
    firmenid int
);


create table firma(
    firmenid int primary key,
    firmenname varchar(50)
);

Ein zusammenhängender Datensatz wäre:

insert into person values (1234,'Mustermann', 'Max', '1980-12-05', 5555);

insert into firma values (5555, 'PowerAG');

Max Mustermann besucht also die Firma PowerAG.

Allerdings ist es möglich den Datensatz der Firma PowerAG zu löschen:

delete from firma where firmenid=5555;

Es existiert aber noch der Datensatz von Max Mustermann in der Tabelle Person, welcher auf den Datensatz 5555 verweist, den es aber nicht mehr in der Tabelle Firma gibt.

Daher wird auf einen nicht existierenden Datensatz verwiesen und die referentielle Integrität ist verletzt.

Das Datenbankmangementsystem überwacht diese Verbindung nicht. Um diese Überwachung "einzuschalten" müssen der Fremdschlüssel mit dem Primärschlüssel verbunden werden.

Dies geschieht über das hinzufüges eines Constraints in die Tabelle Person:

alter table person add CONSTRAINT firmen_check FOREIGN KEY(firmenid) REFERENCES firma(firmenid);

wobei firmen_check ein beliebiger Constraintname ist.

in mysql funktioniert auch:

alter table person add (FOREIGN KEY(firmenid) REFERENCES firma(firmenid));

Anmerkung:

Obige Anweisung funktioniert nur, wenn Sie vorher den oben gelöschten Datensatz wieder einfügen (oder auch den Datensatz in der Tabelle Person löschen). Die Verknüfung kann nicht eingefügt werden, wenn aktuelle Datensätze in den betroffenen Tabellen schon der referientiellen Integrität widersprechen.

Alternativ können Sie den Constraint direkt bei Tabellenerstellung angeben:

create table person(
    personenid int primary key,
    name varchar(50),
    vorname varchar(50),
    geburtsdatum date,
    firmenid int,
    foreign key (firmenid) references firma(firmenid)
);

Die Tabelle Firma muss dafür bereits vorhanden sein.

 

 

 

 

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.