Projektowanie baz danych - diagramy związków encji
Celem
procesu projektowania schematu bazy
danych jest:
- wyspecyfikowanie wymagań użytkowników przyszłej bazy danych, dokonanie
analizy tych wymagań,
- utworzenie schematu bazy danych spełniającego wymagania użytkowników i
jednocześnie gwarantującego poprawne funkcjonowanie bazy danych w ramach całego
systemu informacyjnego, zaprojektowanie
schematu bazy danych.
Pośredni
model projektowy - diagram
związków encji:
- powinien
w sposób jednoznaczny określać wymagania użytkowników umożliwiając im sprawdzenie czy analityk systemu
dobrze
zrozumiał ich intencje i specyfikę działania firmy;
- jest
istotnie prostszy od schematu bazy danych, ponieważ abstrahuje od szczegółów
implementacyjnych, które muszą być później opracowane przez projektanta
bazy danych aby baza danych mogła powstać i spełniać postawione przed nią
zadania.
Encja (obiekt) coś co istnieje, co jest odróżnialne
od innych, o czym informację trzeba znać lub przechowywać. Encje o tych
samych własnościach tworzą typy (zbiory) encji. Reprezentacją graficzną encji jest ramka (prostokąt).

- Należy odróżniać typ encji oraz jej instancje (egzemplarze)
- Osoba jako typ i jako konkretny obiekt.
Atrybut
jest to właściwość encji danego typu,
reprezentowana pewną wartością np. liczbą całkowitą, liczbą rzeczywistą,
napisem.
- Identyfikowany atrybut powinien opisywać encję, przy której się go
umieszcza (a nie związki z
innymi encjami)!
- (Pierwsza postać normalna) Dla każdego egzemplarza encji każdy jej atrybut powinien przyjmować
pojedynczą, atomową wartość.
- Należy pomijać atrybuty wyliczane.
Klucz (jednoznaczny identyfikator)
jest to zbiór (być może jednoelementowy) atrybutów danej encji, których
wartości jednoznacznie identyfikują każdą instancję tej encji. Jeden
klucz - główny, pozostałe alternatywne. Jedna encja może mieć
wiele kluczy.
Atrybuty klucza głównego wyróżnia się etykietą PK i podkreśleniem.
- W Visio atrybuty encji określa się w zakładce
“Columns”.
- Odróżnia się dwie specyfikacje typów danych: niezależną od systemu baz
danych (Portable Data Type) i zorientowaną na generowanie bazy danych do
konkretnego systemu baz danych (Physical Data Type).

i

Więzy spójności dla encji określa się w zakładce
Check.

Związek - uporządkowana lista encji, poszczególne encje mogą występować wielokrotnie.
- Każdy związek
określa pewną relację między zbiorami egzemplarzy encji wchodzącymi w skład
związku - instancję związku.
- Związek
można formalnie zapisać przy użyciu notacji relacyjnej:
Z(E1 ,...,En)
co oznacza: encje E1 ,...,En
wchodzą w skład związku Z
Przykłady
- Pracownik pracuje w dziale
- Pracownik w projekcie pełni rolę
- Kraj eksportuje towar
Związek binarny -
dwuargumentowy
- reprezentowany graficznie jako linia łącząca dwie ramki (encje).
-
Visio automatycznie tworzy w encji Osoba atrybut Id (z etykietą FK1) - klucz
obcy - określający powiązania instancji encji Osoba z instancjami encji
Departament.

