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.
Rysunek diagramu można zacząć od pięciu kwadratów symbolizujących zaznaczone w tekście encje:


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,
FOREIGN KEY

Identyfikator aktora. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID aktora encji Aktor.

ID filmu

Tak

PRIMARY KEY,
FOREIGN 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,
FOREIGN KEY

Identyfikator gatunku. Składnik dwupolowego klucza podstawowego. Klucz obcy odnoszący się do atrybutu ID gatunku encji Gatunek.

ID filmu

Tak

PRIMARY KEY,
FOREIGN 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,
FOREIGN 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,
FOREIGN 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