Toon posts:

[MySQL] Relaties, zoals ik ze nog nooit gedaan heb.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Sorry voor de vage titel maar ik weet niet hoe ik dit moet omschrijven, database design is zowiezo niet mijn ding.

Het volgende maakt mij gek: ik heb een tabel die heet groep. Die tabel kan een relatie hebben met een product. Maar zo'n groep moet ook een relatie kunnen hebben met een andere groep.

Ik heb dat nu heel simplistisch opgelost door een kolom te maken die subid heet. Elke groep heeft zijn eigen id (pk, auto increase) en een subid (gewoon een int). Als het subid 0 is staat de groep op het hoogste niveau, als de waarde van subid > 0 dan verwijst subid naar het id van een andere groep. De tabel met producten verwijst per product gewoon naar een groep_id.

groep A id = 1 subid = 0
groep B id = 2 subid = 1
groep C id = 3 subid = 2

product 1 id = 1 groep_id = 1
etc...

Ziet dan zo uit:

code:
1
2
3
groep A             -> Product 1, etc...
   |> groep B             -> etc...
           |> groep C             -> etc...


Dit werkt allemaal prima, maar stel dat het ooit zou voorkomen dat ik een foutje maak met programeren en ergens in een "ketting" van groep > groep > groep > groep > product raakt een rij kwijt dan gaan er een helehoop groepen verloren omdat ergens een schakel mist, de database heeft er immers zelf geen controle over middels keys oid....

Dit is ongetwijfeld een veelvoorkomend probleem, dus daar hebben ze vast iets voor verzonnen, ik kom alleen niet op de naam (en dan bedoel ik niet cascade ofzo). Hoe los je dit professioneel op?

[ Voor 4% gewijzigd door Verwijderd op 20-11-2006 19:47 ]


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Ik denk dat je dat prima moet lukken constraints.

  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 11:18
Foreign id aanleggen op subid.

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
• sub_id niet '0' maar 'NULL' laten opslaan als hij geen parent heeft (overweeg ook om 't ding parentGroupID te noemen, 'sub' impliceert eerder een child).
• Een foreign key constraint definieren van sub_id naar group_id, zodat je afdwingt dat een bepaalde group_id niet verwijderd mag worden zolang er nog andere groepen naar verwijzen.

En klaar is klara.