Primární klíč je unikátní identifikátor pro každý řádek v tabulce. Může to být jeden sloupec nebo kombinace více sloupců.
Hlavní vlastnosti:
Každá hodnota v primárním klíči musí být jedinečná. Žádné dva řádky nemohou mít stejnou hodnotu primárního klíče. (NOT NULL) neboli hodnota primárního klíče nesmí být nikdy NULL. To zajišťuje, že každý záznam má platný identifikátor.
Příklad:
V tabulce uzivatele je uzivatel_id primární klíč. Každý uživatel má své unikátní ID, například 1, 2, 3, a to nikdy nemůže být prázdné. Slouží k rychlému a jednoznačnému nalezení konkrétního záznamu a je základem pro vytváření vztahů s jinými tabulkami.
Primární klíč se obvykle definuje při vytváření tabulky, a to buď přímo u sloupce, nebo na konci definice tabulky.
Příklad kódu:
-- Definice primárního klíče přímo u sloupce
CREATE TABLE uzivatele (
uzivatel_id SERIAL PRIMARY KEY, -- Zde je klíč definován
jmeno VARCHAR(50) NOT NULL,
prijmeni VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE
);
-- Definice primárního klíče na konci definice tabulky
CREATE TABLE produkty (
produkt_id INT,
nazev VARCHAR(100) NOT NULL,
cena DECIMAL(10, 2),
CONSTRAINT pk_produkty PRIMARY KEY (produkt_id) -- Zde je klíč definován s vlastním názvem
);
Cizí klíč je sloupec (nebo sada sloupců) v jedné tabulce, který odkazuje na primární klíč v jiné tabulce.
Hlavní vlastnosti:
Vytváří vazby mezi tabulkami, což je srdcem relačních databází. Zajišťuje, že data v jedné tabulce odpovídají datům v druhé tabulce. Nemůžeš například přiřadit objednávku uživateli, který v databázi neexistuje.
Příklad:
V tabulce objednavky by uzivatel_id byl cizí klíč, který by odkazoval na uzivatel_id v tabulce uzivatele. Udržuje referenční integritu a umožňuje propojovat data z různých tabulek.
Příklad kódu:
Vezměme tabulku uzivatele z předchozího příkladu. Nyní vytvoříme tabulku objednavky, která bude odkazovat na uživatele.
CREATE TABLE objednavky (
objednavka_id SERIAL PRIMARY KEY,
datum_objednavky DATE NOT NULL,
celkova_cena DECIMAL(10, 2) NOT NULL,
-- Definice cizího klíče
uzivatel_id INT,
CONSTRAINT fk_uzivatel FOREIGN KEY (uzivatel_id) REFERENCES uzivatele(uzivatel_id)
);
Vysvětlení:
FOREIGN KEY (uzivatel_id) určuje sloupec, který bude cizím klíčem v tabulce objednavky.
REFERENCES uzivatele(uzivatel_id) říká, že tento cizí klíč odkazuje na primární klíč uzivatel_id v tabulce uzivatele.
Unikátní klíč zajišťuje, že všechny hodnoty ve sloupci (nebo sadě sloupců) jsou jedinečné.
Hlavní vlastnosti:
Stejně jako primární klíč zajišťuje jedinečnost hodnot. Má možnostNULL na rozdíl od primárního klíče může unikátní klíč obsahovat jednu hodnotu NULL (pokud je definován pro jeden sloupec). Více hodnot NULL už by ale nebylo považováno za unikátní.
Příklad:
V tabulce uzivatele by email mohl být unikátní klíč, aby se zabránilo registraci dvou uživatelů se stejnou e-mailovou adresou. Zajišťuje jedinečnost dat ve sloupci, který není primárním klíčem.
Unikátní klíč se hodí, když chceš zajistit jedinečnost hodnot ve sloupci, který není primárním klíčem, například e-mail nebo uživatelské jméno.
Příklad kódu:
-- Definice unikátního klíče u sloupce `email`
CREATE TABLE uzivatele (
uzivatel_id SERIAL PRIMARY KEY,
jmeno VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL -- `UNIQUE` zajistí, že každý e-mail bude jedinečný
);
-- Příklad s klíčem na konci definice
CREATE TABLE ubytovani (
ubytovani_id SERIAL PRIMARY KEY,
nazev_objektu VARCHAR(100) NOT NULL,
ulice VARCHAR(100) NOT NULL,
mesto VARCHAR(50) NOT NULL,
-- Složený unikátní klíč pro adresy
CONSTRAINT uq_adresa UNIQUE (ulice, mesto)
);
Složený klíč je klíč, který se skládá ze dvou nebo více sloupců, které dohromady tvoří unikátní identifikátor záznamu.
Hlavní vlastnosti:
Samotný sloupec nemusí být unikátní, ale jejich kombinace ano.
Příklad:
V tabulce prihlasky_kurz může být primární klíč složen ze sloupců student_id a kurz_id. Student se může přihlásit na více kurzů a kurz může mít více studentů, ale kombinace (student_id, kurz_id) musí být jedinečná. Používá se v situacích, kde žádný z jednotlivých sloupců není dostatečný pro unikátní identifikaci řádku.
Tento příklad ukazuje tabulku prihlasky. Která zaznamenává, který student je přihlášený do kterého kurzu. Samotný student_id nebo kurz_id není unikátní, ale jejich kombinace ano.
CREATE TABLE prihlasky (
student_id INT NOT NULL,
kurz_id INT NOT NULL,
datum_prihlasky DATE NOT NULL,
-- Definice složeného primárního klíče
CONSTRAINT pk_prihlasky PRIMARY KEY (student_id, kurz_id),
-- Definice cizích klíčů odkazujících na jiné tabulky (předpokládáme, že tabulky studenti a kurzy existují)
CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES studenti(student_id),
CONSTRAINT fk_kurz FOREIGN KEY (kurz_id) REFERENCES kurzy(kurz_id)
);
© JN 2025