Avrei una tabella per gli utenti e una seconda tabella per le relazioni.
La tabella Relazioni avrebbe 2 chiavi esterne, entrambe che puntano ai record nella tabella Utente.
Ecco un diagramma approssimativo:
+------------------+ +------------------------+
| User | | Relationship |
|------------------| |------------------------|
| UserPK (int) | | RelationshipPK (int) |
| ... |<--------+ User1FK (int) |
| |<--------+ User2FK (int) |
| | | |
| | | |
| | | |
| | | |
+------------------+ +------------------------+
La tabella delle relazioni è tecnicamente la tabella centrale in una relazione molte a molte.
Ecco un esempio. Nota che il diagramma mostra 2 record dalla tabella USER
:
+------------------+ +------------------------+ +------------------+
| User | | Relationship | | User |
|------------------| |------------------------| |------------------|
| UserPK: 1 | | RelationshipPK 100 | | UserPK: 2 |
| Name: ALICE |<--------+ User1FK 1 | | Name: BOB |
| | | User2FK 2 +----->| |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+------------------+ +------------------------+ +------------------+
Abbiamo 3 record nel database: un record USER
per Alice, un record USER
per Bob e un record RELATIONSHIP
che mostra che Alice e Bob si conoscono.
Probabilmente vorrai aggiungere campi aggiuntivi a queste tabelle. Ad esempio, la relazione "amici", "collaboratori", "famiglia", ecc.
Se Alice è amica di Bob e Bob è un amico di Alice (cioè una relazione simmetrica), potrebbe essere più semplice avere solo due record nella tabella delle relazioni (User1FK: Alice, User2FK: Bob e User1FK: Bob , User2FK: Alice). Ciò renderebbe alcune query più facili.