Bazy Danych, egzamin – 8 lutego, 2013
1. (20p) Stwórz diagram ER dla wydawnictw. W szczególno´sci oznacz słabe encje,
klucze, rodzaje zwi ˛
azków (opcjonalne, wiele do jednego, integralno´s´c referen-
cyjn ˛
a. . . . ).
Ksi ˛
a˙zki posiadaj ˛
a tytuł, rodzaj (powie´s´c, poezja, . . . ) oraz obj˛eto´s´c (liczb˛e stron).
Autorów identyfikuje imi˛e i nazwisko. Poza tym autorzy posiadaj ˛
a dat˛e urodzenia
i płe´c. Tytuły ksi ˛
a˙zek mog ˛
a si˛e powtarza´c, lecz ˙zaden autor nie napisał dwóch
ksi ˛
a˙zek o tym samym tytule. Ksi ˛
a˙zki wydawane s ˛
a przez wydawnictwa. Ka˙zde
wydawnictwo posiada unikatow ˛
a nazw˛e oraz posiada tak˙ze adres i rok zało˙zenia.
W wydawnictwach pracuj ˛
a edytorzy. Edytora charakteryzuje imi˛e i nazwisko.
Edytor pracuje w najwy˙zej jednym wydawnictwie (cho´c mo˙ze te˙z nie posiada´c
nigdzie etatu). Wydawnictwa wydaj ˛
a ksi ˛
a˙zki. Ka˙zde wydanie posiada rok wyda-
nia oraz nakład. Ka˙zde wydanie posiada jednego edytora (który jest za nie odpo-
wiedzialny).
2. (20p) Przekształ´c diagram ER do projekt relacyjny. W relacjach podkre´sl atry-
buty wchodz ˛
ace w skład klucza danej relacji.
S
A
T
B
U
C
D
f
a
b
c
d
e
3. (6x5p) Mamy dane tabele Pracownicy(id, imie, nazwisko, data_zatrudnienia,
sklep_id,placa, stanowsko), Sklepy(id,adres), Towary(nazwa, cena), Sprzedaz(id,
pracownik_id, towar_id, cena, data). Klucze relacji s ˛
a podkre´slone. Pola pra-
cownik_id, towar_nazwa oraz sklep_nazwa to odpowiednie klucze obce. Pole
cena w tabeli Sprzedaz odpowiada cenie konkretnej transakcji i mo˙ze by´c ró˙zne
od aktualnej ceny towaru.
Napisz zapytania SQL dla:
(a) historii cen (data, cena) towaru ’sznurek’, po jakiej był on sprzedawany w
sklepie o id 3 w roku 2012 (posortowan ˛
a według dat).
(b) listy sklepów (id) i towarów (nazwa) takich, ˙ze dany towar nigdy nie był
sprzedany w danym sklepie.
(c) listy 5 towarów (nazwa, ilosc_sztuk), które sprzedały si˛e od pocz ˛
atku roku
w najwi˛ekszej ilo´sci sztuk,
(d) listy towarów, których sumaryczna warto´s´c sprzeda˙zy w roku 2012 była
wi˛eksza ni˙z w roku 2011.
1
(e) dodania do tabeli Towary wszystkich towarów (nazwa, cena), których nazwy
wyst˛epuj ˛
a w tabeli Sprzedaz a nie wyst˛epuj ˛
a w tabeli Towary (cen˛e mo˙zemy
ustawi´c jako null).
(f) usunie z tabeli Towary, wszystkie towary, których cena jest nieznana (czyli
ma warto´s´c null) lub wynosi 0.
4. (10p) Napisz program PL/SQL, który usunie z tabeli towary wszystkie towary,
które nie zostały ani razu sprzedane w roku 2012 i podniesie o 5% ceny po-
zostałych towarów.
5. (5p) Mamy w bazie danych u˙zytkowników us1, . . . , us4. Kto b˛edzie miał (poza
us1) prawo do wykonania select na tablicy us1.t) po wykonaniu ci ˛
agu instrukcji
(i dlaczego):
us1: grant select on us1.t to us2 with grant option;
us2: grant select on us1.t to us3 with grant option;
us3: grant select on us1.t to us2;
us1: grant select on us1.t to us4 with grant option;
us4: grant select on us1.t to us3;
us1: revoke select on us1.t from us2;
6. (10p) W relacji R(A,B,C,D,E) mamy nast˛epuj ˛
ace zale˙zno´sci funkcyjne: AC →
D, AD → C, BDE → A, AC → B, AB → E. Podaj wszystkie klucze wła´s-
ciwe (czyli minimalne zbiory, które wyznaczaj ˛
a warto´sci wszystkich atrybutów)
dla tej relacji.
7. (5p) Tabela T(n number) zawiera liczby 1, 2, 3, 4. Co b˛edzie zawierała po wyko-
naniu nast˛epuj ˛
acego ci ˛
agu instrukcji przez transakcje t1 i t2 przy poziomie izo-
lacji COMMITED READ.
t1: insert into T values (5);
t2: insert into T values (6);
t1: savepoint S;
t1: insert into T values (7);
t2: update T set n = n+10 where mod(n,2)=1;
t1: rollback to S;
t2: update T set n = n+20 where mod(n,2)=1;
t1: update T set n = n+30 where mod(n,2)=0;
t1: commit;
t2: commit;
2