Kolokwium I – zadanie przykładowe
1. Wykonaj projekt logiczny relacyjnej bazy danych w postaci diagramu związków encji, który posłuży do wykonania systemu informatycznego. Potrzeby i wymagania klienta względem systemu zarysowane są w poniższej notatce z wywiadu przeprowadzonego z klientem. Usuń z projektu wszystkie wykryte związki wiele do wielu, za pomocą rozłożenia takiego związku na dwa związki jeden do wielu i encję przejściową. Zaznacz opcjonalność na związkach encji (4 pkt.).
“Na taśmach VHS posiadam nagrane filmy i programy telewizyjne. Każdy z filmów klasyfikuję do jakiegoś jednego gatunku filmowego (s.f., horror, dokumentalny, ...) chyba, że jest to film z pogranicza kilku gatunków (np.: komedia s.f. lub thriller s.f.). Nie dzielę jednego filmu na różne taśmy (na części) i jeżeli mam do nagrania dłuższy film czy program, to kupuje odpowiednio długą taśmę. Potrzebuję systemu informatycznego do zarządzania tymi informacjami. Ponadto system ma mi zapewniać możliwość przechowania informacji o aktorach grających w filmie i głównym producencie filmu.”
2. Zaproponuj atrybuty encji wykonanych w punkcie pierwszym. Zaznacz, które z nich są wymagane, a które nie (inaczej mówiąc, które nie tolerują wartości nieoznaczonej NULL, a które ją dopuszczają). Zaznacz, które z atrybutów zostaną (już w relacyjnej bazie danych) kluczami podstawowymi, a które kluczami obcymi (6 pkt.).
Ad. 1) Wszystkie najistotniejsze encje zostały już podkreślone w tekście wywiadu i są nimi: “Taśma VHS”, “Film”, “Gatunek”, “Producent”, “Aktor”. Niekiedy problemem jest odszukanie związków pomiędzy tymi encjami (grupami obiektów analizowanego fragmentu świata rzeczywistego).
Najczęściej modelujemy świat rzeczywisty i sama definicja obiektu odwołuje się do świata rzeczywistego. Jak zaznaczałem na ćwiczeniach, nie upieram się przy używaniu terminu świat rzeczywisty, gdyż możemy modelować również światy wirtualne - zależy od warunków projektu. |
Konsekwentnie na ćwiczeniach będę pomijać projektowanie konceptualne. Jeżeli ktoś potrzebuje do wykonania diagramu związków encji modelu konceptualnego, to może go zrobić podczas kolokwium. Projekt konceptualny po prostu nie jest końcowym przepisem na wykonanie przez developera relacyjnej bazy danych. |
Również konsekwentnie będę pomijać poszukiwanie identyfikatorów (na zbiorze potęgowym atrybutów encji) naturalnych, czy zasady dobierania identyfikatorów sztucznych - było to omawiane na ćwiczeniach i tu na kolokwium jako developera interesuje mnie ostateczna decyzja, gdzie w tabeli ma zostać zbudowany klucz podstawowy (i czy wogóle), alternatywny(ne) lub obcy(e). Inne ograniczenia (constraints) podczas kolokwium możemy pominąć. |
Niekiedy w różnych opracowaniach kładzie się nacisk na liczbę pojedynczą lub mnogą rzeczownika będącego nazwą encji, a później tabeli. Większy nacisk spotykam przy nazewnictwie tabel: stosować liczbę pojedynczą, gdyż podczas wybierania informacji z takiej tabeli ma to przypominać proces przeglądania elementów listy. Żeby pominąć czysto akademicką dyskusję nt. ewentualnej wyższości liczby pojedynczej nad mnogą w nazewnictwie, przyjmijmy prostą zasadę: nasz diagram (a później baza) będzie czytelny, gdy konsekwentnie zastosujemy jedną liczbę w nazewnictwie. |
Zastosowane tu w rozwiązaniu nazwy encji, atrybutów encji i opisy związków encji nie są obowiązkowe. Tak samo jest z samym diagramem – podaję tu jedynie jedno z możliwych (moim zdaniem najprostszych) rozwiązań – można było zaproponować inny (byle tylko poprawnie przechowujący informacje, o które chodzi klientowi) układ encji i ich związków. |
Teraz trzeba uważnie przeczytać zdania wywiadu z klientem, aby poprawnie zaznaczyć związki encji.
“...na taśmach VHS posiadam nagrane filmy i programy telewizyjne...” – mówi o tym, że film (lub program) jest nagrany na taśmie, a taśma zawiera nagrane filmy.
“...każdy z filmów klasyfikuję do jakiegoś jednego gatunku filmowego...” – mówi o tym, że film należy do jakiegoś gatunku, a gatunek jest grupą pewnych filmów.
“...system ma mi zapewniać możliwość przechowania informacji o aktorach grających w filmie i głównym producencie...” – mówi o tym, że aktorzy grają w filmie, a film jest grany przez aktorów. Ponadto ta cytowana wzmianka mówi o tym, że film jest realizowany przez jakiegoś głównego producenta, a producent realizuje filmy.
W ubiegłych latach prace raczej nie miały źle wykonanych związków, ale często pojawiały się problemy z określeniem liczności związków encji m.in. proponowano, że w filmie gra tylko JEDEN aktor! |
Celem przealizowania liczności związków encji należy zwrócić uwagę na następujące fragmenty wywiadu:
“...na taśmach VHS posiadam nagrane filmy...” i “...nie dzielę jednego filmu na różne taśmy i jeżeli mam do nagrania dłuższy film ..., to kupuje odpowiednio długą taśmę...” – mówi o tym, że film nie jest dzielony na części przy nagrywaniu, ale w całości mieści się na taśmie. Nie jest konieczna encja, która przechowuje informacje o tym jaka część filmu jest gdzie nagrana. Na jednej taśmie można nagrać jednak kilka filmów (zazwyczaj dwa) lub programów telewizyjnych, a dany film można nagrywać na różnych taśmach (jako kopie).
“...każdy z filmów klasyfikuję do jakiegoś jednego gatunku filmowego chyba, że jest to film z pogranicza kilku gatunków...” – mówi, że jeden film może być kilku gatunków (np.: “Gwiezdne Wojny. Część I” – komedia s.f, “Matrix” – thriller s.f), ale też należy sobie zdawać sprawę, że filmów danego gatunku może być wiele (np.: horrory)
“...system ma mi zapewniać możliwość przechowania informacji o aktorach grających w filmie i głównym producencie...” – mówi, że w jednym filmie grać może wielu aktorów, ale też trzeba wiedzieć, że dany aktor może grać w wielu filmach; ponadto w tekście znajduje się wiadomość, że klienta nie interesuje lista producentów filmu tylko jeden, główny, a więc dla filmu istnieje jeden, główny producent, ale producent taki może wyprodukować wiele filmów.
Po takiej, wstępnej analizie można odrysować na diagramie związków encji następujący układ encji i związków:
Wszystkie związki wiele do wielu należy teraz zastąpić odpowiednimi związkami jeden do wielu i odpowiednią encją przejściową:
Na powyższym rysunku (diagramie związków encji) należało określić, że związek po stronie jeden MUSI (kreska na rysunku związku) występować. Wyjątkiem jest związek z encją "Producent", która może występować w związku (możemy nie znać głównego producenta - aby się o tym przekonać spróbuj wymienić 10 swoich ulubionych filmów i podaj ich producentów). Z kolei po stronie wielu ja zaproponowałem, że MOŻE (okrąg na rysunku związku) występować, ale to zależy już od indywidualnych upodobań projektanta. Ja sugerowałem się tym, że taki związek można w MS Accessie przekształcić w relację jeden do wielu (z kontrolą więzów integralności). Po prostu nie każdy system zarządzania bazami danych potrafi przechować dane tak, aby spełniały związek wymagany po obu stronach (z jednej strony MUSI i z drugiej też).
Ad. 2). Tu zaproponuję tylko MINIMALNĄ liczbę atrybutów encji, które przechowają dane, na których klientowi zależy. W ramach kolokwium student nie musi podawać opisów (ta informacja jest tu dodatkowa).
Encja: |
Taśma VHS |
|||
Opis: |
Dane o taśmach, które posiada użytkownik systemu. | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID taśmy |
Tak |
PRIMARY KEY |
Identyfikator taśmy. Klucz podstawowy. |
|
Długość |
Tak |
Długość w minutach taśmy np.: 60, 120, 180, 270. |
||
Nazwa producenta |
Nie |
Tu może to być m.in. Panasonic, Sony, BASF. |
Encja: |
Film |
|||
Opis: |
Dane o filmach, które nagrał użytkownik systemu. | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID filmu |
Tak |
PRIMARY KEY |
Identyfikator filmu. Klucz podstawowy. | |
Tytuł |
Tak |
Tytuł nie jest unikalny. | ||
Czas trwania |
Nie |
|||
ID głównego producenta |
Nie |
FOREIGN KEY | Klucz obcy odnoszący się do atrybutu ID producenta encji Producent. Atrybut ten nie jest wymagany (może przyjmować wartości NULL), co można zaobserwować na odpowiednim zwiążku encji. |
Encja: |
Producent |
|||
Opis: |
Dane o wytwórniach filmowych. | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID producenta |
Tak |
PRIMARY KEY |
Identyfikator producenta. Klucz podstawowy. | |
Nazwa producenta |
Tak |
Nazwa wytwórni filmowej np.: TriStar, Paramount Pictures. |
Encja: |
Aktor |
|||
Opis: |
Dane o aktorach. | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID aktora |
Tak |
PRIMARY KEY |
Identyfikator aktora. Klucz podstawowy. | |
Nazwisko |
Tak |
|||
Imię |
Tak |
Encja: |
Gatunek |
|||
Opis: |
Dane o gatunkach filmowych - tylko nazwy. | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID gatunku |
Tak |
PRIMARY KEY |
Identyfikator gatunku filmowego. Klucz podstawowy. | |
Nazwa gatunku |
Tak |
Nazwa gatunku filmowego np.: horror, dokumentalny, komedia. |
Encja: |
Obsada |
|||
Opis: |
Dane o obsadach filmów, czyli kto (ID aktora) gdzie (ID filmu) grał. Typowy przykład encji przejściowej. | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID aktora |
Tak |
PRIMARY KEY, |
Identyfikator aktora. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID aktora encji Aktor. | |
ID filmu |
Tak |
PRIMARY KEY, |
Identyfikator filmu. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID filmu encji Film. |
Encja: |
Przynależność |
|||
Opis: |
Dane o tym, jaki film (ID filmu) zaliczany jest do jakiego gatunku filmowego (ID gatunku). Typowy przykład encji przejściowej (nazwę encji można było zaproponować inną). | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID gatunku |
Tak |
PRIMARY KEY, |
Identyfikator gatunku. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID gatunku encji Gatunek. | |
ID filmu |
Tak |
PRIMARY KEY, |
Identyfikator filmu. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID filmu encji Film. |
Encja: |
Nagranie |
|||
Opis: |
Dane o tym, jaki film (ID filmu) na jakiej taśmie (ID taśmy) jest nagrany. Typowy przykład encji przejściowej (nazwę encji można było zaproponować inną). | |||
Atrybut |
Wymagany |
Klucz |
Opis |
|
ID taśmy |
Tak |
PRIMARY KEY, |
Identyfikator taśmy. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID taśmy encji Taśma VHS. | |
ID filmu |
Tak |
PRIMARY KEY, |
Identyfikator filmu. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID filmu encji Film. |
Primary Key – klucz podstawowy
Foreign Key – klucz obcy