koppeltabel en index

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arnold C

Arnold C

23/08/2010 16:26:29
Quote Anchor link
Hallo mensen,

Ik ben bezig in phpmyadmin om de tabellen in mijn db te plaatsen. Ik wil straks fk-relaties kunnen leggen tussen tabellen. Volgens dit blog:

http://www.mytechmusings.com/2008/04/using-foreign-keys-in-mysql.html

moet ik indexen aanwijzen. In de koppeltabel (parent) kan ik de beide primary keys aanwijzen als index. Maar als ik in de "child-tabel" de primary key aanwijs als index, krijg ik de melding:

The following indexes appear to be equal and one of them should be removed: PRIMARY, vakgebied_ID

Hoe komt dit? Geldt de primary key als index? Zo ja, moet het dan eigenlijk wel in die koppeltabel?

Dank bij voorbaat voor begrijpelijke uitleg!
 
PHP hulp

PHP hulp

22/12/2024 12:20:57
 
Joren de Wit

Joren de Wit

23/08/2010 16:51:23
Quote Anchor link
Vanuit de child tabel wil je verwijzen naar een kolom uit de parent waardoor je de records aan elkaar koppelt:

parent
------
id
naam

child
-----
id
parent_id

De kolommen parent.id en child.parent_id hebben dezelfde waarde. Op de kolom child.parent_id moet je echter geen PK aanbrengen omdat je anders het hele idee van de 1-op-veel of veel-op-veel relatie overboord gooid. Een PK kan namelijk maar 1x in een tabel voorkomen waardoor je per definitie een 1-op-1 relatie zou overhouden.

Nee, breng gewoon een normale INDEX aan op de kolom child.parent_id waarna je een FK constraint kunt aanbrengen tussen de twee betreffende kolommen.

Overigens, als je in MySQL aan de gang gaat, zorg dan wel dat je de InnoDB engine gebruikt. Dat is namelijk de enige die het gebruik van FK's ondersteund...
 
Arnold C

Arnold C

23/08/2010 17:47:51
Quote Anchor link
Dank!
Je uitleg is erg duidelijk....maar hoe pas ik dit nu toe op een koppeltabel?

tbl_werknemers
-----------
id
naam

tbl_taken
-----------
id
taak

tbl_koppel
-----------
werknemers_id
taken_id

Ik wilde die koppeltabel inzetten om te maken dat een werknemer meerdere taken kan hebben.

Ik dacht dat de id's in de beide parent een primary key mogen hebben. Maar wat doe ik met de overeenkomstige velden in de koppeltabel. Ik dacht dat die beide (dus werknemers_id en taken_id) als primary key moesten.

InnoDB heb ik inderdaad aanstaan.
 
Joren de Wit

Joren de Wit

23/08/2010 18:24:54
Quote Anchor link
In principe kun je een PK aanbrengen op meerdere kolommen tegelijk. Dus je zou beide kolommen kunnen gebruiken voor de PK:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
ALTER TABLE tbl_koppel
ADD PRIMARY KEY (werknemers_id, taken_id)

Het enige nadeel van deze oplossing vind ik dat je altijd beide id's nodig hebt om een record aan te kunnen wijzen. Je zou ook voor de volgende oplossing kunnen kiezen:

tbl_koppel
---------
id
werknemers_id
taken_id

Met een PK op id en een UNIQUE constraint op de combinatie (werknemers_id, taken_id).
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.