Conny Westh |
2011-03-14 10:54 |
Citat:
Ursprungligen postat av Clarence
(Inlägg 20397588)
Naturliga primärnycklar ger nästan alltid, liksom i detta fall, onödigt stora primärnycklar vilket gör att det behövs en större minnesmängd för samma data. Om man dessutom använder innodb så får man också automatiskt en tidsanpassad klustring av datan då man har ett auto increment värde. Även sekundärindex för innodb blir mer effektiva då primärnycklarna används som adress till raden. Sen finns det visserligen många fall där sådan detalj-prestanda inte behövs tas vidare mycket hänsyn till men man bör iallafall vara medveten att man allt som oftast väljer bort prestanda för tydlighet med en naturlig primärnyckel.
|
Att optimera prestanda är inget självändamål.
När man bygger en databasstruktur i en relationsdatabas så är det viktigaste att man får en inbyggd kvalitetskontroll på informationen man lagrar.
Då är naturliga primärnycklar en naturlig del av det arbetet. Främmande nycklar som då länkar till primärnycklar är en annan del. Atomära egenskaper ytterligare en. Att följa normalformernas definitioner ytterligare en.
Att använda syntetsiska primärnycklar ska manundvika och endast använda i de fall när det inte finns en naturlig primärnyckel eller där en naturlig primärnyckel kommer att bestå av orimligt många kolumner (typ; >7 kolumner).
Den "prestandavinst" man vinner på att använda syntetiska PK är oftast så marginell att den inte är värd att beakta, i de flesta fall. Man förlorar så otroligt mycket mer vad gäller den inbyggda kvalitetskontrollen av information när man gör det.
Använder man naturliga PK så kan man som människa utföra okulärbesiktning av data på ett enklare sätt än med syntetiska PK. Du kan m a o direkt se om set står NOK i en kolumn där du för väntar dig att det ska stå SEK, men om det står 4 i stället för 7 så finns det inget naturligt sätt för en människa att avgöra om informationen är korrekt eller inte. Man måste ha mycket mer komplexa sätt att kontrollera om informationen är korrekt och det innebär att det är lättare att man får strukturella fel i sin databas och sina applikationer.
|