Freundschaft o.ä. in relationalen Datenbanken abbilden

Hallo!

Ich habe folgendes Problem: Ich möchte (nur ein Beispiel) eine Freundschaft zwischen zwei Benutzern (also wie z.B. bei Facebook) in meiner MySQL-Datenbank speichern. Derzeit finde ich keine bessere Lösung als eine Tabelle 'friendship' mit den Feldern 'user_a' und 'user_b'. Gibt es eine Möglichkeit, die beiden User irgendwie "gleichwertig" zu speichern? Gibt es eine elegante Möglichkeit, solche Beziehungen abzubilden oder bin ich hier an eine Grenze des relationalen Datenbankmodells gestoßen?

Bin über anregungen sehr dankbar.

Gruß
Raphael
 
Naja, so wie du es beschreibst, wird typischerweise eine n:m Relation abgebildet.
Code:
PK | MemberA | Member B
---+---------+---------
 1 | 127     | 25
 2 | 11      | 25
 3 | 21      | 31
...
Wenn du großen Wert darauf legst, dass die Verbindung "gleichwertig" ist, kannst du einen Hypergraphen konstruieren. D.h., du gibt einer Verbindung eine zusätzliche ID, über die du zwei (oder mehr) Partner zusammenfügen kannst.
Code:
PK | ConnID | Member
---+--------+---------
 1 | 1      | 127
 2 | 1      | 25
 3 | 2      | 11
 4 | 2      | 25
 5 | 3      | 21
 6 | 3      | 31
...
Natürlich kannst du auf diese Weise auch mehr als zwei Teilnehmer zu einem Team zusammenfassen. Eine Verbindung hat dann immer so viele Zeilen, wie Teilnehmer zu diesem Team gehören.
Um alle Teams zu erhalten, musst du nach der ConnID gruppieren ("select ... group by ConnID"). Um alle Teams zu erhalten, zu denen ein Teilnehmer gehört, kannst du alle ConnIDs suchen, die zu dem Member gehören.
Und so weiter...

mfg, metax.
 
Zuletzt bearbeitet:
Zurück
Oben