Normalisatie

Door Klaasjan Boven, 22 jaar geleden, 10.452x bekeken

Een inleiding op

Gesponsorde koppelingen

Inhoudsopgave

  1. Het datamodel.
  2. Waarom schrijf ik deze tut.
  3. In deze tut zal ik het volgende behandelen
  4. Wat is normalisatie van een database.
  5. de bedenker
  6. Nu een veel belangrijker vraag
  7. 2e reden
  8. de query

 

Er zijn 29 reacties op 'Normalisatie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


22 jaar geleden
 
0 +1 -0 -1
Hij staat er weer, gelukkig.
Even en toevoegen.
CB2thephp
CB2thephp
22 jaar geleden
 
0 +1 -0 -1
Leve normalisatie, Zeer goede tut. Niks over te melden.
Mitch X
Mitch X
22 jaar geleden
 
0 +1 -0 -1
Elwin had ook al zo'n tut gemaakt :)
Erik Rijk
Erik Rijk
22 jaar geleden
 
0 +1 -0 -1
Uhm,

Waarom was ie eigenlijk tijdelijk weg?

:/
Klaasjan Boven
Klaasjan Boven
22 jaar geleden
 
0 +1 -0 -1
Bassie() had een foutje gemaakt bij het verwijderen van de laatste pagina :(
Robert Deiman
Robert Deiman
22 jaar geleden
 
0 +1 -0 -1
Leuke tut, normaliseren is echt nuttig :)
maar even een vraagje he, kent iemand van jullie ook de NIAM methode? En zo ja, is dat ook een goede om hier aandacht aan te besteden?


22 jaar geleden
 
0 +1 -0 -1
@Robert
Quote:
NIAM (Natural language Information Analyse Method) is een informatie analyse/data modelering methode en is onder andere ontwikkeld door Prof. Dr. Ir. G.M. Nijssen in de jaren '70. De kenmerk van NIAM is dat het analyseren van informatie door middel van de "menselijk gesproken taal" wordt uitgevoerd. Dit heeft als voordeel dat het analyseerproces in samenwerking met de gebruiker uitgevoerd kan worden. Zo ontstaan er geen verkeerde interpretaties door de gebruiker en/of de analist.Wikipedia NL
? Begrijp er nog geen snars van als ik het zo lees maar als je een artikel wil schrijven is dit natuurlijk erg leuk.
Klaasjan Boven
Klaasjan Boven
22 jaar geleden
 
0 +1 -0 -1
@Webmakerij tags toegevoegd
Barman V
Barman V
22 jaar geleden
 
0 +1 -0 -1
De tutorial heet 'Normalisatie'. Ik mis de onderwerpen NV0, NV1, NV2, NV3. Dus een korte uitleg en toepassing per normaalvorm zal deze tutorial verbeteren.
Ik lees alleen hoe je je database effici?nt kan vormgeven.

Als ik deze tutorial lees kom ik er bijvoorbeeld nog niet achter wat bijvoorbeeld NV2 inhoudt.
Frank -
Frank -
22 jaar geleden
 
0 +1 -0 -1
@Barman: Zie http://www.phphulp.nl/php/tutorials/3/150/ Deze tutorial vind ik persoonlijk beter. Al is het goed dat Klaasjan weer eens de aandacht vestigt op dit lastige onderwerp.
Remco nvt
Remco nvt
22 jaar geleden
 
0 +1 -0 -1
Waarom werk je door elkaar?
Kan je het niet beter eerst uitleggen hoe ze goede tabellen kunnen verzinnen alsvoor je er er een normalistatie overheen gooit. Alhans dat zegt mijn leraar in me college's .
Frank -
Frank -
22 jaar geleden
 
0 +1 -0 -1
@Remco: Wat versta jij onder 'goede tabellen verzinnen' ? Wanneer ik een database moet opzetten, verzamel ik alle data die moet worden weggeschreven en ga normaliseren. Wanneer ik klaar ben met normaliseren, blijkt welke tabellen ik nodig heb. Dan nog even goede namen verzinnen en klaar is kees.
Robert Deiman
Robert Deiman
22 jaar geleden
 
0 +1 -0 -1
@Remco

Dat is "dom werken" volgens mij.. Als je eerst al "goede tabellen" gaat verzinnen, ga je dus al dingen groeperen, maar b de 0e normaalvorm heb je alle data weer samen, dus niets van die door jou gemaakte tabellen blijft over.
Als je wel van plan bent om te gaan normaliseren, dan zou ik niet eerst "goede tabellen" gaan verzinnen, het is dan alleen maar extra werk.

