Froreign Key aus eigener Tabelle

PhilippGer

Mitglied
Hallo.
Ich komme bei folgender Sache nicht weiter:

Ich möchte, dass sich ein Spaltenwert mittels Foreign Key auf den Primärschlüssel der selben Tabelle bezieht.

Sagen wir z.B. eine Tabelle mit allen Angestellten einer Firma und ich möchte zu jedem Angestellten den Vorgesetzten (als Referenz auf eine andere Zeile der Tabelle) speichern.

Wenn ich diese Beziehungen in eine eigene Tabelle auslagere, funktioniert alles super, aber es sollte doch auch mit einer gehen?

Code mit einer Tabelle (funktioniert nicht):
Code:
CREATE TABLE `Angestellte` (
`id` INT UNSIGNED NOT NULL ,
`chef` INT UNSIGNED NOT NULL ,
FOREIGN KEY(chef) REFERENCES Angestellte(id) ON DELETE CASCADE,
PRIMARY KEY ( `id` ) 
);

Code mit 2 Tabellen (funktioniert):
Code:
Create Table Angestellte( id int unsigned not null primary key)

CREATE TABLE anstellungen(
mitarbeiter int unsigned not null,
chef int unsigned not null,
FOREIGN KEY(mitarbeiter) REFERENCES Angestellte(id) ON DELETE CASCADE,
FOREIGN KEY(chef) REFERENCES Angestellte(id) ON DELETE CASCADE,
Primary Key( mitarbeiter, chef))

Funktioniert soein Constraint nicht in der eigenen Tabelle?
 
Hallo PhilippGer,

ich glaube es hapert bei dir nur an einer Kleinigkeit:

`chef` INT UNSIGNED NOT NULL

Versuche einmal Folgendes:

Code:
CREATE TABLE IF NOT EXISTS `angestellte` (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`chef` int( 11 ) DEFAULT NULL ,
`name` varchar( 30 ) NOT NULL ,
FOREIGN KEY ( chef ) REFERENCES angestellte( id ) ON DELETE SET NULL ,
PRIMARY KEY ( `id` )
)

Du hast deinem Chef ein NOT NULL mitgegeben und beim Update soll er hier gerade NULL einsetzen, das per Definition vorher ausgeschlossen ist.

Ich hoffe das hilft!

Mit freundlichem Gruß aus Iserlohn,
Sebastian
 
Moin!
Danke für den Hinweis.

Hatte das aber kurz anch dem Posten selber gesehen und "SET NULL" durch "CASCADE" ersetzt. Geht genau so wenig ;-)
 
Zurück