SQL Academy · Lektion

Primærnøgler og entydighed

Forstå primærnøgler, surrogatnøgler kontra naturlige nøgler, sammensatte nøgler, og hvorfor hver række har brug for en entydig identifikator, De kan stole på.

Lektion 2 af 413 trin

Primærnøgler og entydighed er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvorfor hver række har brug for et unikt ID

Hvis du sikkert skal opdatere eller slette en bestemt række, skal du kunne pege entydigt på den.

  • Der kan godt findes to brugere med navnet "Alice Adams"
  • Men der må IKKE findes to brugere med id = 42
  • Den unikke identifikator kaldes en primærnøgle

Erklær en primærnøgle

Du markerer en kolonne som primærnøglen, når du opretter tabellen:

CREATE TABLE products (
  id    BIGSERIAL PRIMARY KEY,
  sku   VARCHAR(50) NOT NULL,
  name  VARCHAR(200) NOT NULL,
  price NUMERIC(10,2) NOT NULL
);

Primærnøgle = NOT NULL + UNIQUE

En PRIMARY KEY håndhæver automatisk:

  • NOT NULL — primærnøgleværdier må ikke mangle
  • UNIQUE — to rækker må ikke dele den samme primærnøgleværdi

Databasen opretter også et unikt indeks på primærnøglen, så opslag efter id er hurtige.

Surrogatnøgler kontra naturlige nøgler

Du har to valgmuligheder for primærnøglen:

  • Surrogat — et syntetisk ID, som databasen genererer (BIGSERIAL, UUID). Mest almindeligt i moderne apps.
  • Naturlig — en identifikator fra den virkelige verden (e-mail, ISBN). Risikabelt: Folk ændrer deres e-mailadresser.

Bedste praksis: Brug et surrogat-ID, og tilføj en UNIQUE-begrænsning på den naturlige nøgle.

BIGSERIAL: heltal med automatisk inkrementering

I PostgreSQL opretter BIGSERIAL en 64-bit-kolonne med automatisk inkrementering, der er understøttet af en sekvens.

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  total NUMERIC(10,2) NOT NULL
);

-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);

UUID-primærnøgler

Et alternativ er et 128-bit UUID, som er nyttigt, når ID'er skal være unikke på tværs af systemer eller genereres på klientsiden.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE sessions (
  id    UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id BIGINT NOT NULL,
  ip    INET
);

Sammensatte primærnøgler

Nogle gange er den naturlige identifikator en kombination af kolonner:

CREATE TABLE order_items (
  order_id  BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity  INT NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per order

UNIQUE-begrænsninger kontra primærnøgle

Du kan erklære andre kolonner som unikke uden at gøre dem til primærnøglen:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob');  -- ERROR

Hvad sker der ved en indsættelse af en duplikat

Hvis du forsøger at indsætte en dublet af en primærnøgle, afviser databasen hele sætningen:

ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(42) already exists.

Det er godt — det forhindrer ubemærket datakorruption.

Opslag af rækker via primærnøglen er hurtigt

Det unikke indeks på primærnøglen giver dig opslag med O(log n), selv ved milliarder af rækker.

-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;

Genbrug ikke ID'er

Selv når du sletter en række, må du IKKE genbruge dens primærnøgle. Andre tabeller eller eksterne systemer refererer måske stadig til den. Lad sekvensen blive ved med at tælle op — ID'er er billige.

Opsummering

Primærnøgler giver hver række en stabil, unik reference.

  • Foretræk surrogatnøgler (BIGSERIAL eller UUID)
  • Brug UNIQUE til naturlige nøgler, der ikke må være dubletter
  • Sammensatte primærnøgler modellerer "dette par skal være unikt"

Hurtigt tjek

Hvad håndhæves implicit af en PRIMARY KEY?

Gratis at komme i gang

Lær SQL med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “Primærnøgler og entydighed” gratis?

Ja — hele teksten til “Primærnøgler og entydighed” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Primærnøgler og entydighed”?

Forstå primærnøgler, surrogatnøgler kontra naturlige nøgler, sammensatte nøgler, og hvorfor hver række har brug for en entydig identifikator, De kan stole på. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Primærnøgler og entydighed”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne SQL Academy-lektion?

Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvad et RDBMS er, og hvorfor tabeller er vigtige
  2. Primærnøgler og entydighed
  3. NULL: den tredje sandhedsværdi
  4. Oversigt over datatyper: INT VARCHAR DATE BOOLEAN
← Tilbage til SQL Academy