bassebhu skrev:
Hallå,
Måste man ha en primärnyckel i en relationstabell?
Jag har en tabell som länkar ihop två andra tabeller. Poster raderas, uppdateras och läggs till där hela tiden och varje gång autoökas det med ett nytt id. Kan jag skippa det fältet helt eller finns det något syfte med att ha det? Jag kan inte komma på vad jag skulle använda fältet till. Om jag behöver fältet gissar jag att det bör vara en bigint (20) eller liknande för att rymma efter ett par års användande.
Tack!
Om tabellen saknar Primärnyckel lagras den som en heap. Det är inget man vill ha stora mängder data lagrat i, och leder ofelbart till fullständig skanning av hela tabellen varje gång du behöver hitta ett värde.
Primärnyckeln gör att det finns ett index och att data lagras strukturerat.
En primärnyckel utgörs av en eller flera kolumner som [tillsammans] gör varje rad unik. Om du har en relationstabell mellan två andra tabeller, så bör primärnycklarna från de två tabeller du kopplar samman tillsammans bli en naturlig primärnyckel för din kopplingstabell.
Exempel:
Bil (Regnr, Märke, Modell, Konstruktionsår)
Person (Personnummer, Namn, Adress, Ålder...)
NuvarandeBilÄgare (Regnr, Personnummer, Inköpsår, Pris...)
En viss person (Kalle) kan äga 0, 1 eller flera bilar.
En viss bil (ABC 123) kan ha 1 eller flera ägare.
Men om ABC 123 finns ihop med Kalle i tabellen så kan det bara finnas en sådan rad, så dessa två kolumner kan användas som primärnyckel tillsammans.
Men om det är bättre eller sämre än att ha en inkrementell automatisk nyckel:
NuvarandeBilÄgare (ÄgarID, Regnr, Personnummer, Inköpsår, Pris...) beror på vad du använder tabellen till, hur mycket data du har i den, om det är viktigare att insättningar går fort än att sökningar gör det eller tvärtom, mm.
Om primärnyckeln är klustrad, så är tabellen sparad i samma ordning som de ingående kolumnerna är ordnade. Så om du har ett ÄgarID så hamnar nya rader alltid sist, medan om din primärnyckel är (Regnr, personnummer) så hamnar ny info i bokstavsordning på 1) Regnr 2) Personnummer, vilket gör insättningar långsammare men kan göra sökningar snabbare om man oftast söker på RegNr eller kombinationen Regnr, personnummer (i det här exemplet).