Citat:
Originally posted by Magnus_A@Jan 12 2009, 08:45
Jag ska inte debattera normalisering, och Connys förslag att normalisera databasen verkar vara väldigt bra ur alla synvinklar, men det finns tillfällen då det är smart att serialisera egenskap:värde-par och lägga dem som text i ett värde i en kolumn.
Behovet kan uppkomma då man har väldigt många aparta värde:egenskapspar som sällan återkommer eller som dynamiskt förändras. Om man dessutom inte behöver söka på dem så kan det vara motiverat att stuva undan dem på detta viset. Behöver man söka på dem eller använda dem i beräkningar så är det definitivt värt att bryta ut dem och lägga dem i egna kolumner eller tabeller. Risken är då att tabellen blir övernormaliserad genom att samma information finns på flera ställen, vilket kräver att man har ordning på varifrån värdena hämtas och vilken information som som ska kopieras varifrån.
|
Övernormalisering har inget med att samma värde finns på flera ställen.
När man inte har normaliserat korrekt så kan man få risk för redundans (det är när samma värde förekommer på flera ställen i databasen) med uppenbara uppdateringsproblem. Normalisering är den metod man använder just för att undvika redundans i databasen.
Som Magnus skriver så finns det även data som inte behöver bearbetas maskinellt utan enbart är användarinmatad information och som man aldrig behöver bearbeta på ett strukturerat sätt, då och endast då kan man man låta bli att normalisera den informationen, men det är viktigt att man är medveten om detta för det blir ett helsike om det senare visar sig att man behöver bearbeta sån information maskinellt. I de projekt jag arbetat har man oftast normaliserat bort detta problem eftersom det får så stora kostnader att rätta till en slarvigt normaliserad databas i efterhand. Jag har arbetat i projekt där man fått bygga om hela databasen och därmed samtliga applikationer som använder den databasen pga slarvig normalisering (gissa om det blev stora kostnader).
Att designa databaser är ingen trivial fråga utan man måste verkligen ha klart för sig vilka begrepp som är vesäntliga för verksamheten och hur de ska organiseras på ett optimalt sätt, det är därför det är så viktigt att man inte hastar och slarvar just med modellering av begreppen.
Så kontentan är att det sällan eller aldrig är särskilt optimalt eller effektivt att slarva med modellering eller normalisering av databaser, konsekvenserna av slarv kan bli kolossalt kostsamma för ett sånt system.