Hoe ver rationaliseren
Misschien een leuk discussie punt waar ik zelf al lange tijd over na zit te denken en eigenlijk gewoon niet in kan beslissen.
In hoeverre rationaliseren jullie een database?
Bijvoorbeeld,
We maken een systeem waar personen in geregistreerd en beheerd kunnen worden. Deze personen moeten ingedeeld worden op locaties.
Eigenschappen:
Bekende attributen:
vooraam, tussenvoegsel, achternaam, adres, postcode, woonplaats, provincie, land, telefoonnummer, mobiele nummer, fax nummer, gebruikersnaam, wachtwoord etc.
Je kan ervoor kiezen om het zeer gerationaliseerd te maken met tabellen als:
persoon:
voornaam, tussenvoegsel, achternaam, geslacht, geboortedatum
account:
persoon_id, gebruikersnaam, wachtwoord, activatiecode, laatste_login
emailadressen:
persoon_id, email, primair(1/0)
telefoonnummers:
persoon_id, nummer, type(vast, mobiel, fax, werklast, werkmobiel) primair(1/0)
adressen:
persoon_id, straat, huisnummer, achtervoegsel, postcode, plaats, provincie, land_id, type(factuur, woon, bezoek, etc)
landen:
naam, 2-letter, 3-letter
en ga zo maar door. Uiteraard heeft elke tabel een eigen id kolom, evenals kolommen met aangemaakt_datum, update_datum, verwijder_datum
Hoever gaan jullie met rationaliseren?
groetjes,
Patrick
Persoonlijk vind ik het er aan liggen hoe vaak je welke data nodig hebt. Heb je altijd één bepaald stukje nodig is het uiteraard handig om stukken op te splitsen om de snelheid te waarborgen.
Natuurlijk is er kans dat er 2 leden op 1 adres wonen, dan zou je theoretisch al een koppeltabel (many-to-one) kunnen gebruiken.
Maar wat bespaar je er mee?
Hetzelfde met gebruikersnaam en wachtwoord. Welk persoon heeft meerdere gebruikersnamen? Heeft een gebruikersnaam meerdere personen?
Dit laatste is wel mogelijk (denk aan accounts die je gebruikt namens bedrijven: daar zitten meerdere mensen op 1 account te werken).
Maar heb je dan echt de adressen en namen van de personen (en niet van het bedrijf) nodig?
Daarnaast is het helemaal niet erg om veel kolommen in een tabel te hebben.
Tenzij je SELECT * doet, maar dat doen we natuurlijk al jaren niet meer.