6 WIĘZY 1 WYZWALACZE W JĘZYKU SQL
Ćwiczenie 6.6.1. Należy napisać w SQL3 wyzwalacze podobne do deklaracji z rys. 6.5, określone dla zdarzeń wstawiania i usuwania w relacji FiłmDyr.
Ćwiczenie 6.6.2. Napisać w SQL3 następujące wyzwalacze i asercje dla schematu z przykładu „PC” z ćwiczenia 4.1.1:
Produkt(producent, model, typ)
?C(model, szybkość, ram, hd, cd, cena)
Laptop(model, szybkość, ram, hd, ekran, cena)
Drukarka(mebel, kolor, typ, cena)
*a) Przy zmianie ceny PC sprawdzać, że nie ma żadnego PC o takiej samej częstotliwości zegara, ale o niższej cenie.
b) Przy wstawianiu nowej drukarki sprawdzać, 2e numer modelu istnieje w tabeli Produkt.
!c) Przy każdej zmianie w relacji Laptop sprawdzać, czy średnia cena laptopów każdego producenta nie jest wyższa niż 2000 S.
!d) Przy zmianie RAM lub twardego dysku w PC należy sprawdzić, czy ten modyfikowany PC ma co najmniej 100 razy więcej pamięci zewnętrznej niż operacyjnej.
!e) Przy wstawianiu nowego PC, laptopa lub nowej drukarki należy sprawdzić, że numer modelu nie występuje wśród istniejących produktów odpowiedniego typu.
Ćwiczenie 6.6.3. Dla schematu bazy danych:
Klasy (klasa, typ, kraj, liczbaDziął, działo, wyporność) Okręt (nazwa, klasa, wodowanie)
Bitwa (nazwa, data)
Rezultat (okręt, bitwa, wynik)
z ćwiczenia 4.1.3 należy w SQL3 zapisać wyzwalacze i ascrcje, które są określone w sposób następujący: 1
IĆwiczenie 6.6.4. Następujące warunki zapisać w SQL3 albo wr postaci wyzwalaczy albo w postaci asercji. Zadania dotyczą przykładu filmowego:
Film (tytuł, rok, długość, czyKolor, nazwaStudia, producentC#)
GwiazdyW (cytułFilmu, rokFilmu, nazwiskoGwiazdy)
GwiazdaFilmowa(nazwisko, adres, płeć, dataUrodzenie)
FilmDyr(nazwisko, adres, cert#, cenaSieci)
Studio(nazwisko, adres prczC#)
Można założyć, że przed zmianami bazy warunki są spełnione. Należy raczej stara się, aby dopuścić wykonanie polecenia, nawet kosztem wstawienia krotek z warto ściami NULI lub domniemanymi, niż odrzucać żądanie modyfikacji.
a) Każda gwiazda z relacji GwiazdyW musi występować w relacji Gwiazda-Filmowa.
b) Każdy dyrektor produkcji jest albo prezesem studia, albo producentem filmu albo jednym i drugim.
c) W każdym filmie występuje co najmniej jedna aktorka i jeden aktor.
d) Żadne studio w jednym roku nie wyprodukowało w ięcej niż. 100 filmów.
c) Średnia długość wszystkich filmów' wyprodukowanych w ciągu jednego roki nie przekracza 120.
IĆwiczcnie 6.6.5. W przykładzie 6.17 błędy modyfikacji byty obsługiwane w tci sposób, że najpierw był sprawdzany warunek i. jeśli więzy nic były naruszone, t< dopiero wtedy następowała modyfikacja. Inne podejście polega na tym, że dopuszczs się modyfikacje, a potem, jeśli okaże się, że narusza to w'ięz.y, anuluje się tę modyfikację. Należy napisać takie wyzwalacze.
♦ Więzy klucza (key comtraints): Słowa kluczowe PR!MARY KEY lut UN1QUE określają w deklaracji schematu bazy danych ten atrybut lut zbiór atrybutów, które stanowią klucz relacji.
♦ Więzy integralności referencyjnej (referential integrily comtraints) Korzystając ze słowa kluczowego REFERENCES lub FOREIGN key można zadeklarować, że pewna wartość (lub zbiór wartości) z jednej relacji występuje jako wartość (wartości) klucza głównego pewne krotki innej relacji.
♦ Więzy typu CHECK dla wartości (yalue-based check comtraints) Można sprawdzać warunki określane dla wartości atrybutów prze1 umieszczenie w definicji schematu relacji przy tym atrybucie słows CHECK oraz warunku, który ma być sprawdzany. Drugi sposób sprawdzania warunków dla wartości atrybutów polega na wpisaniu tego warunku w definicję dziedziny atrybutu.
a) Przy wstawianiu nowej krotki do relacji Klasy wstawiać jednocześnie okręt o nazwie klasy, z datą wodowania równą NULL. b) Jeśli atry but Wyporność we wstawianej klasie ma wartość ponad 35 000, to należy do bazy wstawić krotkę z wartością 35 000.
!c) Jeśli do relacji Rezultat wstawia się krotkę, to należy sprawdzać, czy okręt i bitwa są wstawione do odpowiednich relacji Okręt i Bitwa, a jeśli nie, to wstawić brakujące krotki. W przypadkach koniecznych skorzystać z wartości NULL.
!d) Przy wstawianiu krotek do relacji Okręt oraz przy zmianach wartości atrybutu klasa w relacji okręt sprawdzać, czy żaden kraj nie ma więcej niż 20 okrętów, a jeśli ma, to nie dopuścić do wstawienia nowej krotki.
!!e) Sprawdzić, czy w okolicznościach mogących naruszać więzy, że żaden statek, który uczestniczył w bitwie, nic zatonął wcześniej. Jeśli tak. to nie dopuścić do modyfikacji, która może naruszyć ten warunek.