Ik ben bezig met een website waar bedrijven een profiel hebben. Het is de bedoeling dat de bedrijven elkaar onderling kunnen toevoegen aan hun netwerk. Vergelijkbaar met o.a. Hyves. Nu komt mijn probleem. Hoe koppel ik die bedrijven aan elkaar? Ik moet ID's uit dezelfde tabel gaan koppelen. Maar hoe kan ik dat het beste doen?
Ik had iets bedacht van een tabel met twee kolommen: bedrijf_recht, bedrijf_links.
Ben ik op de goede weg? Hoe zouden jullie het doen?
Graag jullie hulp!
Je moet gewoon altijd kijken wat voor soort relatie je hebt in je DB.
Vergelijk films - acteurs. Eén film kan meer dan één acteur bevatten en één acteur kan in meer dan één film meedoen. Dat heet een veel op veel relatie en die zijn verboden.
De oplossing is dan inderdaad altijd een koppeltabel waarin je combinaties van de twee andere tabellen opslaat.
Dat was bij mij al bekend. Wanneer je twee tabellen wilt koppelen je altijd een koppel tabel gebruikt. Maar mijn probleem is dat ik maar een tabel heb.
Om jouw voorbeeld te gebruiken. Ik wil acteurs aan elkaar koppelen. Meerdere acteurs hebben wat gemeen met elkaar.
Vergelijk het met een vrienden netwerk. Een gebruiker kan meerdere gebruikers als vriend hebben. Dus hoe koppel je dat aan elkaar?
Wat heb je nodig? Een combinatie van twee gebruikers. Dus drie velden in je koppeltabel: id, gebruiker1_id en gebruiker2_id.
Het maakt niet uit of je een koppeltabel maakt tussen twee verschillende tabellen, of een koppeltabel die records uit 1 en dezelfde tabel (in dit geval gebruikers) aan elkaar koppelt.
Je zou het systeem nog enigszins kunnen uitbreiden, door de uitgenodigde gebruiker de mogelijkheid te bieden om de uitnodiging te accepteren danwel af te wijzen.
Dan ziet je koppeltabel er zo uit:
vrienden
----------
id
vraag_id (= id uit de tabel gebruikers)
antwoord_id (= id uit de tabel gebruikers)
geaccepteerd (1 of 0, gebruik hiervoor een TINYINT)
Zoiets had ik dus al in gedachten. Wilde alleen weten of het een juiste manier is.
Nu even een andere vraag. Is de id kolom nodig? Heb je niet genoeg aan de vraag_id en antwoord_id. Die je dan een PK maakt? Als je alleen de id een PK maakt dan kunnen er dubbele combinatie's vraag_id en antwoord_id gemaakt worden.
Of is dit niet waar?
Ik zou altijd een kolom id erin houden als primary key met een auto_increment erop. Op die manier zijn al je records uniek te onderscheiden en is het makkelijk om een bepaald record aan te duiden om het bijvoorbeeld te verwijderen.
Als je verder niet wilt dat de combinatie vraag_id / antwoord_id maar 1x voorkomt in je tabel, kun je een UNIQUE constraint aanbrengen op die twee velden.