55786 ullman196 (2)

55786 ullman196 (2)



398 6. WIĘZY l WYZWALACZE W JĘZYKU SOL

Mimo że ascrcja obejmuje dwie relacje, to można takie więzy wyrazić również za pomocą więzów krotkowych typu CHECK, zdefiniowanych osobno dla poszczególnych relacji. Możemy na przykład do definicji create TABLE z przykładu 6.3 dołączyć więzy relacji Studio, tak jak pokazano na rys. 6.6.

1)    CREA7E TABLE Studio (

2)    nazwa    CHAR(30) PRIMARY    KEY,

3)    adres    VARCHAR(255),

4)    prezC= INT REFERENCES FilmDyr (cert#) ,

5)    CHECK    (prezC# NOT IN

6)    (SELECT cert# FROM FilmDyr

7)    trIHSRE cenaSieci < 1000000C)

)

);

RYSUNKK 6.6

Więzy w relacji Stuaic, równoważne asercji

Zauważmy jednak, że więzy przedstawione na rys. 6.6 będą sprawdzane jedynie wtedy, kiedy zajdzie zmiana dotycząca relacji Studio. Wobec tego nie zostanie na przykład wykryta sytuacja polegająca na tym, że wartość sieci pewnego prezesa zapisana w relacji FilmDyr spada poniżej 10 000 000 $. Aby uzyskać kompletny efekt działania asercji, trzeba by dołączyć do deklaracji tabeli FilmDyr jeszcze jedne więzy, które sprawdzają, czy jeśli dyrektor jest prezesem studia, to wartość jego sieci nie jest niższa niż 10 000 000 $.

PRZYKŁAD 6.11

A oto jeszcze jeden przykład asercji. Dotyczy ona wyłącznie relacji

Film(tytuł, rok, długość, czyKolor, nazwaStudia, producent"#)

i określa, że całkowita długość wszystkich filmów w danym studiu nic przekracza 10 000 minut.

CREA7E ASSERTION SumDługość CHECK {10000>=ALL (SELECT SUM (długość)FROM Movie GROUP 3Y nazwaStudia);

)

Tak się składa, że więzy dotyczą tylko relacji Film. Można wyrazić jc także za pomocą więzów krotkowych typu CHECK w schemacie relacji Film. Definicja tych więzów polegałaby na dołączeniu do schematu relacji Filrn następującej deklaracji:

CHECK (10000 >= ALL

(SELECT SUM (długość) FROM Film GROUP BY nazwaStudia));

Zauważmy, że w zasadzie ten warunek stosuje się do każdej krotki relacji Film. Jednakże nie wspomina się tu o żadnym atrybucie i przetwarzanie jest skupione w podzapytaniu.

Typ więzów

Gdzie są deklarowane

Kiedy uruchamiane

Czy zachodzą

Atrybutowe

CHECK

Z atrybutami

Przy wstawianiu do relacji lub zmianie wartości atrybutu

Nie w podza-pytaniach

Krotkowe

CHECK

Element schematu relacji

Przy wstawianiu do relacji lub zmianie wartości w krotce

Nie w podza-pytaniach

Ascrcje

Element schematu bazy danych

Przy modyfikacji w relacji

Tak

Porównanie Więzów

W tabeli przedstawionej poniżej zilustrowano różnice pomiędzy więzami atrybutów, więzami krotkowymi i asercjami.


Zauważmy, że w przypadku deklarowania więzów krotkowych sprawdzenie nie wykona się przy usuwaniu krotek z relacji Fi lir.. W omawianym przykładzie nie ma to akurat znaczenia, ponieważ, jeśli więzy są tutaj spełnione przed usuwaniem, pozostaną one spełnione tym bardziej po usunięciu krotki. Jednakże, jeśli więzy ograniczałyby długość wyprodukowanych filmów z dołu, a nie z góry, to więzy CHECK byłyby przez usuwanie naruszane, a ascrcja nie.

6.4.3. Ćwiczenia do podrozdziału 6.4

Ćwiczenie 6.4.1. W podrozdziale 6.10 wspominaliśmy, że krotkowe więzy CHECK z rys. 6.6 zapewniają wykonanie tylko połowy tego co asercja z rys. 6.5. Należy napisać więzy typu CllECK dla relacji FilmDyr. które będą równoważne tej asercji.

Ćwiczenie 6.4.2. Dla przykładu filmowego, który obejmuje relacje:

Film (tytiui, rok, długość, czyKolor, nazwaStudia, producentC#)


Wyszukiwarka

Podobne podstrony:
ullman200 (2) 406 6. WlljZY I WYZWALACZE W JEŻYKU SOL ograniczany. Na przykład warunki więzów CHECK
ullman197 (2) 4UU 6 WIĘZY I WYZWALACZE W JĘZYKU SOL  GwiazdyW(tytułFilmu, rokFilmu,
ullman156 (2) J 18 5. JEŻYK BAZ DANYCH SOL Zauważmy, że w tym zapytaniu wcale nie ma klauzuli WHERE,
Mimo,ze każdy z nas jest indywidualnością, to mapy mamy podobne, większość osób umieszcza cechy w po
ullman195 (2) 396 6. WIĘZY l WYZWALACZE W JEŻYKU SQl. nyrni”. Podczas gdy pozostałe typy więzów są t
ullman201 (2) 408 6. WIĘZY I WYZWALACZE W JĘZYKU SQL 1 1)    CREATE TRIGGER Cena
ullman203 (2) 6 WIĘZY 1 WYZWALACZE W JĘZYKU SQL6.6.4. Ćwiczenia do podrozdziału 6.6 Ćwiczenie 6.6.1.
ullman204 (2) 414 6. WIĘZY 1 WYZWALACZE W JĘZYKU SQL ♦    Więzy kratkowe typu CIIEC.K

więcej podobnych podstron