bij een many to many relation gebruiken we een koppeltabel. In sommige situaties kan het handig zijn om in de koppeltabel een derde kolom op te nemen.
Dit wil ik nu met entities doen in Symfony en dat lukt. Ik gebruik zoals de documentatie voorschrijft een aparte entity als koppel tabel. laten we zeggen team --> teamrole <-- role
Ik vraag me af of dat een doel is dat je wel wilt bereiken. Een koppeltabel is er om -de naam zegt het al- een koppeling aan te brengen tussen rijen uit verschillende tabellen. Als die koppeling er eenmaal is, heeft het geen nut hem nog een keer aan te brengen.
Als het je doel is om te tellen hoeveel doublures er zijn, zou je kunnen overwegen om een extra veld 'teller' aan de tabel toe te voegen dat geen onderdeel is van de key. Bij je insert query zou je dan die teller kunnen verhogen als het record al bestaat. Iets als:
insert into tabel (a, b, c) values (x, y, z) on duplicate key update teller=teller+1;
Ongetwijfeld zal dat wel weer tegen een of andere normaalvorm indruisen, maar het komt volgens mij wel het dichtst bij wat ik denk dat je wilt. En hoe je dat in je favoriete framework moet coderen? Geen flauw idee. ;-)
Dank je wel voor je reactie. De bedoeling is inderdaad niet om een koppeling nog een keer aan te brengen. Ik heb inmiddels bedacht dat mijn benamingen misleidend zijn dus hier nog een beetje extra info:
Member = een lid van een sportclub
Team = een team van de sportclub waar de member in meespeelt/helpt.
Role = de rol die de member heeft binnen dat team. (denk aan speler, coach of keeper)
De feitelijke koppeling is dus tussen members en teams. De entity had dus beter TeamMember kunnen heten dan TeamRole. De role is dus de extra kolom in de koppeltabel. Ik heb hier een ManyToOne van gemaakt omdat ik wil dat de gebruikers straks uit een vast rijtje een keuze kunnen maken. Feitelijk had het ook gewoon een type="string" kunnen zijn.
Jouw oplossing met die insert komt wel in de richting hoe ik het wil hebben maar ik vroeg me af of er andere oplossingen mogelijk zijn. Misschien door de annotations te wijzigen?
Meerdere primary keys bestaan niet. Je hebt één primary key die uit meerdere kolommen kan bestaan.
Door unique constraints (een PK heeft dat automatisch) op bepaalde (combinaties van) kolommen te zetten voorkom je dat dubbele waardes worden ingevoerd.
Hoe je dat in je applicatie oplost is een keuze, de één controleert eerst zelf, de ander doet gewoon botweg een insert, en vangt daarna de duplicate key entry error af.
Meerdere primary keys bestaan niet. Je hebt één primary key die uit meerdere kolommen kan bestaan.
Okee, dat is duidelijk.
Ger van Steenderen op 09/04/2014 20:57:31
Door unique constraints (een PK heeft dat automatisch) op bepaalde (combinaties van) kolommen te zetten voorkom je dat dubbele waardes worden ingevoerd.
Hieruit lees ik dat het mogelijk is om één unique constraint te zetten over meerdere kolommen?
Kun jij hier een voorbeeld van geven Ger?
Ger van Steenderen op 09/04/2014 20:57:31
Hoe je dat in je applicatie oplost is een keuze, de één controleert eerst zelf, de ander doet gewoon botweg een insert, en vangt daarna de duplicate key entry error af.
Ik zou dan zeker voor de eerste optie kiezen. Dus dat betekend in PHP gewoon een query draaien en als er een record gevonden is dan bestaat die combinatie al en geef je een foutmelding. Dat is toch wat je bedoelt?