Jeg følger et par regler:
- Primære nøgler skal være så små som nødvendigt. Foretrækker en numerisk type, fordi numeriske typer er gemt i et meget mere kompakt format end tegnformater. Dette skyldes, at de fleste primære nøgler vil være fremmednøgler i en anden tabel såvel som brugt i flere indekser. Jo mindre din nøgle er, jo mindre indeks, jo færre sider i cachen vil du bruge.
- Primære nøgler bør aldrig ændres. Opdatering af en primær nøgle bør altid være udelukket. Dette skyldes, at det højst sandsynligt vil blive brugt i flere indekser og brugt som en fremmednøgle. Opdatering af en enkelt primær nøgle kan forårsage ringvirkninger af ændringer.
- Brug IKKE "dit problem primære nøgle" som din logiske model primære nøgle. For eksempel pasnummer, personnummer eller medarbejderkontraktnummer, da disse "naturlige nøgler" kan ændre sig i virkelige situationer. Sørg for at tilføje UNIQUE begrænsninger for disse, hvor det er nødvendigt for at håndhæve konsistens.
På surrogat vs naturlig nøgle henviser jeg til reglerne ovenfor. Hvis den naturlige nøgle er lille og aldrig vil ændre sig, kan den bruges som en primær nøgle. Hvis den naturlige nøgle er stor eller sandsynligvis vil ændre sig, bruger jeg surrogatnøgler. Hvis der ikke er nogen primærnøgle, laver jeg stadig en surrogatnøgle, fordi erfaringen viser, at du altid vil tilføje tabeller til dit skema og ønske, at du ville sætte en primærnøgle på plads.