Een linkje naar een artikel over database ontwerp zou ook niet misstaan, want dat is veel belangrijker dan hoe je de database vanuit PHP aanspreekt.
Het voorgestelde model heeft bijvoorbeeld meteen al een paar fouten waar je later spijt van gaat krijgen:
Dit is een koppeltabel, de primary-key van deze tabel, datgene wat het record uniek maakt, is de combinatie van de twee userid's. Immers, piet kan maar 1x vriend zijn met klaas, en als piet al vrienden is met klaas dan is klaas per definitie ook vrienden met piet. Het mag dus niet kunnen gebeuren dat klaas een vriendverzoek plaatst naar piet terwijl hij al vrienden is met piet.
Dit kan dus niet:
1 - piet - klaas - yes
2 - klaas - piet - yes
Om dit te voorkomen kun je een PRIMARY KEY plaatsen op de combinatie van userid en friendid. Bij het invoeren kun je dan LEAST() en GREATEST() gebruiken om te zorgen dat het laagste van de twee userid's altijd in de eerste kolom staat en de grootste in de tweede:
INSERT INTO vrienden (userid, friendid) VALUES (LEAST(userid, friendid), GREATEST(userid, friendid));
Als 1 vrienden wil zijn met 2 dan levert dat userid=1 friendid=2
en als 2 vrienden wil zijn met 1 dan wordt dat ook userid=1 friendid=2, en dan verbiedt de Primary Key regel dat dit wordt ingevoerd.
Omdat de twee userid kolommen nu samen de primary key zijn heeft de "id" kolom geen meerwaarde en mag weg.
Nu kun je alleen niet meer aangeven wie van de twee het verzoek heeft verstuurd, en daarvoor voeg je simpelweg een nieuwe kolom "sender" toe, met daarin het id van de afzender.
Daarnaast wil je kunnen bijhouden of een vriendverzoek is verstuurd, ontvangen, geaccepteerd of afgewezen, dus "accepted" wordt "status" en bevat "sent", of "accepted" of "refused".