PostgreSQL, Omezení

Napsal O webu (») 2. 6. 2008 v kategorii Databáze, přečteno: 1904×
Tento článek je psán za podpory webhostingu banan.cz, který PostgreSQL plně podporuje.

Omezení

Omezení slouží pro udržení databáze v konzistentním stavu. Také pomáhá zabránit vkládání neplatných dat do tabulky databáze. Již samotná definice sloupce pomocí některého z datových typů představuje určité omezení. Definujeme-li například sloupec jako CHAR, tím jej předurčujeme k uchovávání pouze znaků. Při pokusu o vložení libovolného čísla dostaneme chybovou hlášku. Možností, jak zajistit určitá omezení je více a právě jim bych se rád v následujícím článku věnoval.

NOT NULL

Omezení NOT NULL zamezuje vložení prázdné hodnoty do sloupce. V následujícím příkladu je vytvořena tabulka s omezením NOT NULL. Při pokusu o vložení prázdné hodnoty do tabulky příkazem INSERT a také při pokusu o modifikaci prázdné hodnoty bude vygenerována chybová hláška.




CREATE TABLE tab1 (col1 CHAR(3), col2 INTEGER NOT NULL);

INSERT INTO tab1 VALUES ('abc' , NULL);

ERROR: Fail to add null value in not null attribute COL2

INSERT INTO tab1 (col1) VALUES ('abc');

ERROR: Fail to add null value in not null attribute COL2

UPDATE tab1 SET col2 = NULL;

ERROR: Fail to add null value in not null attribute COL2

INSERT INTO tab1 VALUES ('abc' , 123 );

SELECT * FROM tab1;

COL1 | COL2
--------------------
Abc | 123




Další možností, jak zabránit vložení prázdné hodnoty je definovat výchozí hodnotu. Při pokusu o vložení prázdné hodnoty příkazem INSERT je vložena hodnota výchozí.



CREATE TABLE tab2 (col1 INTEGER, col2 INTEGER NOT NULL DEFAULT 666);

INSERT INTO tab2 VALUES (123);

SELECT * FROM tab2;

COL1 | COL2
--------------------
123 | 666


Omezení UNIQUE

Omezení UNIQUE zabraňuje vložení duplicitních hodnot do sloupce tabulky, neboli zajistí jedinečnost hodnot sloupce. Při jeho použití je vytvořen jedinečný index sloupce. V následujícím příkladu je příklad zamezující vložení duplicitních hodnot do tabulky databáze. Zajímavé je, že do jedinečného sloupce je možné vložit více prázdných hodnot.



CREATE TABLE tab3 (col1 INTEGER UNIQUE);

INSERT INTO tab3 VALUES (1);

INSERT INTO tab3 VALUES (1);

ERROR: Cannot insert duplicate key into unique index

INSERT INTO tab3 VALUES (null);

INSERT INTO tab3 VALUES (null);

SELECT * FROM tab3;

COL1
-------
1
NULL
NULL




Tvoříme-li omezení UNIQUE pro více sloupců, pak nelze toto omezení použít jako omezení sloupce. V tomto případě je nutné použít samostatný řádek UNIQUE pro specifikaci sloupců. Které tvoří omezení. Takto vytvoříme jedinečné omezení tabulky. V následujícím kódu je příklad používající vícesloupcová omezení. Sloupce "col1" a "col2" nemusejí být jedinečné, ale jejich kombinace ano. Například v tabulce, kde evidujeme data narození a rodná čísla, je možné, aby dva lidé byli narozeni ve stejný den, ale rodná čísla musejí mít odlišná.



CREATE TABLE tab4 (Datum DATE, rc INTEGER, UNIQUE (datum, rc));




Autor: Robert Habrman
Štítky: PostgreSQL
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel nula a pět