PostgreSQL, Omezení

Napsal O webu (») 4. 10. 2008 v kategorii Databáze, přečteno: 1952×
obrazky/postgresql.pngTento článek je psán za podpory webhostingu banan.cz, který PostgreSQL plně podporuje.

Omezení CHECK

Omezení CHECK uplatní specifikované omezení sloupce tak, aby obsahoval pouze určitou množinu hodnot. Například pouze kladná nebo záporná čísla či přiměřená data. Příkaz CHCEK implicitně povoluje prázdné hodnoty. V následujícím kódu je uveden příklad, který používá celou řadu klauzulí CHECK, jejichž význam nejprve rozeberu.


Stat - Omezuje délku sloupce na tři znaky. Datový typ CHAR () vyplní pole prázdnými hodnotami, proto je tento sloupec zbaven prázdných znaků pomocí funkce "trim" dříve, než se zjistí jeho délka.


Vek - Omezení hodnoty pouze na kladná čísla.


Pohlavi - omezení hodnot tohoto sloupce pouze na písmena "M" a "Z".
Nastup - omezení hodnoty sloupce na data mezi 1.1.2000 a dnešním datem.


Table - Poslední podmínka CHECK zajistí, aby tabulka neakceptovala řádky, kde sloupce "jmeno" obsahuje hodnotu "Robert" a sloupec "Prijmeni" hodnotu "Habrman" bez ohledu na to, jestli je zapsáno velkými nebo malými písmeny či jejich kombinací. Toto omezení je potřeba udělat na úrovni tabulky. Kdybychom jej implementovali na úrovni sloupce (jmeno), byly by odmítnuty všechny pokusy při vložení příslušného jména. Místo toho chceme, aby bylo zabráněno vložení kombinace hodnot sloupců "jmeno" a "prijmeni".



====== Vytvoření tabulky "zamestnanec" =======

CREATE TABLE zamestnanec (

Jmeno CHAR (15),

Prijmeni CHAR (20),

Mesto CHAR (15)

Stat CHAR (3) CHECK (lenght (trim(state)) = 3 ),

Vek INTEGER CHECK (vek > 0),

Pohlavi CHAR (1) CHECK (gender IN ( 'M' , 'Z')),

Nastup DATE CHECK (nastup BETWEEN '2000-01-01' AND CURRENT_DATE),

CHECK (upper (trim(jmeno)) != 'Robert' OR upper (trim(prijmeni)) != 'Habrman')

);

==== Odmitnutí dotazu INSERT ========

INSERT INTO zamestnanec

VALUES ('Robert' , 'Habrman' , 'Ostrava', 'CZE' , 'M' , 'CURRENT_DATE');

ERROR: Rejected due to CHECK constraint zamestnanec

====== Akceptovani dotazu INSERT ========

INSERT INTO zamestnanec

VALUES ('Banant' , 'Banan' , 'Ostrava', 'CZE' , 'M' , 'CURRENT_DATE');




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 tři a devět