Zusammengesetzter Fremdschlüssel
ich habe eine tabelle mitarbeiter mit einem zusammengesetzten primärschlüssel: create table mitarbeiter(... primary key(mitarbeiterid, projektid)), jetzt will ich eine Tabelle Proj.MA machen mit dem Primary Key als Foreign Key. Wie geht das?
2 Antworten
Um welches Datenbanksystem geht es?
(Und warum verwendest du diesen zusammengesetzten Schlüssel? Der "richtige" Primärschlüssel für eine Tabelle "Mitarbeiter" ist doch "Personalnummer" oder "MitarbeiterID" - die ProjektID könnte man höchstens in eine Tabelle aufnehmen, die die Mitarbeiter den Projekten zuordnet.)
Gruß Ragnar
Grundsätzlich geht das und es gibt auch sinnvolle Anwendung dafür. Ob es hier sinnvoll ist oder nicht, ist was anderes.
Ich habe eine Anwendung mit etwas über 50 Tabellen. Da kommt das ein paarmal vor, z.B. bei Bankleitzahlen und Länderkennzeichen. Wenn man auch ausländische Bankverbindungen hat, ist die Bankleitzahl alleine nicht mehr eindeutig. Es ist kein Problem, mit zusammengesetzten Fremdschlüsseln zu arbeiten. Funktioniert im Prinzip genauso.
Die Beziehung "Mitarbeiter" - "Projekt" wird ja i.d.R. eine 1:n-Beziehung sein. Schließlich wird ein Mitarbeiter im Normalfall an mehreren Projekten arbeiten - zumindest nacheinander.
Ich würde das so lösen:
Tabelle "Mitarbeiter": Personalnummer als Schlüssel.
Tabelle "Projekte": Projekt-ID als Schlüssel.
Tabelle "Projektarbeit": Personalnummer und Projekt-ID als (zusammengesetzten) Fremdschlüssel
Das kann man so machen, ein zusammengesetzter Fremdschlüssel ist aber etwas anderes. Das hier sind zwei voneinander unabhängige aber einfache Fremdschlüssel. Wenn man mehrere Fremdschlüssel (für unterschiedliche Tabellen wie hier) definiert, sind das deswegen keine zusammengesetzten Fremdschlüssel. Das trifft nur zu, wenn der Primärschlüssel, auf den sich der Fremdschlüssel bezieht, ein zusammengesetzter Schlüssel ist. Das ist hier nicht der Fall.
habe die tabelle nun geändert und mitarbeiter_id als einzigen primärschlüssel genommen und es geht.