PDA

View Full Version : [Mysql] Come salvare le amicizie in un db mysql ?


x3d0
03-04-2009, 15:12
Devo salvare tutte le amicizie in un db mysql e mi chiedo quale sia la strategia migliore.

I dati che dovrei salvare sono

A è amico di B
C è amico di D
B è amico D

Ed il mio interesse è che con una semplice SELECT ricavare tutti gli amici di un certo utente.
Non posso fare
User1 - User2
A - B
C - D
B - D

Perchè se volessi ottenere tutti gli amici di B(con un filtro su user1) otterrei solo D, mentre nella riga 1 anche A è amico di B. Insomma è un problema in questi termini.

nuovoUtente86
03-04-2009, 19:28
Mi sembra che mysql non consenta di esprimere vincoli generici (in questo caso sarebbe stato utile impedire la memorizzazione di coppie del tipo A-B, B-A in quanto ovviamente esprimono la stessa cosa).
Puoi semplicemente utilizzare la tabella associativa Amicizia in cui memorizzi le chiavi (che fungono anche da chiavi esterne). In fase di select ti basta verificare che una delle 2 colonne user1-user2 contenga la persona cercata, risalendo cosi a tutti gli amici.

Andrea16v
04-04-2009, 09:29
Se riesci a filtrare i dati in entrata al database puoi, inoltre a quanto detto sopra, ordinare i nomi degli amici alfabeticamente quando inserisci una tupla.
Cosi' facendo, e con l'aiuto delle chiavi primarie (entrambe le colonne), puoi evitare doppioni, user1 precede sempre alfabeticamente user2, altrimenti la select con l'or ti darebbe sia "A B" che "B A"

CozzaAmara
04-04-2009, 10:06
Relazione molti a molti M:N

Crea una tabella "Persone", con tutti i dati dei vari "utenti" poi crea una tabella "amicizie" in cui riportare:

A - B
A - C
B - C
B - D
C - E
...

Ovviamente ogni coppia di valore nella tabella "amicizie" è chiave unica.

Bye.