Grundlæggende PostgreSQL til relationsdatabaser
Engelske navne foretrækkes. Uanset sprog bruges ental for entiteter og tabeller:
product, ikke products.
Brug kun A-Z i tekniske navne. Skriv æ/Æ
som ae/AE, ø/Ø som oe/OE og
å/Å som aa/AA, for eksempel Børn →
Boern og År → Aar.
integer / bigint - heltalnumeric(10,2) - præcise tal og beløbtext - tekst uden fast længdeboolean - TRUE eller FALSEdate - kalenderdatotimestamp - dato og klokkeslætjsonb - strukturerede JSON-databytea - binære dataCREATE TABLE product (
product_id integer GENERATED ALWAYS AS IDENTITY
PRIMARY KEY,
name text NOT NULL,
price numeric(10,2) NOT NULL,
inventory integer NOT NULL DEFAULT 0
);
IDENTITY genererer id’er. numeric er velegnet
til præcise beløb.
NOT NULL - værdi er påkrævetUNIQUE - værdien må ikke gentagesPRIMARY KEY - entydig identifikationREFERENCES - fremmednøgleCHECK - regel for tilladte værdierDEFAULT - standardværdiinventory integer NOT NULL CHECK (inventory >= 0)
CREATE TABLE customer (
customer_id integer GENERATED ALWAYS AS IDENTITY
PRIMARY KEY,
name text NOT NULL,
email text UNIQUE NOT NULL
);
CREATE TABLE customer_order (
order_id integer GENERATED ALWAYS AS IDENTITY
PRIMARY KEY,
customer_id integer NOT NULL
REFERENCES customer(customer_id),
order_date date NOT NULL DEFAULT CURRENT_DATE
);
INSERT INTO product (name, price, inventory)
VALUES ('Tekop', 75.00, 20)
RETURNING product_id;
INSERT INTO product (name, price, inventory)
VALUES
('Tallerken', 120.00, 8),
('Kande', 250.00, 4);
SELECT product_id, name, price FROM product WHERE inventory > 0 ORDER BY price DESC; SELECT COUNT(*) AS antal FROM product;
UPDATE product SET inventory = inventory - 1 WHERE product_id = 1 RETURNING *;
Kontrollér altid WHERE-betingelsen først.
DELETE FROM product WHERE product_id = 1 RETURNING *;
En DELETE uden WHERE sletter alle rækker.
SELECT c.name, o.order_id, o.order_date FROM customer AS c JOIN customer_order AS o ON o.customer_id = c.customer_id; SELECT o.order_id, p.name, ol.quantity FROM order_line AS ol JOIN customer_order AS o ON o.order_id = ol.order_id JOIN product AS p ON p.product_id = ol.product_id;
SELECT CURRENT_DATE; SELECT CURRENT_TIMESTAMP; SELECT * FROM customer_order WHERE order_date >= DATE '2026-01-01';
Brug date og timestamp, når databasen skal kunne
validere og beregne med datoer.
BEGIN; UPDATE product SET inventory = inventory - 1 WHERE product_id = 1; COMMIT; -- Ved problem: ROLLBACK;
En transaktion samler flere ændringer, så de enten gennemføres samlet eller rulles tilbage.
numeric til præcise beløb.date og timestamp til datoer.