sql >> Database teknologi >  >> RDS >> Mysql

MySQL-vennebord

Forudsat at alle dine venner også er i brugertabellen, skal du bruge en vennetabel, som definerer et simpelt en-til-mange forhold - som forbinder brugertabellen tilbage til sig selv. Så

User Table
UserID int identity not null
[other attribute fields]

Friends Table
UserIDLink1 int
UserIDLink2 int 
[other attribute field]

Hvor både UserIDLink1 og UserIDLink2 er fremmednøgler på brugertabellen.

Så for eksempel hvis jeg har tre brugere

1 Joe
2 Bill
3 Jane

og Joe og Jane er venner, så ville Friends-tabellen indeholde en enkelt række

1 3

Ovenstående forudsætter implicit, at hvis A er en ven af ​​B, så er B en ven af ​​A - hvis dette ikke er tilfældet, vil du sandsynligvis omdøbe UserIDLink1 og UserIDLink2 til UserID og FriendID eller lignende - i hvilket tilfælde du har også op til det dobbelte af rekorderne.

Også for den tovejskonfiguration (A er en ven af ​​B, hvis B er en ven af ​​A) bør du opsætte indekser på Friends-tabellen for (UserIDLink1,UserIDLink2) og (UserIDLink2,UserIDLink1) for at sikre, at adgang altid er effektiv, hvis vi søgte enten efter venner af joe eller venner af jane (hvis du ikke satte det andet indeks op, ville den første forespørgsel være et effektivt indeksopslag, men den anden ville kræve en fuld tabelscanning).

Hvis dine links ikke var tovejsbestemte, ville dette ikke være nødvendigt for at finde ud af, hvem A's venner er, men du ville stadig nok mest kræve det, da du sandsynligvis også skal finde ud af, hvem B er en ven af.



  1. 2018 i anmeldelse:7 MariaDB-milepæle, du måske er gået glip af

  2. Korrekt databasemodel for et brugerfeedbacksystem (en interessant case)

  3. Hvornår skal jeg bruge CROSS APPLY over INNER JOIN?

  4. Kan ikke sende tekst til MySQL ved hjælp af Insert Into