(C) Zadanie 1 (6 pkt). Baza danych zawiera tabele o schematach

Transkrypt

(C) Zadanie 1 (6 pkt). Baza danych zawiera tabele o schematach
(C)
Zadanie 1 (6 pkt). Baza danych zawiera tabele o schematach:
AKTOR(IdAkt, Nazwisko),
REZYSER(IdReż, Nazwisko),
FILM(IdFil, Nazwa, Typ, IdReż),
KONTRAKT(IdKontr, IdFil, IdAkt, Kwota)
a) Zapytanie:
„Podaj nazwiska aktorów i nazwy filmów, dla aktorów, którzy grali w filmach reżyserowanych przez Wajdę i mieli kontrakt na kwotę co najmniej 10 000 zł”
zapisz w:
a) algebrze relacji;
b) języku RRK,
c) Datalogu.
b) Zapytanie:
„Podaj IdAkt, którzy grali w filmach wszystkich reżyserów”
zapisz w:
a) języku RRK,
b) SQL.
a) a)
R := Aktor ´ πIdRez(σNazwisko='Wajda'(Rezyser)) ´ Film ´ σKwota>=10000(Kontrakt)
WYNIK := πNazwisko,Nazwa(R)
Uwaga: W πIdRez(σNazwisko='Wajda'(Rezyser)) wybieram tylko IdRez, aby w dalszych działaniach
nie było konfliktu między atrybutem Nazwisko w tabeli AKTOR i REZYSER.
a) b)
{NazwAkt:a.Nazwisko, NazFil:f.Nazwa | Aktor(a) ∧ Film(f) ∧
∃r (Rezyser(r) ∧ r.Nazwisko = 'Wajda' ∧ r.IdReż = f.IdReż ∧
∃k (Kontrakt(k) ∧ k.IdFil = f.IdFil ∧ k.IdAkt = a.IdAkt ∧ k.Kwota >= 10000))}.
a) c)
WYNIK(NA, NF) :- Aktor(IA, NA),
Rezyser(IR, 'Wajda'),
Film(IF, NF, IR),
Kontrakt(_, IF, IA, K), K >= 10000.
b) a)
{IdAkt: a.IdAkt | Aktor(a) ∧ ∀r (Rezyser(r) ⇒ ∃ f, k (Film(f) ∧ Kontrakt(k) ∧
r.IdReż = f.IdReż ∧ k.IdFil = f.IdFil ∧ k.IdAkt = a.IdAkt))}
Po zamianie kwantyfikatora uniwersalnego (∀) na negację kwantyfikatora egzystencjalnego (¬∃):
{IdAkt: a.IdAkt | Aktor(a) ∧ ¬(∃r Rezyser(r) ∧ ¬(∃ f, k Film(f) ∧ Kontrakt(k) ∧
r.IdReż = f.IdReż ∧ k.IdFil = f.IdFil ∧ k.IdAkt = a.IdAkt))}
b) b)
select A.IdAkt from Aktor A
where not exists(select * from Rezyser R where
not exists(select * from Kontrakt K, Film F
where F.IdRez=R.IdRez and K.IdFil=F.IdFil and K.IdAkt=A.IdAkt))
Zadanie 2 (4 pkt). Dana jest tabela o schemacie:
USŁUGA(IdZakładu, AdresZakładu, IdUsługi, TypUsługi, CenaUsługi).
(Różne zakłady mogą świadczyć te same usługi w różnych cenach).
a) Jakie zależności funkcyjne powinny być zdefiniowane w rozważanym schemacie?
b) Jakie zbiory atrybutów tworzą klucze w powyższym schemacie?
c) W której postaci normalnej jest podany schemat i jakie występują w nim anomalie?
d) Przedstaw reprezentację schematu za pomocą układu tabel w 3PN. Jakie twierdzenie
pozwala uzasadnić, że proces transformacji jest poprawny?
a) IdZakładu --> AdresZakładu,
IdUsługi --> TypUsługi,
IdZakładu, IdUsługi --> CenaUsługi
b) Klucz: {IdZakładu, IdUsługi}
c) Schemat jest tylko w 1PN, nie jest w 2PN, gdyż są atrybuty niekluczowe, które zależą funkcyjnie od części klucza.
Anomalie:
1. Redundancja – zbędne powtarzanie adresu zakładu i typu usługi w wielu krotkach.
2. Anomalia dołączania – nie można dołączyć informacji o zakładzie i jego adresie dopóki nie
wiemy, jaki usługi będzie wykonywał. Wówczas bowiem IdUsługi miałby wartość NULL, a
jest to niedopuszczalne, gdyż stanowi część klucza głównego.
3. Anomalia dołączania – nie można dołączyć informacji i usłudze i jej typie, dopóki nie mamy informacji o zakładzie, który ją wykonuje. Uzasadnienie – jak wyżej.
4. Anomalia usuwania – usunięcie informacji o usłudze może spowodować utratę informacji o
zakładzie, jeśli jest to jedyna usługa, którą zakład wykonuje.
5. Anomalia usuwania – jak wyżej, usunięcie zakładu może spowodować utratę informacji o
usłudze i jej typie.
d) Zgodnie z regułą sprowadzania do 2PN identyfikujemy niepełne zależności funkcyjne, tj. te,
które zależą od części klucza. Są dwie takie zależności:
IdZakładu --> AdresZakładu,
IdUsługi --> TypUsługi.
Jedną z nich wybieramy jako podstawę rozkładu – niech będzie to pierwsza z nich:
Uzyskujemy wówczas rozkład:
USŁUGA(IdZakładu, AdresZakładu, IdUsługi, TypUsługi, CenaUsługi) =
{R1(IdZakładu, AdresZakładu), R2(IdZakładu, IdUsługi, TypUsługi, CenaUsługi)}
Widzimy jednak, że R2 nie ma właściwości 2PN. Musimy więc ją rozłożyć biorą za podstawę
rozkładu niepełną zależność funkcyjną: IdUsługi --> TypUsługi.
R2(IdZakładu, IdUsługi, TypUsługi, CenaUsługi) =
{R3(IdUsługi, TypUsługi), R2(IdZakładu, IdUsługi, CenaUsługi)}
Ostatecznie więc, po odpowiednim dobraniu nazw tabel, mamy układ w 3PN:
USŁUGA(IdZakładu, AdresZakładu, IdUsługi, TypUsługi, CenaUsługi) =
{ZAKŁAD(IdZakładu, AdresZakładu), USŁUGA(IdUsługi, TypUsługi),
ZAKŁAD_USŁUGA(IdZakładu, IdUsługi, CenaUsługi)}
Poprawność rozkładu wynika ze stosowania twierdzenia o rozkładalności (patrz wykład).
Zadanie 3 (6 pkt). Opracuj projekt bazy danych dla potrzeb organizacji zajęć na wydziale uczelni.
Na wydziale obowiązują następujące zasady:
ƒ dla każdego przedmiotu tworzonych jest wiele grup studenckich,
ƒ studenci zapisują się do grup,
ƒ zajęcia w grupach prowadzą asystenci,
ƒ egzaminy z przedmiotów przeprowadzają profesorowie.
Zaprojektuj schemat bazy danych:
ƒ opracuj diagram ER,
ƒ podaj wynik transformacji do schematu relacyjnego.
Diagram ER (diagram jednostka-związek, "związków encji"):
1
Student
1
Przedmiot
1
1
N
Zapisy
1
N
Grupa
Profesor
N
1
Asystent
1
N
Prowadzenie
Egzaminowanie
Schematy tabel w relacyjnej bazie danych:
Student(IdStud, Nazwisko, ...)
Przedmiot(IdPrzed, Nazwa)
Grupa(IdGrupy, Semestr, Rok, Specjalność)
Zapisy(IdZap, IdStud, IdGrupy, DataZap)
Asystent(IdPrac, Nazwisko, ...)
Prowadzenie(IdPoz, IdPrac, IdGrupy, DzieńTyg, Godzina, Sala)
Profesor(IdPrac, Nazwisko, ...)
Egzaminowanie(IdEgz, IdPrac, IdPrzed, Semestr, Rok, Specjalność)
Uwaga:
Staramy się tak projektować związki (binarne lub o większej liczbie członów), aby dokładnie po
jednej stronie wystąpiło "N", a wszystkie pozostałe miały "1". Wówczas klucze główne jednostek
po stronie "1" stają się kluczami obcymi w tabeli reprezentującej jednostkę po stronie "N". Mówimy wówczas, że klucze migrują do tabeli po stronie "N"
Użycie "N" przy Prowadzenie oznacza, że ta sama para (IdPrac,IdGrupy) może wystąpić w
tabeli więcej niż jeden raz. Może się to zdarzyć np. wtedy, gdy zajęcia w grupie (w czasie tego samego semestru) prowadzi przez jakiś czas asystent "a1", potem zastępuje go "a2", a następnie
znowu wraca "a1". Podobne uzasadnienie jest dla napisania "N" przy jednostce Egzaminowanie.
Trudniej natomiast uzasadnić użycie "N" przy jednostce Zapisy. Użycie to wskazuje, do której tabeli reprezentującej jednostki powinny migrować klucze. A mogłoby to budzić wątpliwości, gdyby
wszędzie etykietą było "1".