Als je bedoelt dat je ook goede tabellen kan maken, zonder normaliseren, dan heb je gelijk. Als je bijvoorbeeld gaat nadenken over dubbele waarden of redundantie, dan kan je op goede tabellen uitkomen. Zeker wanneer het een "kleine datahoeveelheid en verscheidenheid" betreft. Met een paar kolommen, is het vrij gemakkelijk te zien en uit te zoeken wat wel en niet kan, en hoe je redundantie kan voorkomen.
Zogauw het wat complexer wordt, zou ik deze optie laten vallen, omdat het risico te groot is dat je fouten maakt die je later weer zou moeten herstellen. Dus ik zou normaal gesproken meteen ook normalisatie doen. (of NIAM, maar ik vind normalisatie gemakkelijker en sneller in de uitvoer, al denk ik dat je bij NIAM, als je het op de goede uitvoerd, minder fouten zal maken)
Jurgen assaasas
Jurgen assaasas
22 jaar geleden
 
0 +1 -0 -1
zeer goede tut maar ik ??n ding snap ik niet. Als ik de query wil uitlezen en weergeven op het scherm. Hoe doe ik dit dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php


$query
= (de query uit de tut)

$result = mysql_query($query) or die(mysql_error())
while($data.a = mysql_fetch_array($result){

echo $data.a['klant_id']

}

?>


iemand een idee?
Robert Deiman
Robert Deiman
22 jaar geleden
 
0 +1 -0 -1
Zo doe je het bijna goed, je vergeet elke keer de regel af te sluiten met ;.

Verder heb ik nieuws over mijn eventuele NIAM tutorial.. Ikzou zo zeggen koop daar een boek voor, want het wordt wel een hele lange en uitgebreide tutorial om te maken.. Je krijgt bij Niam heel veel schematische weergaven, ik ben nog niet op 1/8 deel, en ik zou nu al op 3 goedgevulde pagina's zitten.
Jurgen assaasas
Jurgen assaasas
22 jaar geleden
 
0 +1 -0 -1
jah dit snap ik maar is de structuur goed. ik hoef dus niet elke keer een nieuwe query te maken maar gewoon een letter/nummer/naam whatever erachter en dan AS letter/nummer/naam en dan zou het moeten werken?
Robert Deiman
Robert Deiman
22 jaar geleden
 
0 +1 -0 -1
Neej, wat je kan doen is dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
$query
="SELECT COUNT(klant_id) AS aantal,klant_id FROM tabel GROUP BT klant_id";
$result = mysql_query($query) or die(mysql_error())
while($data_a = mysql_fetch_array($result){

echo $data_a['klant_id'].'<br/>';
echo $data_a['aantal'];

}


?>


Zo zou het duidelijk moeten zijn hoe het werkt.. (alleen als je NIET de informatie uit de kolom ophaalt, dus bijv een TIME_FORMAT(), SUM(), COUNT() enz. gebruikt, dan moet je AS gebruiken. Het ophalen doe je met de kolomnaam (klant_id in het voorbeeld) of met de alias, (aantal in het voorbeeld) die je aangeeft door de AS in MySQL.)
Frank -
Frank -
22 jaar geleden
 
0 +1 -0 -1
@Robert: De volgende query is niet goed:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$query
="SELECT COUNT(klant_id) AS aantal,klant_id FROM tabel";
?>

Hier ontbreekt een GROUP BY. Deze query hoort dus ook te mislukken. Verder is het stukje php-code ook erg vreemd. Je kunt namelijk niet in 1 query alle klant-id's ophalen en het totaal aantal klanten. Dat valt niet te matchen. Met een GROUP BY kun je wel per klant tellen hoevaak deze voorkomt. Je maakt namelijk groepjes. En met deze groepjes kun je gaan tellen. Meer info over GROUP BY kun je bv. vinden op http://docent.ehsal.be/vakken/infoburo/Access/SQL.html#_Toc415901456

Verder ben je nooit verplicht om een alias (AS) te gebruiken, maar ben je wel heel dom bezig wanneer je geen alias gebruikt voor gegevens die niet (of niet op deze wijze) in de database staan. Bv. een opgemaakte datum of een berekend gegeven.
Robert Deiman
Robert Deiman
22 jaar geleden
 
0 +1 -0 -1
@Frank

Ohja, de Group by vergeten, stom van me, zal het meteen aanpassen, dankjewel voor de tip.
Verder heb ik alleen nooit gezegt dat je AS M??t gebruiken, maar ik vind het net als jij dom als je het niet gebruikt. Het voorkomt fouten en is voor jezelf ook nog eens veel duidelijker om mee te werken, vandaar dat ik het meteen zo deed.
(en ook om de reactie daarvoor van Jurgen wat te verduidelijken)
Majid Ahddin
Majid Ahddin
22 jaar geleden
 
0 +1 -0 -1
ik snap nog steeds niet wat nou de eerste vorm is, wat de tweede, en wat de derde. En hoe, zo mogelijk, verdere vormen nog iets toe zouden kunnen voegen?
http://www.yapf.net/Articles/ArticleView/789
Die is duidelijker
Klaasjan Boven
Klaasjan Boven
22 jaar geleden
 
0 +1 -0 -1
@Rudy klopt

De naam van mijn tut is niet heel sterk gekozen. Ik heb dit geschreven zodat het voor iedereen duidelijk is waarom je gegevens niet dubbel moet opslaan. Tevens speelde dit heel errug op het forum toen ik dit schreef
Kevin
Kevin
21 jaar geleden
 
0 +1 -0 -1
Ik ben altijd geleerd: wanneer je start met de data-analyse zie een database voor je als een stel supersnelle apen die op magische wijze de data te voorschijn moeten toveren. Deze apen weten niets van tabellen, join constructies, etc af. Het zijn apen met een kaartenbak.

Dit heeft mij altijd geholpen om eerst na te denken over de data die ik (zou moeten) hebben en hoe deze bij elkaar te plaatsen. Wanneer ik deze data analyse heb afgerond kan ik eens gaan kijken naar een dbms.

Wanneer ik alles bij elkaar heb gegooid ga ik het weer uit elkaar trekken in mijn pogingen de database te normaliseren en heel misschien wel te denormaliseren - wat soms nuttig kan zijn.
- wes  -
- wes -
21 jaar geleden
 
0 +1 -0 -1
welke tbspatient heeft je dat geleerd dan :))
Jacco Engel
Jacco Engel
21 jaar geleden
 
