Wenn ich eine Website erstellen möchte, die Benutzern erlaubt, 0 oder mehr "Freunde" zu haben, wie würde ich eine solche Beziehung in einer Datenbank modellieren? Würde etwas so einfach funktionieren:
%Vor%???
Würde ich später Dinge wie Facebook tun können (z. B. "3 Ihrer Freunde kennen diesen Nutzer, vielleicht auch Sie")? Oder so etwas wie 6-Grad-zu-Kevin-Bacon?
EDIT 1:
%Vor%Das wird funktionieren. Folgende Punkte sind zu beachten:
Jedes Mal, wenn Sie nach DOR (Verwandtschaftsgrad) fragen müssen, müssen Sie ein Diagramm initialisieren und Shortest Path Algo ausführen (Dies ist die geringste Optimierung, die ich mir vorstellen kann). Wenn Ihre Mitgliederzahl auf einige Kilo ansteigt, wie gehen Sie dann damit um?
Du brauchst eine Beziehung von vielen zu vielen - du kannst 0 oder mehr Freunde haben, jeder Freund kann 0 oder mehr Freunde haben. Der häufigste Ansatz besteht darin, beide Benutzer in der zusätzlichen Tabelle zu binden. Sie benötigen nur eine zusätzliche DB-Tabelle: %Code% Sie möchten auf jeden Fall Indizes für user1 und user2 erstellen.
Ich denke, Sie brauchen die ID-Spalte nicht. Noch eine Sache, die dir bewusst sein sollte, dass, wenn ich dein Freund bin, du mein Freund bist. Wenn Sie ([u1], [u2]) in die Tabelle Beziehungen einfügen, prüfen Sie zuerst, ob eine Beziehung besteht ([u1], [u2]) oder ([u1], [u2]). Wenn es eine solche Beziehung gibt, fügen Sie keine andere ein, dies könnte Ihre Logik zerstören.
Wenn Sie irgendeine Art von Bestätigung benötigen, wie in den meisten populären sozialen Netzwerken, sollten Sie eine weitere Tabelle PendingRelationshyps erstellen, die dasselbe DB-Schema wie das Beziehungs-Schema haben wird. Nach der Bestätigung verschieben Sie den Eintrag aus den anstehenden Beziehungen in Relationen.
Hoffe, das wird dir helfen.
@devfreak hat absolut recht, aber ich würde keine "Pending" -Tabelle machen. Es ist einfach überflüssig. Die Friend-Tabelle kann ein Statusfeld haben, und Sie können Abfragen basierend auf dem Status ablehnen.
Tags und Links mysql database database-design data-modeling