Uwaga: Połączenie encji związkiem sygnalizują czerwone
kwadraciki w miejscu połączeń encji z linią związku!
- Instancja związku binarnego jest dwuargumentową relacją na iloczynie
kartezjańskim zbiorów instancji encji - w naszym przykładzie, zbioru osób ze zbiorem departamentów.
Związek jednoznaczny
Gdy instancja związku binarnego jest dwuargumentową
funkcją częściową związek jest jednoznaczny.
- W naszym przykładzie
funkcją ze zbioru osób w zbiór departamentów.
Część związku odpowiadająca dziedzinie funkcji jest nazywana stroną
wiele związku (lub encją podrzędną), a część odpowiadająca przeciwdziedzinie funkcji
stroną
jeden związku (lub encją nadrzędną) – i jest oznaczana strzałką.
- W
naszym przykładzie Departament
jest
encją po stronie jeden (nadrzędną) a Osoba encją po stronie wiele (podrzędną).
Implementacja związku jednoznacznego
Dwie encje połączone związkiem jednoznacznym są implementowane
odpowiednio przez dwie tabele. W encji po stronie wiele jest dodany klucz obcy
określający powiązanie z instancją encji po stronie jeden.
- W
naszym przykładzie do encji Osoba jest dodany klucz obcy Id etykietowany przez
FK1 określający powiązanie z instancją encji Departament - przez wartość
klucza głównego Id.
Okienko właściwości związku
Zakładka
“Definition” definiuje związek jako powiązanie dwóch atrybutów:
tworzonego automatycznie klucza obcego w encji po stronie "wiele" i
klucza głównego w encji po stronie "jeden".

Zakładka "Name" określa sposób
odczytywania zawartości związku oraz nazwę dla więzów klucza
obcego: Departament_Osoba_FK1.

Zakładka “Miscelaneous” określa podstawowe własności związku:
-
liczebność (Cardinality) – ile egzemplarzy encji po stronie wiele może być
połączone z jednym egzemplarzem encji po stronie jeden;
- typ związku
(Relationship type) - czy identyfikujący – wartość klucza obcego wchodzi w
skład klucza głównego encji po stronie wiele czy nieidentyfikujący - wartość
klucza obcego nie wchodzi w skład klucza głównego encji po stronie wiele oraz
-
opcję Optional – czy wartość klucza obcego jest opcjonalna
tzn. czy dopuszcza wartość NULL.

Zakładka “Ref. Integrity” określa akcje referencyjne
podejmowane w przypadku naruszenia więzów spójności referencyjnej przez
operacje usuwania i aktualizacji wierszy w tabeli nadrzędnej.

Oto opcje:
- Nic nie rób (No action, Restricted) - nie wykonuj zmiany naruszającej więzy
spójności referencyjnej.
- Propaguj zmiany do encji podrzędnej (Cascade) - przy aktualizacji
instancji encji nadrzędnej uaktualnij wartość klucza
obcego w encji podrzędnej
a przy usuwaniu razem z egzemplarzem encji nadrzędnej usuń wszystkie powiązane przez wartość klucza
obcego egzemplarze encji podrzędnej.
- Wstaw NULL (Set Null) - w przypadku aktualizacji lub usuwania
instancji encji nadrzędnej za wartość klucza
obcego w odpowiadających jej instancjach encji podrzędnej wstaw NULL.
- Wyłącz więzy spójności referencyjnej i wykonaj operację (Do
not enforce).
Transformacja związku niejednoznacznego
- Dla związku o liczbie argumentów większej niż
dwa Z(E1 ,...,En),
n>2 wprowadzamy nową
encję E0 i n
jednoznacznych związków binarnych Zi(E0,Ei)
łączących nową encję ze starymi. Klucz encji E0 jest sumą kluczy encji E1,...,En;
- Dla niejednoznacznego związku binarnego Z(E1,E2) wprowadzamy nową encję E0 i dwa związki jednoznaczne Z1(E0,E1),
Z2(E0,E2)
łączące nowy zbiór encji ze starymi. Klucz encji E0
jest sumą kluczy encji E1
i E2.
Wprowadzana encja reprezentująca związek nazywa się asocjacyjna.
Przykład transformacji
dla związku trójargumentowego
Pracownik w projekcie pełni rolę

