Avatar billede Vivivroue Nybegynder
25. februar 2011 - 10:09 Der er 7 kommentarer og
1 løsning

Database normalisering.

Hej.

Jeg har netop lavet min første normalisering, og jeg vil høre om I vil tjekke den for mig.

www.vivid-design.dk/normalization.html

Det er som sagt helt nyt for mig.


På forhånd tak.
Avatar billede jakobdo Ekspert
25. februar 2011 - 10:45 #1
Jeg forstår ikke helt din side...
Men den eneste normalisering jeg ville lave, udfra dit første datagrundlag, var at lave en tabel til by og postnummer.
25. februar 2011 - 12:00 #2
Viveroque - velkommen til det spaendende emne normalisering.

Din foerste tabel, som vi maaske kan kalde Personer, er, som du allerede ved, ikke i nogen normalform fordi der er en gentagende gruppe:  Hver person kan have adskillige relationer saasom Friend, collage, boss.  Hvis vi saa antager at en person er i relation til en eller flere andre personer, for eksempel at Susan er Friend med Mark siden 2008-11-21 og colleage med Karen siden en anden dato har du flere problemer MED tabellen.

Du skiller saa, korrekt, relationerne ud i en saerskilt tabel, som jeg ville kalde Relationer i stedet for blot Table 2.

Men du kommer galt afsted derved at du synes at give Relationer fremmednoegle (FK) til Personer.  I saa fald kan en relation kun hoere til en enkelt person, og det stemmer ikke med at relationen Family hoerer til to forskellige personer. Du har en saakaldt mange-til-mange sammenhaeng hvor hver person kan have mange relationer og hver relation kan hoere til mange personer.

Det klarer du ved at lave en tredje tabel, Reference_Relation, som viser hvilke personer har hvilke relationer til hvilke andre personer fra hvilken rel_date.

Jeg stiller tabellerne op saadan som jeg foreslaar og med de data du har i din foerste tabel plus nogle jeg selv digter for eksemplet.  Jeg forenkler persontabellen til kun at indeholde en persons fornavn.

Referencer
ref_id Name
1      Susan
2      Mark 
3      Karen

Relations
ref_id relation
1      Friend
2      Colleague
3      Boss
4      Family

Reference_Relation
p_fra p_til relation Rel_date
1      2      1        2008-11-21
1      3      2        2008-11-22
2      1      3        2008-11-23
2      3      4        1983-01-23
3      1      1        2008-11-21
3      2      4        1983-01-23
FK fra p_fra og p_til til Personer.id og FK fra relationer til Relations.id

Saa person 1, Susan har med person 2, Mark relationen Friend siden 2008-11-21 og har med person 3, Karen, relationen colleague siden 2008-11-22 o.s.v.

Naar du saaledes har skilt den gentagne gruppe, relation, ud af Personer, saa er tabellerne i 1NF.

Og saa er tabellerne Relations og Reference_Relations samtidig baade i 2NF og i 3NF fordi ingen af kolonnerne i de tabeller er afhaengige af hinanden.

I tabellen Personer er kolonnerne adresse, zip, og town afhaengige af hinanden.  Nu er det mange aar siden jeg har boet i Danmark, saa jeg ved ikke om det er saaledes at hvis man kender en 'by' som for eksempel Odense NV, saa kender man ogsaa postnummeret.  I saa fald giver jeg jakobdo ret i at lave en tabel Towns med tre kolonner, id, town, og zip.  Persontabellen beholder saa kolonnen address, men i stedet for zip og town faar den en enkelt kolonne town_id med FK til Towns.id

Og saa er Persons ogsaa i 2NF, og fordi i alle tabeller alle kolonner er afhaengige af den Principal Key (PK) og ikke andet er tabellen i 3NF.
Avatar billede jakobdo Ekspert
25. februar 2011 - 12:46 #3
Haha, relationer havde jeg helt overset. :o)
Avatar billede Vivivroue Nybegynder
25. februar 2011 - 14:51 #4
Wow. Sikke et skønt og præcist svar. Jeg skal lige tænke lidt over det, før jeg rigtig forstår det.

Spændende emne? Var det ironisk ? :-)
Avatar billede jakobdo Ekspert
25. februar 2011 - 15:22 #5
Nej desværre. den smuttede lige. Normalisering går i bund og grund ud på at bygge sin database op, så data ikke skal skrives igen og igen. f.eks postnummer og bynavn. og man bør også se om man kan undgå "tomme" felter. feks kunne man have bygget din tabel som friend - yes/no osv
25. februar 2011 - 15:34 #6
Jeg finder emnet normalisering spaendende.  En gang omkring 1975 (hermed roeber jeg min alder) faldt jeg over en bog af en der hed Codd som handlede om relationelle databaser og om normalisering.  Jeg fandt det yderst interessant.  Codd skrev at han i sin bog kun diskuterede teorien, ikke komputere der skulle implementere teorien.  Hvad jeg ikke dengang vidste var at Codd var den der udviklede teorien og at den bog jeg laeste var et af hans oprindelige vaerker.  Da han udviklede teorien var komputere endnu ikke kraftige nok til at implementere den.  Saa cirka 15 aar senere, da de hierarkiske og link-baserede databaser blev mere og mere utilfredsstillende, fandt industrien, saasom Oracle, Codds teorier frem og begyndte at udvikle praktiske implementeringer af relationelle databaser. Da jeg saa endnu senere startede i mine it studier kom til databaser kunne jeg linke det til det jeg laeste mange aar tidligere.
27. februar 2011 - 18:09 #7
viviroque, du ville 'taenke over det foer du forstaar det.'  Hvordan gik det med at taenke?  Er det ved at falde paa plads?  Hvis du har problemer saa fortael hvor det kniber saa vi kan kikke paa det.  Ellers vil jeg foreslaa at du lukker spoergsmaalet.  Jeg opretter dette som svar idet jeg mener at have besvaret dit spoergsmaal.
Avatar billede Vivivroue Nybegynder
03. marts 2011 - 19:38 #8
Hej Christian. Det må du undskylde. Jeg kom helt fra det. Selvfølgelig skal du have dine point, og et stort tak her fra :) Det var storartet!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester