Waar ik tot op heden een SET type kolom gebruikte, wil ik nu een extra tabel gebruiken om naar te linken (one-to-many en one-to-one). De reden waarom is dat ik tot de overtuiging ben gekomen dat SET (en ENUM) in MySQL meer kwaad dan goed doet, maar dat terzijde.

Op zich niets moeilijks aan, maar ik kom nu in de volgende situatie terecht die op mij gewoon vreemd overkomt. De data waar het over gaat zijn maten voor kleding (S, M, L, XL, XXL, Junior, etc). Unieke waardes, niet veel data en op zich zal het ook niet vaak veranderen. Omdat alle waardes uniek zijn heb ik geen andere key nodig (dus geen auto_increment id). Alleen wil ik het nu linken dan kom ik eigenlijk in de situatie dat ik de waarde uit de sizes tabel direct opneem in de andere tabel.

Tabel sizes:
- size VARCHAR(15)
(heeft dus maar 1 kolom)

one-to-one relatie:
Tabel items:
- item_id
- item_name
- size
etc

one-to-many relatie:
Tabel catalogue_items:
- item_id
- item_name
etc

Tabel size_options (link tabel):
- item_id
- size

In de item tabel (waar fysieke items in voorraad in staan) komt dus direct de maat te staan. Voor de tabel met catalogus items is een link tabel nodig, omdat er in de catalogus moet worden opgenomen in hoeveel maten een item beschikbaar is. Daar heb ik dus een link tabel, in die link tabel komt ook weer meteen de maat te staan.

Mijn gevoel zegt me nu dat die hele sizes tabel bijna overbodig is geworden. Zonder die tabel kan ik de one-to-one en one-to-many relatie in feite ook wel leggen. Nu besef ik wel dat die sizes tabel afbakent welke maten mogelijk zijn en geeft me de mogelijkheid om alle maten op te halen (voor een drop down box bijvoorbeeld), maar is dit echt de juiste manier? Het komt op de een of andere manier vreemd op mij over.
Soms heb ik dat gevoel ook wel eens, maar meestal blijkt achteraf zo'n schijnbaar overbodige tabel toch nog wel van pas komt. Ik heb altijd zoiets van baat het niet dan schaadt het niet.
Feitelijk zie ik drie mogelijkheden om het te doen:
- ENUM/SET kolom, maar daar wil ik dus vanaf
- constantes definieren in php, maar dat is niet uitbreidbaar
- bovenstaande methode

Op zich ben ik dus wel van mening dat bovenstaande de manier is om het te doen, het staat alleen zo vreemd...
Erwin, ik heb nog eens gekeken naar je tabellen, en ik vraag me af waarom je de tabel items hebt. Of is dat de tabel voor de verkochte items?
Ik heb een table waarin verkopers hun artikelen hebben staan. Hier moeten dus de mogelijke opties bij vermeld worden (de verschillende kleuren, maten etc). Dit zijn dus geen fysieke artikelen.
Daarnaast heb ik een tabel met alle fysieke artikelen die een koper heeft. Elk record refereert dus naar een artikel dat echt bestaat met daarbij de daadwerkelijke kleur en de daadwerkelijke maat.

In het eerste geval gaat het dus om een one-to-many link, bij de tweede een one-to-one link.

Reageren