2. Füüsiline disain
2. Füüsiline disain
2. Füüsiline disain
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