Avatar billede tif12345 Nybegynder
11. januar 2008 - 00:10 Der er 13 kommentarer og
1 løsning

Normaliserings regler/former (database)

Nogen rar sjæl der kan forklare mig hvad forskellen på 1 2 og 3 normaliseringsform er ?

Jeg ved så meget at man normaliserer for at eliminere eventuel redundans og man (helst) skal ende i 3 normalform.

Men hvad afslører at det man har lavet lige præcis er i 1 normalform eller for den sags skyld 2 normalform?? Der må være nogle regler som spiller ind?
Avatar billede a1a1 Novice
11. januar 2008 - 00:24 #1
du har jo selv svaret ;o)

hvis man er "normaliseringsfreak" så har du f.eks. postnummer og by i sin egen tabel og referer til den/byen/postnummer via "ID" (tabel id). Jeg "smider" for det meste bare postnummer og by ned i f.eks. bruger tabellen (data kommer dog som regel fra en "postnummer" tabel, som "ryger" direkte i databasen). Det er ikke normaliseret, men det er en del hurtigere at hente ;o)

Du skal ikke gå for meget op i det, det er min mening...

Lav din database så DU kan finde ud af den, men du må godt "tænke" lidt du skal ikke f.eks. skrive brugernavn (til f.eks. et svar her på exp) i databasen, men brugerens ID)

;o)
Avatar billede roenving Novice
11. januar 2008 - 00:43 #2
Alt afhængig af din databases kompleksitet og størrelse kan der være fra negativ performance-ændring til ganske betydelig performance forbedringer ved at normalisere mere eller mindre ...

Har du en liste, hvor din allernærmeste familie står, vil det være vildt overkill at lave en postnummer-tabel, en job-tabel m.m.m. (det kan faktisk ofte betale sig bare at sætte det ind i et Excel-ark eller en Office (adresse-)liste !-), men har du en database over 30.000 brugere af et-eller-andet, som du skal slå op i på alle mulige måder, kan du opnå betydelige fordele ved at normalisere ...

Prøv at google: http://www.google.dk/search?hl=da&q=normalisering&meta= -- andet link i min søgning: http://www.hager.dk/noter/m0enot01.html !o]
Avatar billede a1a1 Novice
11. januar 2008 - 00:59 #3
roenving -> flot eksempel, beskriver det perfekt (normaliseringsformerne) ;o)

MEN, kan du ikke give mig ret i at det er hurtigere at søge i en database (efter f.eks. bynavn), hvor det (bynavn) ligger sammen med/i "bruger" tabellen?

Nu er bynavne og postnumre ikke noget der ændrer sig særlig tit, så der "skal" man ikke normalisere, andre "ting" skal man... produkter f.eks. (hvis du ændrer pris skal det kunne ses "alle steder" med det samme), så er det ikke smart at have en anden tabel med navn, pris osv...
Avatar billede a1a1 Novice
11. januar 2008 - 01:02 #4
hvis du går helt N3 "amok" så skal alle navne, gader, biler osv også være "normaliseret" ;o)
Avatar billede roenving Novice
11. januar 2008 - 01:10 #5
Det er korrekt, netop derfor lægger jeg også ud med at problematisere behovet for normalisering ...

-- og præcis opslag/søgning har jeg jo også fat i, relationelle professionelle databaser vil oftest performe betydeligt bedre ved fuld normalisering, men skal du finde de familiemedlemmer, der kører i Wartburg, vil søgningen nok være hurtigere i et Excel-ark, hvor bil-mærket er en kolonne ...

-- skal du derimod søge det i en meget omfattende database, vil det være betydeligt mere effektivt at finde nøgle-id på den record, der indeholder bilmærket og så finde de stamrecords, der indeholder den fremmednøgle !-)

Skal man skyde med kanoner, er det uhensigtsmæssigt at forsøge at ramme gråspurve !o]
Avatar billede a1a1 Novice
11. januar 2008 - 01:29 #6
-- skal du derimod søge det i en meget omfattende database, vil det være betydeligt mere effektivt at finde nøgle-id på den record, der indeholder bilmærket og så finde de stamrecords, der indeholder den fremmednøgle !-)

Ja, det kan det være hvis dine indexer er på plads (går udfra at du mener søger efter f.eks. bmw i "bilmærke tabellen", derefter "matcher" db'en med "anden" record ) ;o)
Avatar billede roenving Novice
11. januar 2008 - 01:33 #7
Jepz, nøgle-indexer er betydeligt mere effektive, og sådan som jeg har forstået det, vil de også fylde adskilligt mindre og på den måde gavne effektiviteten i de 'professionelle' databaser ...
Avatar billede a1a1 Novice
11. januar 2008 - 01:47 #8
ja da "integere"(tal) "fylder" jo ikke så meget som bogstaver og er "nemme" at håndtere, f.eks. "giv mig firmaet med id nr 1", eller "giv mig firmaet der hedder toms"...

lidt normalisering er "ok", og effektivt (nødvendigt)... Men der er undtagelser....
Avatar billede Slettet bruger
11. januar 2008 - 19:24 #9
En stor ikke-normaliseret database bliver da også et mareridt at vedligeholde/holde opdateret. I stedet for at ændre en given værdi eet sted, skal man måske ændre den rigtig mange steder. Hvis man glemmer et af stederne, vil dataintegriteten være ødelagt. Så 3 NF må da være at foretrække.
Avatar billede roenving Novice
12. januar 2008 - 16:50 #10
I en stor database, ja ...

I den lille over familiemedlemmerne, vil det være mere logisk at ændre navnene på tante og onkel og fætre og kusiner i familien, hvis den familie ændrer efternavn !-)
Avatar billede arne_v Ekspert
13. januar 2008 - 02:55 #11
Hvis det er adresserne til dem man skal sende julekort, så er alt jo godt nok.

Men skal man lave en seriøs database, så skal man altid starte med at normalisere
til mindst 3NF/BCNF. Så performance tester man.

Og hvis:
  * man har et alvorligt performance problem
  * tilføjelse af index ikke kan løse problemet
  * ens database understøtter ikke materialized views
så kan man begynde at eksperiementere med denormalisering.
Avatar billede petersen7913 Forsker
15. januar 2008 - 15:59 #12
Noget helt andet, som taler til fordel for en normaliseret database er, at det er måske ikke dig selv, der skal vedligeholde den ......

Så udover normalisering er det vigtigt med en konsekvent og gennemtænk navnekonvention ;-)
Avatar billede tif12345 Nybegynder
16. januar 2008 - 00:58 #13
Uha, godt at se man kunne sætte en lille konstruktiv debat igang omkring emnet :) Men rigtig gode svar, har helt sikkert gjort mig klogere..

roenving og a1 smid lidt et svar begge, så smider jeg nogle points i nakken på jer :)
Avatar billede roenving Novice
17. januar 2008 - 00:11 #14
Velbekomme '-)
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