Angenommen, alle Ihre Freunde sind auch in der Benutzertabelle, benötigen Sie eine Freundes-Tabelle, die eine einfache Eins-zu-Viele-Beziehung definiert - indem Sie die Benutzertabelle mit sich selbst verknüpfen. So
Wobei sowohl UserIDLink1 und UserIDLink2 Fremdschlüssel in der Tabelle Benutzer sind.
So zum Beispiel, wenn ich drei Benutzer
1 Joe
2 Bill
3 Jane
und Joe und Jane sind Freunde dann die Freunde Tabelle eine einzelne Zeile
1 3
Die oben nimmt implizit enthalten würde, dass, wenn A a Freund von B dann B ist ein Freund von A - wenn dies nicht der Fall ist, möchtest du UserIDLink1 und UserIDLink2 wahrscheinlich in UserID und FriendID oder ähnliches umbenennen - in diesem Fall hättest du die Datensätze ebenfalls verdoppeln können.
Auch für die bidirektionale Konfiguration (A ist ein Freund von B, wenn B ein Freund von A ist) sollten Sie Indizes für die Friends-Tabelle für (UserIDLink1, UserIDLink2) und (UserIDLink2, UserIDLink1) einrichten, um den Zugriff zu gewährleisten ist immer effizient, wenn wir entweder nach Freunden von Joe oder Freunden von Jane suchen (wenn Sie den zweiten Index nicht eingerichtet hätten, wäre die erste Abfrage eine effiziente Indexsuche, die zweite würde jedoch einen vollständigen Tabellenscan erfordern).
Wenn Ihre Links nicht bidirektional wären, wäre dies nicht notwendig, um herauszufinden, wer A's Freunde sind, aber Sie würden wahrscheinlich immer noch die meisten benötigen, da Sie wahrscheinlich auch herausfinden müssen, mit wem B befreundet ist.
Sind Freundschaften bidirektional oder unidirektional? Wenn Pete mit Mary befreundet ist, bedeutet das immer, dass Mary auch eine Freundin von Pete ist? –
Beachten Sie auch, dass der Name, was Sie möchten, "Schnittstellentabelle" oder vielleicht auch "Nachschlagetabelle" ist. Wenn Sie mit Datenbankkonzepten vertraut sind, ist es ein Tisch für viele zu viele, da ein Benutzer viele Freunde haben kann und viele Freunde mit anderen Leuten sind. Beachten Sie auch, dass es für einen Benutzer möglich ist, einen Freund zu haben, der kein Freund ist und diesen Stil verwendet. Es gibt auch andere Möglichkeiten, aber dies ist am einfachsten zu implementieren. Vielleicht hilft dir ein bisschen mehr über deine Geschäftslogik für Freunde? @Juha Syrjälä hat mich dazu geschlagen! – jcolebrand
Freunde sind unidirektional und müssen bereits in der DB vorhanden sein. Es ist nur eine Erinnerungsliste von Leuten, die du kennst. – asmo