SQL Academy · Lektion

Modellering af en blog: brugere, indlæg, kommentarer

Tegn et ER-diagram, identificér entiteter og relationer, og omsæt dem til et normaliseret SQL-skema.

Lektion 1 af 414 trin

Modellering af en blog: brugere, indlæg, kommentarer er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 1 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.

Domænet

En enkel blog: Brugere skriver indlæg, og andre brugere kommenterer på indlæg. Lad os omsætte det til et skema.

Entiteter

Tre centrale begreber:

  • Bruger — id, e-mail, navn
  • Indlæg — id, forfatter, titel, brødtekst, tidsstempel for publicering
  • Kommentar — id, forfatter, indlægget den hører til, brødtekst

Relationer

Kardinaliteter:

  • Bruger 1 ── ∞ Indlæg (en bruger skriver mange indlæg)
  • Bruger 1 ── ∞ Kommentar
  • Indlæg 1 ── ∞ Kommentar

Brugertabel

Begynd med brugere — de andre tabeller refererer til den:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  full_name VARCHAR(100) NOT NULL,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Indlægstabel

FK til users:

CREATE TABLE posts (
  id BIGSERIAL PRIMARY KEY,
  author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
  title VARCHAR(200) NOT NULL,
  body  TEXT NOT NULL,
  published_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Kommentartabel

To FK'er:

CREATE TABLE comments (
  id BIGSERIAL PRIMARY KEY,
  post_id BIGINT NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
  author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
  body TEXT NOT NULL,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Hvorfor ON DELETE CASCADE på kommentarer?

Hvis et indlæg slettes, er dets kommentarer meningsløse — lad databasen rydde dem op automatisk.

Hvorfor ON DELETE RESTRICT på forfatteren?

Slet ikke indhold lydløst, når en bruger forsvinder. Tving appen til først at foretage en blød sletning af brugeren eller tilknytte indholdet til en anden.

Udvidelse med etiketter (mange-til-mange)

Tilføj etiketter via en koblingstabel:

CREATE TABLE tags (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL UNIQUE
);

CREATE TABLE post_tags (
  post_id BIGINT REFERENCES posts(id) ON DELETE CASCADE,
  tag_id  BIGINT REFERENCES tags(id)  ON DELETE CASCADE,
  PRIMARY KEY (post_id, tag_id)
);

Trådede kommentarer

Selvrefererende kommentarer til svar:

ALTER TABLE comments
  ADD COLUMN parent_id BIGINT REFERENCES comments(id) ON DELETE CASCADE;

Blød sletning kontra hård sletning

I en blog er det ofte mere skånsomt at foretage en blød sletning af indlæg — ødelagte links fejler ikke i brugerens historik. Tilføj deleted_at TIMESTAMPTZ, og filtrér med WHERE deleted_at IS NULL i alle forespørgsler.

ER-diagram med ord

users (1) -< (∞) posts (1) -< (∞) comments

Desuden: users (1) -< (∞) comments, posts (∞) >-< (∞) tags.

Opsummering

Design af et skema begynder med entiteter, relationer og kardinaliteter.

  • Surrogat-PK i alle tabeller
  • FK'er angiver relationerne
  • Cascade kontra Restrict afspejler forretningsintentionen
  • Mange-til-mange = koblingstabel

Hurtigt tjek

Hvor placeres fremmednøglen i en en-til-mange-relation mellem indlæg og kommentarer?

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 “Modellering af en blog: brugere, indlæg, kommentarer” gratis?

Ja — hele teksten til “Modellering af en blog: brugere, indlæg, kommentarer” 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 “Modellering af en blog: brugere, indlæg, kommentarer”?

Tegn et ER-diagram, identificér entiteter og relationer, og omsæt dem til et normaliseret SQL-skema. 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 1 af 4.

Hvor lang tid tager lektionen “Modellering af en blog: brugere, indlæg, kommentarer”?

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. Modellering af en blog: brugere, indlæg, kommentarer
  2. Valg af nøgler og typer
  3. Indekser til typiske forespørgsler
  4. Udfyld databasen med testdata
← Tilbage til SQL Academy