17.03.2015 Views

2. Füüsiline disain

2. Füüsiline disain

2. Füüsiline disain

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

TTÜ: Andmebaasi füüsiline <strong>disain</strong> (2012)<br />

© Erki Eessaar<br />

--Lisamine õnnestub<br />

INSERT INTO test (id, a) VALUES (1, NULL);<br />

--sest NULL>2 => UNKNOWN<br />

INSERT INTO test (id, a) VALUES (2, 3);<br />

-- sest 3>2 => TRUE<br />

--Lisamine ebaõnnestub<br />

INSERT INTO test (id, a) VALUES (3, 1);<br />

-- sest 1>2 => FALSE<br />

Näited:<br />

ALTER TABLE Leping ADD (<br />

CONSTRAINT chk_lepingu_rida_perioodi_paeva<br />

CHECK (<br />

(tyyp=1 AND tasumise_periood BETWEEN 1 AND 5) OR<br />

(tyyp=2 AND tasumise_periood BETWEEN 1 AND 15))<br />

);<br />

Lepingul võib olla kuni 100 rida:<br />

ALTER TABLE Lepingu_rida ADD (<br />

CONSTRAINT chk_lepingu_rida_ridade_arv<br />

CHECK (NOT EXISTS (SELECT lepingu_nr<br />

FROM Lepingu_rida<br />

GROUP BY lepingu_nr<br />

HAVING COUNT(*)>100))<br />

)<br />

);<br />

Kaare lahendamine kitsenduse abil – kommentaar võib olla seotud kauba või<br />

teenusega, aga mitte mõlemaga korraga.<br />

ALTER TABLE Lepingu_rida ADD CONSTRAINT chk_lepingu_rida_kaar<br />

CHECK ((kaup IS NULL AND teenus IS NOT NULL) OR<br />

(kaup IS NOT NULL AND teenus IS NULL));<br />

ALTER TABLE Table_1 ADD CONSTRAINT constraint_1<br />

CHECK (column_1>(SELECT Max(column_2) AS maks FROM Table_2));<br />

CHECK kitsendus ei tohi olla mitte-deterministlik, st. anda samade andmete<br />

kontrollimisel erinevatel aegadel erineva tulemuse.<br />

Järgnev kitsendus on illegaalne (mittelubatud):<br />

ALTER TABLE Leping ADD CONSTRAINT chk_solmimise_kp<br />

CHECK(solmimise_kp=CURRENT_DATE);<br />

Paljud andmebaasisüsteemid (nt. Oracle, PostgreSQL) ei luba CHECK<br />

kitsendustes kasutada alampäringuid. Sellisel juhul saab CHECK kitsendusi<br />

12

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!