SQL Best Practice n:m Beziehung mit mehreren Tabellen

Umbel

Lt. Commander
Registriert
Jan. 2009
Beiträge
1.571
Bastel gerade an einer kleinen Datenbank und stehe nun vor der Frage wie realisiert man am besten eine n:m Beziehung mit mehreren Tabellen

n_m_relation.png

Beispiel:
Ich habe 3 Tabellen die eine bestimmte Eigenschaft aus einer anderen Tabelle holen sollen, z.B. ein Bild.
Ich habe also meine 3 Item-Tabellen und 1 Bild-Tabelle. Für die n:m würde ich jetzt eine Vernküpfungstabelle erstellen. Das Bild zeigt 3 Item-Tabellen und 3 Bild-Tabellen, das ist aber sehr unpraktisch. Wie wäre das beste Vorgehen die Bild-Tabellen bei einer zu belassen?
Meine aktuelle Idee wäre die Hilfstabelle nicht mit einem echten Foreign-Key-Constraint zu den Item-Tabellen zu verknüpfen sondern einfach eine Spalte wo die id gespeichert wird, eine Spalte die angibt zu welcher Tabelle verknüpft wird und eine Fremdschlüssel-Spalte zur Bild-Tabelle.

Freu mich auf Ideen ...
 
Wenn deine Item-Tabellen grundlegend verschieden sind, brauchst du natürlich 3 Item-Tabellen.

Bei den Bildern, wird es sich ja prinzipiell immer um dieselben Datensätze handeln. Also nimmst du dafür eine Tabelle.

Für den JOIN Table hat du mehrere Möglichkeiten:
1. 3 JOIN Tables, jeweils von ItemX -> Image
2. 1 JOIN Table mit 4 Spalten (Item1_id, Item2_id, Item3_id, Image_id), dann bleiben natürlich immer 2 Spalten NULL
3. 1 JOIN Table mit 3 Spalten (ItemTableName, Item_id, Image_id)

Variante 1 ist in Bezug auf Datenintegrität und Normalisierung zu bevorzugen. Außerdem lassen sich Cascades ausführen.
Ansonsten wäre Variante 3 noch in Ordnung.
Variante 2 würde ich nicht wählen, da das eigentlich eine Verknüpfung von mehreren ItemTypen mit einem Image darstellt.
 
Ok also entweder die Variante aus meinem Bild, oder aus meinem Vorschlag. Dann lag ich ja schonmal nicht soweit entfernt.
 
Nein, in deinem Bild hast du 3 Image Tables, einer reicht.
 
In der Tat. Ok dann werd ich es mit 3 Join-Tabellen probieren. Danke dir.
 
Je nachdem was du insgesamt mit deinem Tool vorhast, könnte vielleicht auch Neo4j eine interessante Alternative darstellen.
Das ist eine Graph-Datenbank, es lassen sich also prinzipiell alle angelegten Datensätzen mit allen anderen beliebig verknüpfen.
Aber es kommt wirklich drauf an, was am Ende gefordert ist.
 
Danke für die Idee. Aber eine normale Relationale Datenbank sollte vollkommen ausreichen. Neo4J werde ich aber mal im Auge behalten.
 
Zurück
Oben