ullman195 (2)

ullman195 (2)



396 6. WIĘZY l WYZWALACZE W JEŻYKU SQl.

nyrni”. Podczas gdy pozostałe typy więzów są tylko określane dla pewnych elementów schematu, najczęściej dla tabel lub dziedzin, to asercje stanowią niezależne elementy schematu.

Poprawny zapis więzów

Wiele więzów przypomina te z przykładu 6.9, które polegają na zabronieniu wstawiania krotek spełniających pewne warunki. Po słowie kluczowym CHECK występuje zazwyczaj alternatywa negacji warunków lub warunków przeciwnych. W przykładzie 6.9 pierwszy warunek określał, źc gwiazda jest mężczyzną, a korzystaliśmy z warunku przeciwnego piec = ' K' (chociaż być może warunek płeć < > 'M' byłby tu stosowniejszy w charakterze negacji). Drugi warunek określa, że nazwisko nie może zaczynać się od Pani, tutaj określiliśmy negację za pomocą porównania NOT LIKE. To porównanie zawiera negację, sam warunek zostałby bowiem zapisany w SQL jako na zwis ko LIKE ' Ms. %'.


Tak jak inne elementy schematu ascrcje są definiowane za pomocą instrukcji CREATE. Postać tej instrukcji składa się z następujących części:

1)    słowa kluczowego CREATE ASSERTION,

2)    nazwy asercji,

3)    słowa kluczowego CHECK,

4)    warunku ujętego w nawiasy.

A więc postać definicji asercji można ująć w następujący schemat:

CREATE ASSERTION <nazwa> CHECK (<warunek>)

Warunek zapisany w asercji musi być zawsze spełniony i każda modyfikacja, która zaburza ten stan, nie jest wykonywana. Przypomnijmy, żc inne więzy CHECK, jeśli tylko zawierały podzapytania, mogły być naruszane w pewnych szczególnych okolicznościach.

W inny sposób zapisuje się krotkow'e więzy CHECK, a inaczej asercje. W definicji więzów kratkowych występują nazwy atrybutów relacji, której te więzy dotyczą. Na przykład w wierszu 6) z rys. 6.4 używaliśmy atrybutów płeć oraz nazwisko, nic wskazując skąd one pochodzą. Wiadomo jednak, że odnosiły się one do krotek tabeli GwiazdaFilmowa dzięki temu, że tylko ta tabela była deklarowana w omawianej instrukcji CREATE.

Warunek występujący w asercji nie ma takich zalet. Każdy atrybut, który występuje w warunku, musi występować w asercji, zazwyczaj zaznaczenie tej okoliczności następuje przez określenie relacji, z której pochodzi ten atrybut, w klauzuli select-f rom-wherc. Ponieważ z natury rzeczy warunkowi odpowiada wartość typu logicznego, więc dotyczy to także warunku występują-ccgo w asercji. Na przykład warunek może obejmować wyrażenie definiujące relację, do którego dopisany jest operator NC7 EXISTS; takie więzy określają, że relacja jest pusta. Innym przykładem może być określenie agregatu sumowania dla pewnej kolumny w tabeli, a następnie w warunku porównanie tej wartości z określoną stałą. W ten sposób można by wymusić, aby taka suma zawsze była większa od pewnej wartości zadanej z góry.

Ograniczenia w sprawdzaniu więzów: błąd czy właściwość? Zastanowienie może budzić fakt, że dopuszcza się takie sytuacje, w których więzy atrybutów lub krotkowc są naruszane, jeśli odnoszą się do innej relacji lub do innych krotek. Powodem tego jest potrzeba zapewnienia efektywności implementacji, która w takich przypadkach okazuje się znacznie większa niż w przypadku asercji. Więzy atrybutów i krotkowc są spraw-dzane tylko przy wstawianiu i modyfikacji określonych krotek. Natomiast warunki z asercji są sprawdzane przy każdej próbie modyfikacji relacji, dla której asercja została określona. O tym. jaki rodzaj więzów- zastosować w konkretnym przypadku, decyduje projektant bazy, analizując, czy warto w celach bezpieczeństw-a dodatkowo przeglądać dane w bazie. Ze względu na zachowanie długoterminowej niezawodności kodu zaleca się, aby projektant nie stosował więzów krotkowych ani atrybutowych, ponieważ mogą się one okazać nieskuteczne.


PRZYKŁAD 6.10

Załóżmy, że nikt nie może zostać prezesem studia, o ile jego sieć jest wdarta mniej niż 10 000 000 S. Warunek asercji określimy w ten sposób, źc będzie spełniony, jeśli zbiór studiów' filmowych, który ch prezesi mają sieci warte mniej niż 10 000 000 $, jest pusty. Asercja dotyczy dwóch relacji:

FilmDyr(nazwisko, adres, cert*, cenaSieci)

Studio(nazwa, adres, prezC#)

Asercję przedstawiono na rys. 6.5.

CREATE ASSERTION BogatyFrez CHECK {NOT EXISTS

{SELECT *

FROM Studio, FilmDyr WHERE prezC# = cert# AND

cenaSieci < 10000000

)

);

RYSUNEK 6.5

Asercja zapewniająca. 2c prezesi studiów są bogaci


Wyszukiwarka

Podobne podstrony:
ullman201 (2) 408 6. WIĘZY I WYZWALACZE W JĘZYKU SQL 1 1)    CREATE TRIGGER Cena
ullman204 (2) 414 6. WIĘZY 1 WYZWALACZE W JĘZYKU SQL ♦    Więzy kratkowe typu CIIEC.K
ullman202 (2) 410 6. WIĘZY IWYZWALACZE W JĘZYKU SQL 1)    CREATE TRIGGER WyzwąlaczśrC
53198 ullman186 (2) a__________Więzy i wyzwalacze w języku SQL W bieżącym rozdziale opiszemy te aspe
11038 ullman189 (2) 384 6. WIĘZY IWYZWALACZE W JĘZYKU SQL 1 Odpowiedniość między atrybutami pre
ullman197 (2) 4UU 6 WIĘZY I WYZWALACZE W JĘZYKU SOL  GwiazdyW(tytułFilmu, rokFilmu,
65226 ullman199 (2) 404 6. WIĘZY r wyzwalacze w języku soi. 404 6. WIĘZY r wyzwalacze w języku soi.
55786 ullman196 (2) 398 6. WIĘZY l WYZWALACZE W JĘZYKU SOL Mimo że ascrcja obejmuje dwie relacje, to

więcej podobnych podstron