Zadanie. Czy prawdziwe jest stwierdzenie, że w kluczu żaden atrybut nie może być funkcyjnie zależny od żadnego innego atrybutu teao klucza? Odpowiedź uzasadnić.
Definicja klucza: Niech dany będzie schemat relacyjny R = (U; F). Zbiór atrybutów K <= U (zawarty w U) nazywamy kluczem schematu R wtedy i tylko wtedy, gdy zbiór ten spełnia następujące warunki:
1. K -> U (jednoznaczna identykowalność wszystkich pozostałych atrybutów).
2. X-> U => ~(X < K) (minimalność, czyli nie istnieje taki podzbiór atrybutów schematu R zawarty w K, który by jednoznacznie identyfikował wszystkie inne atrybuty, innymi słowy po usunięciu z K dowolnego atrybuty nie będzie spełniony warunek 1.)
Gdyby którykolwiek z atrybutów klucza schematu relacji R wyznaczał funkcyjnie którykolwiek inny z atrybutów klucza, to nie byłby spełniony warunek minimalności klucza, zatem podzbiór K nie byłby kluczem lecz nadkluczem. Zatem twierdzenie jest prawdziwe.
Klucze: AB. BC Czy schemat R iest w 3PN? Dlaczego?
Schemat R jest w 1PN, ponieważ wszystkie atrybuty są atomowe.
Schemat R nie jest w 2PN ponieważ jedyny atrybut niekluczowy D, nie zależy w pełni funkcyjnie od każdego z kluczy (B -> D). Ponieważ schemat R nie jest w 2PN to nie może też być w 3PN.
Hotelef hotel Nr. hotel Nazwa, miasto)
Pokoi ef pokoi Nr, hotel Nr. rodzaj, cena) Rezerwacie(hotelNr. goscNr, dataOd, dataDo, pokój Nr)
GościetgoscNr, goscNazwisko, goscAdres)
SELECT Pokoje WHERE Cena>50 GIVING R1JOIN Hotele and R1 OVER hotelNr GIN/ING R2
PROJECT R2 OVER hotelNazwa GIVING WYNIK Zadanie 1.1.b:
RANGĘ Pokoje X GET W( Hotele, hotel Nazwa): EX( Hotel, hotel Nr = X.hotelNr i X.Cena>50)
SELECT hotelNazwa FROM ( (SELECT * FROM Pokoje WHERE cena > 50) JOIN Hotele ON hotelNr) )
SELECT goscNazwisko FROM Goście WHERE goscNr IN (SELECT goscNr FROM Rezerwacje WHERE
hotelNr IN (SELECT hotelNr FROM Hotele WHERE hotelNazwa='Merkury') AND (dataOd<DATE() AND dataDo>DATE()))