sql >> Databasteknik >  >> RDS >> Mysql

MySQL vänner bord

Förutsatt att alla dina vänner också finns i användartabellen behöver du en väntabell som definierar en enkel en-till-många-relation - som länkar användartabellen tillbaka till sig själv. Så

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

Friends Table
UserIDLink1 int
UserIDLink2 int 
[other attribute field]

Där både UserIDLink1 och UserIDLink2 är främmande nycklar i tabellen Användare.

Så till exempel om jag har tre användare

1 Joe
2 Bill
3 Jane

och Joe och Jane är vänner, då skulle tabellen Vänner innehålla en enda rad

1 3

Ovanstående antar implicit att om A är en vän till B så är B en vän till A - om så inte är fallet skulle du förmodligen vilja byta namn på UserIDLink1 och UserIDLink2 till UserID och FriendID eller liknande - i så fall skulle du har upp till dubbla posterna också.

Även för den dubbelriktade konfigurationen (A är en vän till B om B är en vän till A) bör du ställa in index på Friends-tabellen för (UserIDLink1,UserIDLink2) och (UserIDLink2,UserIDLink1) för att säkerställa att åtkomsten alltid är effektiv om vi sökte antingen efter vänner till joe eller vänner till jane (om du inte ställde in det andra indexet skulle den första frågan vara en effektiv indexuppslagning men den andra skulle kräva en fullständig tabellsökning).

Om dina länkar inte var dubbelriktade skulle detta inte vara nödvändigt för att ta reda på vilka A:s vänner är, men du skulle förmodligen mest kräva det eftersom du förmodligen också kommer att behöva ta reda på vem B är vän med.



  1. MariaDB Server Database Encryption Basics

  2. Lagrad procedur för att få information om databastabeller

  3. Vad är en lagrad procedur?

  4. Transparent Data Encryption (TDE) i SQL Server i en AlwaysOn Availability Group på exempel