Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[MySQL] Hoe belangrijk is normaliseren?

Anoniem
BasHamar
5 antwoorden
  • Ik ga een website opzetten die onder andere de NAW gegevens van verschillende bedrijven moet bijhouden. Nu heb ik in een grijs verleden "les gehad" in het ontwerpen van een database-structuur en ik meen me te herinneren dat ze daarbij heel ver gingen bij het normaliseren. Mijn vraag is dan ook: hoe ver moet je gaan en wat zijn de voordelen?

    Voorbeeld:

    Stel, ik houd bedrijfsnaam, adres, huisnummer, postcode en plaats bij. Heb ik dan één tabel met id, bedrijfsnaam, adres, huisnummer, postcode, plaats of heb ik dan 5 tabellen (één voor iedere eigenschap) die allemaal gekoppeld zijn aan de id van bedrijfsnaam?

    Alle uitleg is welkom, het voordeel is me namelijk niet helemaal duidelijk.

    - Bas
  • Ik zou het zelf gewoon in één tabel proppen. Maar ik ben dan ook geen database expert. Denk dat het vooral afhankelijk is van hoe de informatie gebruikt gaat worden. Wordt alles tegelijkertijd opgevraagd (dus één tabel), of wordt iets separaat opgevraagd (dus meerdere tabellen). Verder denk ik dat dit pas belangrijk wordt bij zeer omvangrijke databases, dus in de orde van miljoenen records.
  • Zoals jij beschrijft is wellicht ideaal, maar wel overkill.

    Ik zou de bedrijfsnaam en de adressen scheiden, een bedrijf kan immers meerdere adressen hebben (leverings- en factuuradres bijvoorbeeld).
  • [quote:37765b3c3a="Bill Gates"]Zoals jij beschrijft is wellicht ideaal, maar wel overkill.[/quote:37765b3c3a]In dit geval is het idd misschien een beetje overdreven, maar betekent dat dat het altijd per geval verschillend is in hoeverre je gaat normaliseren? De werkelijke database is natuurlijk wat complexer, maar het gaat mij hier dus om de gedachte achter het normaliseren, waarom doe je het?

    - Bas
  • [quote:e810ae4fa3]What is normalisation?

    Normalisation is a process whereby the tables in a database are optimised to remove the potential for redundancy. Two main problems may arise if this is not done:

    * Repeated data makes a database bigger.
    * Multiple instances of the same values make maintaining the data more difficult and can create anomalies.

    I'm not going to develop the idea of specific anomalies much here, but to briefly illustrate an update anomaly imagine the problem of updating a customer address. If there are multiple instances of that customer in a database, any query designed to update the address will have to update them all. That may seem easy - as we've seen in previous workshops, SQL is quite capable of updating information based on field values. But if one of those field values (say an instance of customer name) has been input incorrectly, then the query would fail to update the address in that row.

    Normalisation aims to remove this redundancy by applying rules in a series of stages, splitting tables and creating relationships between unique identifiers (keys), to ensure that the database table structure is efficient, but data can still be accurately manipulated. It can also be used in conjunction with other database modeling techniques, such as Entity-Relationship diagrams, but for simple databases normalisation can sometimes be enough.

    Before we begin looking at the stages of normalisation it is worth having a brief look at some of the relational database concepts that inform the process.[/quote:e810ae4fa3]

    5 verschillende tabellen is overbodig tenzij je denkt dat een bedrijf niet precies 1 adres, huisnummer, postcode en plaats heeft.
    Wanneer een bedrijf meerdere adressen kan hebben is de oplossing van BG het 'best'.
    Overigens bepaalt adres en huisnummer postcode en plaats, dus die laatste 2 zou je ook weer in een aparte tabel kunnen zetten. Twee adressen kunnen dan naar eenzelfde postcode_plaats_id wijzen, die staat voor een combinatie van postcode en plaats. Dan zet je nl geen 'dubbelen' in je tabel (redundantie).

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.