PK однозначно идентифицирует строку. FK ссылается на PK/UNIQUE другой таблицы и обеспечивает ссылочную целостность.
Пример
CREATE TABLE users (
id BIGINT GENERATED ALWAYS ASIDENTITYPRIMARY KEY,
email TEXT NOT NULLUNIQUE,
name TEXT NOT NULL,
city TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULLDEFAULT NOW()
);
CREATE TABLE orders (
id BIGINT GENERATED ALWAYS ASIDENTITYPRIMARY KEY,
user_id BIGINTNOT NULLREFERENCES users(id),
status TEXT NOT NULLCHECK (status IN ('pending', 'completed', 'cancelled')),
amount NUMERIC(12, 2) NOT NULLCHECK (amount >=0),
created_at TIMESTAMPTZ NOT NULLDEFAULT NOW()
);
CREATE INDEX idx_orders_user_created ON orders (user_id, created_at DESC);
Итог
Сформулируйте определение, когда применять и типичные ловушки на проде.