01. december 2004 - 13:43Der er
5 kommentarer og 1 løsning
Spørgsmål til database design
Jeg har altid prøvet et overholde normalformerne, men nu lige pludselig er der en der siger til mig at det bruger man ikke mere, for maskinerne idag er blevet så hurtige at det har ikke noget at sige. Er det korrekt?
Det skulle undre mig meget at lige pludselig smider de gode gamle normalformer væk. Man bruger jo heller ikke normalformerne til at øge performance, men til at sørge for at ens databasedesign er så overskueligt som muligt, og at man ikke gemmer de samme oplysninger flere steder. Dette er ikke kun for at holde størrelsen på databasen nede, men hvis samme værdi ligger flere steder, risikerer man at den ikke bliver opdateret alle stederne. Så der er bestemt ikke noget galt med at bruge normalformerne!
Formålet med normal former er ikke at optimere hastighed men at sikre konsistente data i databasen.
Ofte har normalisering endda en negativ effekt på performance.
Det kan man så vælge at leve med eller man kan overtræde normaliserings reglerne hvis man finder det nødvendigt.
Min erfaring er iøvrigt at data mængderne vokser lige så hurtigt som database serverne bliver hurtigere og at det derfor er næærmest status quo med hensyn til performance.
Jeg giver arne ret det meste af vejen, men er altså ikke enig i at normalisering altid kan have en negativ performance. Jeg vil faktisk sige tværtimod og oveniøbet kan man sige at normaliseringen udnytter hurtigere maskiner endnu bedre.
Normalisering af 2.grad siger at du skal fjerne redundant data og lave en relationstabel. Tænk hvis du nu ikke havde en relationstabel, mn måske skulle lede efter et bestemt ord imellem 10M rækker. Ja et index vil nok hjælpe på søgningen, men stadigvæk er det ikke hurtigere end at søge på en integer (som jo tilmed kunne være en primary key).
Tilsidst vil jeg lige tilføje at det igen afhænger utroligt meget af ens design om hvorvidt en normalisering vil kunne svare sig eller ej og man ser ofte denormaliserede tabeller rundt omkring fordi de er det nemmeste. Og hvem tænker også på den slags ved tabeller under 100K rækker.
Der er jo nok en grund til at highend database supporterer materialized views.
Det jeg synes er vigtigt er at man starter med fuld normalisering, så tester man performance, hvis den er accepatabel så forbliver man fuld normaliseret, hvis performance ikke er acceptabel så kan man jo prøve (blandt mange tiltag) at denormalisere for at slippe af med nogle joins, og hvis det hjælper (hvilket det absolut ikke altid gør), så kan man altså leve lykkeligt i denormaliseret tilstand
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.