Stosując
przedstawioną metodę wprowadzamy nową encję asocjacyjną, której
zadaniem jest opisać związek zachodzący między osobami, projektami i rolami.
Jednoznaczny identyfikator nowej encji tworzą trzy wprowadzone związki tj. klucze obce do encji Osoba, Projekt
i Rola.

- Istotne jest ustawienie typu związków jako identyfikujących – to właśnie
powoduje umieszczenie kluczy obcych do encji Osoba, Projekt i Rola w części
identyfikującej (klucza głównego) encji asocjacyjnej Uczestnictwo.
- W encji asocjacyjnej można umieszczać atrybuty charakteryzujące związek
np. między osobami, projektami i rolami atrybut Okres_czasu.
Związek rekurencyjny
Zachodzi między tą samą encją, np. "Jedna osoba jest kierownikiem drugiej
osoby".
Aby go zdefiniować w Visio tworzymy pętlę związku wokół encji Osoba,
wprowadzamy do encji Osoba nowy atrybut o nazwie Kierownik i łączymy go z
kluczem głównym Numer – w zakładce Definition.

Generowanie bazy danych
Po wybraniu docelowego systemu
bazodanowego (w naszym przypadku MS Accessa) możemy wygenerować tabele w bazie
danych:
- Tworzymy pustą bazę danych Accessa.
- Z menu
Visio wybieramy opcję "Database -> Generate" wywołując kreator
generacji.
- W pierwszym okienku dialogowym kreatora wybieramy opcję "Generate
new database".
4a. Przy pierwszym użyciu:
- Wybieramy opcję: "Create MDB file" i "New"
(data source name - DSN).
- W kolejnych okienkach wybieramy opcje "System data
source", "Microsoft Access driver".
- Po utworzeniu DSN podajemy ścieżkę do utworzonej wcześniej bazy danych
Accessa.
4b. Przy kolejnym użyciu:
- Wybieramy opcję: "MDB file already exists".
- W kolejnych okienkach wybieramy DSN z
listy rozwijanej i ścieżkę do utworzonej wcześniej bazy danych Access.
Po wygenerowaniu i otwarciu bazy danych Access mamy:

Przykład
Zbudować model bazy danych z informacjami o piwoszach,
barach i gatunkach piwa. Wymodelować związki:
-
W barze podają gatunek piwa.
-
Piwosz lubi gatunek piwa.
-
Piwosz bywa w barze.
Rozwiązanie
Związki jedno-jednoznaczne, jeden-do-jeden
Gdy instancja związku jest różnowartościową funkcją częściową np.
związek "Każdy student jest osobą" ("Osoba może być studentem,
ale nie musi nim być").

Metody
odwzorowania w tabele bazy danych
-
(Stosowana
przez MS Access) Używamy dwóch tabel: Student i Osoba. W tabeli Osoba
zapisujemy atrybuty wspólne dla wszystkich osób. W tabeli Student
zapisujemy klucz główny z tabeli Osoba (identyfikujący studenta jako osobę)
oraz atrybuty charakterystyczne tylko dla studentów.
- Wadą tego rozwiązania
jest konieczność częstego używania złączenia dwóch tabel.
-
Używamy
tylko jednej tabeli, w której są przechowywane wszystkie możliwe atrybuty
dotyczące osób. Jeśli osoba nie jest studentem, wartości atrybutów
charakterystycznych tylko dla studentów pozostają NULL.
- Wadą tego rozwiązania
jest potencjalnie duża liczba wartości NULL w tabeli.
-
W przypadku
podziału encji Osoba na kilka podtypów, na przykład na encje Student i
Pracownik, można użyć dwóch osobnych tabel Student i Pracownik. Gdy jest
potrzebna informacja obejmująca zarówno studentów, jak i pracowników,
trzeba zastosować sumowanie zawartości dwóch tabel.
- Metoda ta jest dobra,
gdy podział na podencje jest rozłączny.
- Gdy podział na podencje nie jest
rozłączny, ta sama informacja będzie powtarzana w wielu miejscach, np.
informacja o pracownikach będących jednocześnie studentami.