Beste mensen,

Een vraagje over MySQL tabellen. Ik heb ooit gelezen dat je als het even kan tabellen zou moeten opsplitsen in meerdere tabellen als een waarde verschillende keren voor komt. voorbeeld:


id	plaats		land
1	dorp		nl
2	dorp2		nl
3	dorp3		gb

Als ik het goed begrijp zou je dan van land een nieuwe tabel kunnen/moeten maken en in deze tabel alleen een verwijzing maken naar de index van tabel land.

Mijn vraag is nu:
Wanneer, bij welke aantallen, heeft dit werkelijk nut?

Alvast bedankt,

Jop
@pipo
Pipo Clown op 15/11/2015 13:30:35

Ga jezelf eens inlezen op het onderwerp "normaliseren van databases"

antwoord:
Jopla op 15/11/2015 10:50:08

Ik heb ooit gelezen dat ...

Ofwel: Ik heb het één en ander gelezen, maar niet de reden gelezen/begrepen waarom.

@ben
Ik begrijp graag de achterliggende reden. Als ik in het water moet springen, wil ik graag weten waarom. ;-)

@Thomas, Frank
Dank je.



[size=xsmall]Toevoeging op 15/11/2015 16:28:49:[/size]

ow...:
wat betekent deze foutmelding? Ik probeer met de code van Frank 2 tabellen aan elkaar te koppelen ...

#1170 - BLOB/TEXT column 'landcode' used in key specification without a key length
Die foutmelding houdt in dat je een TEXT of BLOB voor 'landcode' gebruikt, en dat kan niet als index gebruikt worden, omdat alleen de eerste X tekens geindexeerd kunnen worden. Kies voor een VARCHAR, en gebruik alleen TEXT of BLOB wanneer je dat nodig hebt.

De achterliggende reden is heel eenvoudig, zoals ik eerder ook al heb aangegeven. Het organiseren van je data zorgt dat je database er snel mee om kan gaan, en je applicatie dus eenvoudiger gegevens op een gestructureerde manier kan opvragen. Ook voorkomt normaliseren het maken van fouten. Om terug te komen op de landen, stel dat je een tabel hebt met 4 kolommen: een id, een naam van een persoon, naam van een land en een landcode. Het is nu heel eenvoudig om daar inconsistente data in te zetten, bijvoorbeeld 2x dezelfde landcode met een andere naam van een land. Als je normaliseert en de FK relaties goed legt voorkom je die problemen. Ja, je schrijft dat een JOIN, maar je kan die landen dan hergebruiken voor andere dingen. En een query schrijf je maar 1 keer, dus veel verschil maakt het niet in "eenvoud".
Je had helemaal gelijk Ben. Ik zat krampachtig een lengte op te geven aan een tinytxt, maar dat kan dus niet ;-) Het is ook al weer een tijdje geleden dat ik met MySql bezig was dus veel is weggezakt.

Reageren