Dreiecksbeziehung der Daten (A->B->C und A->C)

Tom.S

Fleissiger Benutzer
Beiträge
62
Liebe Mitleser,
mich treibt das folgende Problem um:

Ich habe in meinen Daten oft eine Art Dreiecksstruktur. Ein Beispiel könnte so aussehen:

Thomas -> gehört zu Abteilung 17 -> Abteilung 17 ist Teil von Firma X-Treme
Jan -> ist beschäftigt bei Firma X-Treme

Wo ist das Problem? Ich könnte Thomas per Fremdschlüssel an Abteilung 17 binden und Abteilung 17 wiederum an die Firma. Ich müsste jetzt nicht mehr Thomas mit der Firma verknüpfen, weil sich diese Verbindung über seine Zugehörigkeit zur Abteilung transitiv nachvollziehen lässt.
Jan gehört aber zu keiner Abteilung, ihn müsste ich direkt mit der Firma verknüpfen.

Es fallen mir zwei Lösungen ein:
Lösung 1: Hinzufügen einer Pseudoabteilung "Abteilung -1" und verknüpfen aller Mitarbeiter, die keine Abteilung haben, mit dieser.
Das ist unsauber, weil die Daten nicht mehr die reale Situation abbilden und es per Konvention geregelt werden muss, dass Abteilung -1 anders zu behandeln ist.

Lösung 2: Alle Mitarbeiter werden per Fremdschlüssel an die Firma gebunden. Bei Thomas gibt es dann einen Fremdschlüssel zur Abteilung und zur Firma.
Das ist unsauber, weil hier Daten redundant gespeichert werden müssen.

Beide Möglichkeiten gefallen mir nicht. Die dritte und einzige gute Lösung, die mir einfiele, wäre Lösung 2 zu nehmen und eine Regel einzuführen:
Wenn Person zu Abteilung hinzugefügt wird, trage die zugehörige Firma als Fremdschlüssel der Person hinzu. Allerdings kämen dann noch Regeln für Updates etc. hinzu.
Meine Fragen wären jetzt:
1) Gibt es noch eine andere Möglichkeit?
2) Wie geht man üblicherweise mit diesem Problem um?
3) Wenn die Lösung in Richtung meiner dritten Lösung geht: Wie würde man so etwas realisieren? Über Fremdschlüssel, über Trigger?
 
Werbung:
Bevor ich irgendetwas sagen kann: Wie sind deine Daten denn gespeichert ? Tabellendefinitionen ?
Das hängt von der Lösung ab:

Lösung 1:
Tabelle Mitarbeiter
mab_id / name / abteilung_fk

Tabelle Abteilung
abt_id /bezeichnung / firma_fk

Tabelle Firma
fir_id / name

Lösung 2:
Hier würde die Mitarbeiter-Tabelle wie folgt ergänzt:
Tabelle Mitarbeiter
mab_id / name / abteilung_fk / arbeitet_bei_firma_fk


PS. Das soll als Beispiel dienen. Dass ein Mitarbeiter auch zu zwei Abteilungen gehören kann etc. wird hier nicht beachtet. Auch sind meine realen Daten weit komplexer.
 
Werbung:
Tabelle Person
pers_id / name / abteilung_fk

Tabelle Firma
fir_id / name

Tabelle Abteilung
abt_id / bezeichnung / firma_fk

Tabelle Beschäftigung
fir_id / abt_id / pers_id / besch_zeitraum

So etwas? Wäre eine "Redundanz" die ich in kauf nehmen würde... Der Einfachheit wegen
Man könnte Personen zeitweise in verschiedenen Abteilungen / Standorten einsetzen (Keine Ahnung inwiefern man das bei deinen "komplexen Daten" beachten muss... Wir sehen die ja nicht...)
 
Zurück
Oben