Primárny kľúč

z Wikipédie, slobodnej encyklopédie
Prejsť na: navigácia, hľadanie

Primárny kľúč je v relačnej databáze jedinečný atribút alebo skupina atribútov, ktorý jednoznačne identifikuje každý záznam v relácii (tabuľke). Žiadne dva záznamy v konzistentne navrhnutej tabuľke nemajú zhodný primárny kľúč. V tabuľke môže byť viacero atribútov, ktoré jednoznečne identifikujú záznam, pričom jeden z nich (alebo aj iná kombinácia atribútov) sa môže použiť ako primárny kľúč.

Typickým príkladom primárneho kľúča je rodné číslo v tabuľke so zoznamom osôb. V tabuľke osôb sa môže nachádzať aj iný jednoznačný identifikátor osoby (napríklad číslo občianského preukazu), pričom primárny kľúč sa zvolí pri návrhu modelu databázy.

Pokiaľ neexistuje žiadny prirodzený primárny kľúč, prípadne by bol príliš zložitý, často sa používa ako primárny kľúč automaticky generované číslo databázovým systémom.

Vytvorenie primárneho kľúča[upraviť | upraviť zdroj]

Primárny kľúč je definovaný v štandarde ANSI SQL Standard, ako PRIMARY KEY. Zápis na pridanie primárneho kľúča v prípade existujúcej tabuľky je difinovaný v SQL:2003 takto:

  ALTER TABLE <označenie tabuľky> 
      ADD [ CONSTRAINT <označenie primárneho kľúča> ] 
      PRIMARY KEY ( <označenie stĺpca> {, <označenie stĺpca>}... )

Podľa štandardu môže primárny kľúč definovať aj viacero stĺpcov tabuľky, pričom každý takýto stĺpec zaradený do primárneho kľúča je štandardne definovaný ako nenulový (NOT NULL).

V prípade, ak je primárny kľúč navrhnutý v procese tvorby modelu databázy, je možné primárny kľúč tabuľky definovať priamo pri vytváraní danej tabuľky takto:

  CREATE TABLE označenie_tabuľky (
     id      INT,
     stĺpec1 CHARACTER VARYING(20),
     stĺpec2 DATE,
     ...
     CONSTRAINT označenie_primárneho_kľúča PRIMARY KEY(id),
     ...
  )

V prípade, ak primárny kľúč tvorí iba jeden atribút tabuľky, používa sa na jeho definovanie nasledujúci zápis:

  CREATE TABLE označenie_tabuľky (
     id      INT PRIMARY KEY,
     stĺpec1 CHARACTER VARYING(20),
     stĺpec2 DATE,
     ...
  )