Ik ben op dit moment een database aan het ontwerpen die een heleboel verschillende tabellen bevat. Het is een soort van hierarchie. We hebben drie tabellen, die ik hier versimpeld probeer te omschrijven) :
- HoofdTabel
- SubTabel, voor elk record in HoofdTabel x records in SubTabel
- SubSubTabel, voor elk record in SubTabel x records in SubSubTabel
Ik zit met het volgende probleem: elk record (HoofdRecord, SubRecord, SubSubRecord) heeft een aantal 'properties', zoals Gewicht, Omtrek, Smaak, Kleur etc. Deze properties kunnen hetzelfde zijn voor een SubRecord, maar ze kunnen ook verschillen. Over het algemeen zal een SubRecord een hele andere serie properties hebben dan een HoofdRecord.
Bovendien zijn deze properties veranderend, en in de toekomst weet ik dat we meer nieuwe properties zullen hebben, maar ik kan niet voorspellen welke. Het is dus vrij lastig om van elke property een kolom te maken.
Qua oplossingen heb ik al veel met andere mensen gepraat, en we zijn tot twee mogelijke oplossingen gekomen, maar ik ben met beide niet 100% tevreden.
De eerste oplossing is 1 grote tabel met properties, en we gebruiken NULL velden om properties van de HoofdTabel en SubTabel te definieren. Voorbeeld:
Ik kan hier weinig concrete bezwaren tegen bedenken eigenlijk. Alleen voor mijn gevoel ziet het er lelijk uit. Kan niet precies zeggen waarom
De tweede oplossing is om een tabel te hebben die voor elke property bijhoudt bij welke tabel deze behoort en wat het ID van het record in die tabel is. Voorbeeld:
Het grootste probleem met deze oplossing lijkt mij de referentiele integriteit, alhoewel dat 'opgelost' kan worden met triggers in de database.
Ik zou graag een derde optie willen hebben, en een discussie over de goede en slechte kanten van de oplossingen die ik nu heb
- HoofdTabel
- SubTabel, voor elk record in HoofdTabel x records in SubTabel
- SubSubTabel, voor elk record in SubTabel x records in SubSubTabel
Ik zit met het volgende probleem: elk record (HoofdRecord, SubRecord, SubSubRecord) heeft een aantal 'properties', zoals Gewicht, Omtrek, Smaak, Kleur etc. Deze properties kunnen hetzelfde zijn voor een SubRecord, maar ze kunnen ook verschillen. Over het algemeen zal een SubRecord een hele andere serie properties hebben dan een HoofdRecord.
Bovendien zijn deze properties veranderend, en in de toekomst weet ik dat we meer nieuwe properties zullen hebben, maar ik kan niet voorspellen welke. Het is dus vrij lastig om van elke property een kolom te maken.
Qua oplossingen heb ik al veel met andere mensen gepraat, en we zijn tot twee mogelijke oplossingen gekomen, maar ik ben met beide niet 100% tevreden.
De eerste oplossing is 1 grote tabel met properties, en we gebruiken NULL velden om properties van de HoofdTabel en SubTabel te definieren. Voorbeeld:
code:
1
2
3
4
5
| ID HoofdID SubID SubSubID Property Value ---------------------------------------------------------------------- 0 0 NULL NULL HoofdTabelProperty 5.678 1 0 0 NULL SubTabelProperty 5.3232 2 0 0 0 SubSubTabelProperty 4.2324 |
Ik kan hier weinig concrete bezwaren tegen bedenken eigenlijk. Alleen voor mijn gevoel ziet het er lelijk uit. Kan niet precies zeggen waarom
De tweede oplossing is om een tabel te hebben die voor elke property bijhoudt bij welke tabel deze behoort en wat het ID van het record in die tabel is. Voorbeeld:
code:
1
2
3
4
5
| ID ForeignTableName ForeignTableID Property Value ---------------------------------------------------------------------- 0 HoofdTabel 0 HoofdTabelProperty 5.3432 1 SubTabel 0 SubTabelProperty 3.2314 2 SubSubTabel 0 SubSubTabelProperty 5.4321 |
Het grootste probleem met deze oplossing lijkt mij de referentiele integriteit, alhoewel dat 'opgelost' kan worden met triggers in de database.
Ik zou graag een derde optie willen hebben, en een discussie over de goede en slechte kanten van de oplossingen die ik nu heb
The cyclographing developer