0 +1 -0 -1
Jij?
Robert Deiman
Robert Deiman
21 jaar geleden
 
0 +1 -0 -1
Mij ontgaat ook geheel de logica van de supersnelle apen. Mij is geleerd dat je een database moet zien als "een geheel van tabellen waar je op zo ??nvoudig en eenduidig mogelijke manier de data in op moet slaan. Dubbele gegevens komen dus niet in een database voor alsmede gegevens die je 'realtime' kan berekenen of bepalen.
Tevens moet je ervoor zorgen dat je rekening houdt met wat je met de gegevens wil doen, en de gegevens voldoende splitst, om bij wijzigingen tegen zo min mogelijk problemen aan te lopen. (bijvoorbeeld het splitsen van voornaam, achternaam en tussenvoegsel kan voor problemen zorgen als je dit niet doet en op een bepaald moment iets gesorteerd wil hebben op achternaam)"

Neem je dit als uitgangspunt, dan zit je volgens mij altijd goed.
Klaasjan Boven
Klaasjan Boven
21 jaar geleden
 
0 +1 -0 -1
Robert,

Ik ben het helemaal met je eens
Kevin
Kevin
21 jaar geleden
 
0 +1 -0 -1
De zogenaamde TBS patient doceert verscheidene vakken informatica waaronder database ontwerp, OO e.a. aan een hogeschool - bedrijfskunidge informatica. Hij heeft o.a. een deel van de domeinanalyse voor het toenmalig GAK gedaan. Ook heeft hij OO and DB technieken geimplemetenteerd bij ING. :-)

Het doel van de apen was juist om niet na te denken over de techniek bij de data analyse. De techniek komt na de analyse. Eerst moet je weten wat je hebt, dan ga je kijken hoe je het beste met de data om kunt gaan. Wat nodig is en hoe.
Kevin
Kevin
21 jaar geleden
 
0 +1 -0 -1
@Robert: Dat een database meer is dan alleen een verzameling tabellen blijkt uit het feit dat er meer database systemen bestaan dan alleen het relationele model. Denk aan een hierarchische of netwerk database. Een voorbeeld van een hierarchische database zou kunnen zijn de muziek collectie op iemands harde schijf.

Ook de oude kaartenbakken waren databases. De techniek zegt in feite niets over het fenomeen database. Natuurlijk is het relationele model veruit de bekendste en voor sommige de enige. Langzaam aan zal ook een nieuwere techniek opkomen namelijk het odbms (object database management system) die dus volledig los is van het oude relationele model (tabellen die koppelingen met elkaar aan gaan via een foreign key constraint.) Voor zover ik weet het het odbms nog steeds niet helemaal succesvol. OO is in feite ook relatief nieuw, vergeleken met rdbms-en.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Robert Deiman
Robert Deiman
21 jaar geleden
 
0 +1 -0 -1
Naja, goed maar wat ik bedoelde meer dat het een verzameling gegevens is. Een relationele database is het type dat het gemakkelijkst te onderhouden (van de stabiele typen)
Het is inderdaad meer dan een verzameling tabellen, maar in deze context kan je het wel zo zien. Normaliseren doe je namelijk bij een relationele database.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Het datamodel.
  2. Waarom schrijf ik deze tut.
  3. In deze tut zal ik het volgende behandelen
  4. Wat is normalisatie van een database.
  5. de bedenker
  6. Nu een veel belangrijker vraag
  7. 2e reden
  8. de query

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.