Ich habe eine Tabelle, in der die Zeilen miteinander in Beziehung gesetzt werden können, und logischerweise verläuft die Beziehung zwischen den beiden Zeilen in beide Richtungen (im Grunde genommen richtungslos). (Und wenn Sie sich fragen, ja, dies sollte wirklich eine Tabelle sein. Es sind zwei Dinge von genau derselben logischen Entität / demselben logischen Typ.) Ich kann mir ein paar Möglichkeiten vorstellen, dies darzustellen:
- Speichern Sie die Beziehung und ihre Umkehrung
- Speichern Sie die Beziehung in eine Richtung, beschränken Sie die Datenbank daran, sie in die andere Richtung zu speichern, und haben Sie zwei Indizes mit entgegengesetzter Reihenfolge für die FKs (ein Index ist der PK-Index).
- Speichern Sie die Beziehung auf eine Weise mit zwei Indizes und lassen Sie die zweite trotzdem einfügen (klingt irgendwie glücklich, aber hey, Vollständigkeit)
- Erstellen Sie eine Art Gruppierungstabelle und haben Sie eine FK in der Originaltabelle. (Wirft viele Fragen auf. Die Gruppierungstabelle würde nur eine Zahl haben. Warum überhaupt die Tabelle? FK NULLable machen oder Gruppen mit einer einzelnen Zeile zuordnen?)
Was sind einige wichtige Vor- und Nachteile dieser Wege, und gibt es natürlich einen Weg, an den ich nicht gedacht habe?
Hier ist eine SQLFiddle zum Spielen: http://sqlfiddle.com/#!12/7ee1a/1/0 . (Scheint PostgreSQL zu sein, da ich das verwende, aber ich denke nicht, dass diese Frage sehr spezifisch für PostgreSQL ist.) Derzeit werden sowohl die Beziehung als auch die Umkehrung nur als Beispiel gespeichert.