Tabelle zeigt auf mehrere andere Tabellen

wolfgangpue

Neuer Benutzer
Beiträge
4
Problemstellung:

Ich habe eine Datenbank wo ich zu verschiedene Tabellen(Produkte, Kontakte, usw.) Kommentare abspeichern will. Zum Beispiel kann ein Produkt mehrere Kommentare haben.

Ich denke mir nun, zu jeder Tabelle eine eigene Kommentartabelle zu erstellen kann auch nicht sinnvoll sein. Dann würde ich ca. 8 Tabellen erstellen, die eigentlich den gleichen Inhalt haben nur dass sie auf verschiedene Tabellen verweisen zu denen sie zugeordnet sind. Der Fremdschlüssel wäre in diesem Fall leicht zu setzen.

Was gibt es noch für Möglichkeiten dies zu realisieren?

Könnte ich nur eine Tabelle "Kommentare" erstellen, welche einen zusätzlichen Eintrag hat zu welcher Tabelle sie gehört.

z.B

Kommentare
-------------------
ID
Referenz_ID
Referenz_Tabelle (Produkte, Kontakte, usw...)

Dann würde ID der Primarykey sein. Aber was ist mit Referenz_ID, in diesem Feld ist entweder eine ID vom Kontakt, vom Produkt, usw enthalten und erst durch die Referenz_Tabelle weiß ich wo genau das Kommentar dazugehört. Zum Implementieren würde das auch gehen, aber was ist mit den Integritätsbedingungen im Bezug auf den Fremdschlüsseln. Also wenn das Produkt gelöscht wird auch automatisch alle Kommentare mitgelöscht werden.

lg Wolfgang


Update:

Würde das vielleicht eine gute Lösung sein:


Tabelle Kommentare:

ID Primary Key
Produkt_ID Foreign Key
Kontakt_ID Foreign Key
Benutzer_ID Foreign Key
...........
TEXT Inhalt


Und es darf immer nur ein Foreign Key gesetzt sein, alle anderen müssen NULL sein. Kann ich das auch in MySQL umsetzen, sodass er automatisch nur einen Foreign Key setzten lässt?
 
Werbung:

thomas_w

SQL-Guru
Beiträge
104
AW: Tabelle zeigt auf mehrere andere Tabellen

Update:

Würde das vielleicht eine gute Lösung sein:


Tabelle Kommentare:

ID Primary Key
Produkt_ID Foreign Key
Kontakt_ID Foreign Key
Benutzer_ID Foreign Key
...........
TEXT Inhalt


Und es darf immer nur ein Foreign Key gesetzt sein, alle anderen müssen NULL sein. Kann ich das auch in MySQL umsetzen, sodass er automatisch nur einen Foreign Key setzten lässt?

Ja, ich denke, dass läßt sich so in MySQL lösen (Engine=InnoDB vorausgesetzt). Ich habe mal was ähnliches verbrochen, richtig glücklich bin ich dabei nicht geworden. Ich tendiere daher zu der "8-Tabellen-Lösung" ein paar Tabellen mehr oder weniger sind nichts gegen die Vorteile einer klaren, einfachen, hundsprimitiven und übersichtlichen Lösung.

Grüße
Thomas
 

wolfgangpue

Neuer Benutzer
Beiträge
4
AW: Tabelle zeigt auf mehrere andere Tabellen

Ich war der Meinung, die Lösung mit den 8-Tabellen ist die unsaubere Variante, da wenn ich ein Attribut beim Kommentar hinzufügen will, ich es auch bei jeder einzelnen Tabelle extra machen muss.

Hab grad gesehen, dass mit CONSTRAINT ich auch festlegen kann, dass nur ein Fremdschlüssel gesetzt werden darf. Was waren die Nachteile, bei der Lösung mit den zusätzlichen Fremdschlüsseln, weil du damit nicht richtig glücklich geworden bist? Als Vorteil seh ich halt an, dass die Datebank um einige Tabelle "Kommentare" bereinigt wird.
 
Werbung:

thomas_w

SQL-Guru
Beiträge
104
AW: Tabelle zeigt auf mehrere andere Tabellen

Mein Problem war ungefähr so...

Wenn Du die kombinierte Kommentartabelle durchsuchst und auf die "richtige" Haupttabelle zugreifen willst, kommt in etwa sowas dabei heraus:

Schematisch...

Code:
If produkt_id IS NULL THEN
ELSE IF kunde_id IS NULL THEN 
...
Wie findet die Kindtabelle die richtige Vatertabelle?

Nein, mir ist KISS (Keep it simple stupid) lieber, da ändere ich lieber 8 Tabellen, wenn es mal nötig ist. Da der Befehl dann fast identisch ist, geht sowas mit copy&paste.

Grüße
Thomas
 
Oben