Datenmodell für soziales Netzwerk?

8

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%     
StackOverflowNewbie 14.11.2010, 10:52
quelle

3 Antworten

2

Das wird funktionieren. Folgende Punkte sind zu beachten:

  • Hast du etwas wie eine Freundschaftsbestätigung? Wenn ja, müssen Sie darüber nachdenken, wie "ausstehende"
  • gespeichert werden soll
  • Indizierung von UserId und FriendId. Dies sind die Werte, an denen Sie den Tabellen beitreten.
  • Das ungeordnete Paar (UserId, FriendId) ist der Kandidat für den Primärschlüssel.
  • Angenommen, Uid_1 und Fid_1 sind Freunde, bei denen Uid_1! = Fid_1, dann Ihr Friends Table Store (Fid_1, Uid_1) sowie (Uid_1, Fid_1).
  • Wie weit in Grad der Beziehung werden Sie suchen.

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?

    
Ashwini Dhekane 14.11.2010, 11:14
quelle
1

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 14.11.2010 11:29
quelle
0

@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.

    
dustypants 13.06.2011 15:54
quelle