Database-notation cheat sheet

Grundbegreber og skrivemåden vi bruger til at beskrive et databaseschema

Entitet

En entitet er en type af ting, systemet skal gemme oplysninger om, fx en kunde eller en ordre. I databasen bliver hver entitet til en tabel, og hver forekomst (fx Anna) bliver til en række.

Attribut (eng: attribute)

En attribut er en egenskab ved entiteten, fx navn eller email. I databasen bliver hver attribut til en kolonne i tabellen.

PK - primærnøgle (eng: primary key)

Primærnøglen identificerer entydigt én række i en tabel. Værdien må aldrig gentages og må aldrig være NULL. Marker den med PK() om attributten.

FK - fremmednøgle (eng: foreign key)

En fremmednøgle er en attribut, der peger på en primærnøgle i en anden (eller samme) tabel. Værdien må gerne gentages - det er sådan en 1-til-mange-relation vises. Marker den med FK() om attributten.

Unik (eng: unique)

En unik kolonne må ikke have samme værdi to gange, men er ikke nødvendigvis primærnøgle, fx en emailadresse. I SQL bruges ofte UNIQUE-constraint til dette.

Null

NULL betyder "ingen værdi" - det er ikke det samme som 0 eller en tom tekststreng, det betyder at cellen ikke har fået en værdi. Brug NOT NULL, når en attribut altid skal have en værdi.

Tre-værdi-logik (eng: three-value-logic, TVL)

Fordi NULL er en ukendt værdi, giver sammenligninger med NULL hverken sandt eller falsk, men unknown. Hvis Alder er NULL, bliver Alder > 18 til NULL > 18, hvilket er unknown - ikke falsk.

Konsekvens: en WHERE dropper rækker med unknown, ligesom med falsk. Brug IS NULL/IS NOT NULL til at spørge direkte til, om værdien mangler.

Sådan skriver vi et schema

Et schema skrives som
Tabelnavn(attribut1, attribut2, ...).
Marker primærnøgler med PK() og fremmednøgler med FK() om attributten:

Customer(PK(customer_id), name, email)
Order(PK(order_id), FK(customer_id), order_date)

Sammensat primærnøgle (eng: composite primary key)

Hvis primærnøglen består af flere attributter tilsammen, angives det i stedet på en ny, indrykket linje under tabellen:

OrderLine(order_id, product_id, quantity)
  PK(order_id, product_id)
Husk: attributterne i den sammensatte nøgle står stadig i den almindelige attributliste - den indrykkede linje markerer bare, hvilke af dem der tilsammen udgør PK.