Avatar billede Mik2000 Professor
04. juli 2009 - 00:45 Der er 9 kommentarer og
1 løsning

Struktur database venner

Hej

Jeg har en liste med brugere. Disse brugere skal kunne blive venner med hinanden, lidt a la man kender det fra sider som Facebook.

Jeg har pt en tabel med brugere og så har jeg lavet en som denne:
venner:
id
brugerid
venid

som har id fra brugere tabellen for henholdsvis en given bruger og vennen

Det har jeg gjort så man nemt kan se hvilke venner en given bruger har ved at select * from venner where brugerid = 'idet'

Men det giver mig nogle problemer:
1: Hvis 2 skal være venner f.eks. id 2 og id 5, så skal man indsætte 2 poster - en hvor id 2 er brugerid og id 5 er venid og en der er omvendt

2: Hvis en bruger spørger om en anden bruger vil være ven skal den anden bruger godkende dette. Det tager tabellen ikke højde for.

-------------------------------

Så mit spørgsmål er hvordan strukturen skal være hvis det skal gøres smartest så de 2 problemer løses og det stadig er nemt at hente alle venner en given bruger har.

På forhånd tak :)
Avatar billede arne_v Ekspert
04. juli 2009 - 00:53 #1
Jeg synes at strukturen er OK.

Jeg ville muligvis droppe id og lade brugerid og venid være en 2 felts primær nøgle.

Du kunne også overveje at læhhe historik ind med:
- aktiv
- første gnag oprettet
- sidste gang fjernet

Dine problemer #1 og #2 skal løses i din applikation.
Avatar billede Mik2000 Professor
04. juli 2009 - 01:02 #2
Hej

Tak for svaret

1: Vil det sige at der så bør lægges 2 ind for hvert "vennepar" der er?

2: Hvordan registerer man kodemæssigt om de er godkendt?
.... er det via aktiv?

Hvd skulle de 2 andre ting give information om rent praktisk?
Avatar billede arne_v Ekspert
04. juli 2009 - 01:10 #3
re 1)

Ja.

re 2)

Lav en anden tabel med "pending venne requests" og opret en række i den når A requester og slet derfra og opret i den tabel vi snakker om, når B godkender.

Alternativt kunne du have et "godkendelse pending" felt af type boolean.

aktiv er for at markere om venneforholdet er aktivt.

re ekstra)

Historik.
Avatar billede yHec Novice
04. juli 2009 - 12:54 #4
Du kunne og lave en "mellemtabel", det giver mulighed for en mange-til-mange relation:

relationstabel
ID
bruger_id
venne_id

Så relaterer du din bruger- og din vennetabel gennem denne fx

"select * from (bruger JOIN relationstabel ON bruger.id=relationstabel.bruger_id) JOIN venner ON venne.id=relationstabel.venne_id WHERE ...."

På den måde har du kun en række i din vennetabel der er relateret til alle dine venner, og flere brugere kan samtidig have de samme venner...

Skulle jeg mene

/y
Avatar billede arne_v Ekspert
04. juli 2009 - 14:39 #5
Den her tabel er vel allerede en M:M mellem tabel.
Avatar billede yHec Novice
04. juli 2009 - 17:45 #6
øhhhh. Det er den da vist..
Avatar billede arne_v Ekspert
22. august 2009 - 18:13 #7
mik ?
Avatar billede Mik2000 Professor
28. januar 2010 - 11:26 #8
Skriv svar og så lukkes den
Avatar billede arne_v Ekspert
28. januar 2010 - 15:15 #9
svar
Avatar billede Mik2000 Professor
28. januar 2010 - 16:47 #10
Sorry den sene uddeling af point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester