Diagram związków encji.


      Diagram związków encji (z ang. ERD - entity relationship diagram) jest jednym ze sposobów przedstawienia modelu logicznego bazy danych. Jest to rysunek encji i związków pomiędzy nimi, który ułatwia analizę wybranego obszaru świata rzeczywistego modelowanego w bazie danych. Do wspomagania procesu projektowania systemu informatycznego służy m.in. pakiet aplikacji Oracle o nazwie Designer/2000. Niestety szkoła nie dysponuje tym pakietem, ponieważ w procesie dydaktycznym wystarczającym okazuje się pakiet Developer/2000. Umożliwia on wykonanie bazy danych dla serwera Oracle 8 (aplikacja o nazwie Schema Builder), jednak nie daje możliwości wykonania diagramu związków encji. W związku z powyższym na tej stronie przedstawię jak można wykonać taki diagram związków encji za pomocą narzędzia ER/1 firmy Embarcadero Technologies. Aplikacja ER/1 w wersji trial jest rozpowszechniana na płycie CD załączonej do książki "SQL. Księga eksperta".
      Tu chcę wyraźnie zaznaczyć, że istnieją również inne aplikacje umożliwiające wykonywanie diagramów związków encji (np.: System Engineer firmy Learmonth & Burchett Management Systems Inc. (nazywanej LBMS Inc. - obecnie Princeton Softech), czy Power Designer firmy PowerSoft). Ja jednak zdecydowałem się omówić ER/1 ze względu na prostotę obsługi tej aplikacji. Zdaję sobie sprawę, że już Power Designer 7 (który jest możliwy do ściągnięcia ze strony producenta w wersji Trial) posiada o wiele większe możliwości. Jednak zależy mi tu tylko na pokazaniu sposobu wykonywania diagramu związków encji.



W aplikacji ER/1 możemy wykonać diagram związków encji po wydaniu polecenia "New" z menu "File". Na początku zostaniemy zapytani do jakiego systemu zarządzania bazą danych (w skrócie SZBD) zostanie przekonwertowany ów diagram jako zwieńczenie pracy. Tu wybierzmy sobie z dostępnych bibliotek "Oracle 7" tak jak pokazuje poniższy rysunek:

Rozpocznijmy wykonywanie diagramu od umieszczenia na nim pierwszej encji. W tym celu wybieramy z paska narzędzi encję (entity) i umieszczamy ją w diagramie tak jak pokazuje poniższy rysunek:

Po dwukrotnym kliknięciu na encji możemy określić jej nazwę oraz nazwę tabeli, która zostanie na podstawie encji wykonana (w oknie "Entity Editor"). Zauważmy, że mogą to być dwie różne nazwy, co pokazuje poniższy rysunek:

W tym samym oknie ("Entity Editor") w zakładce "Attributes" możemy dodać atrybuty encji. Atrybuty będące kluczem podstawowym dodaje się oddzielnie (co pokazuje powyższy rysunek) niż pozostałe (co pokazuje poniższy rysunek):

Po określeniu atrybutów encja wygląda w sposób następujący:

Na podstawie encji wygenerowana będzie tabela i dlatego musimy dokładniej określić właściwości atrybutów. Jeżeli tego nie zrobimy, to wygenerowana tabela będzie wyglądała następująco (po przestawieniu sposobu prezentacji z atrybutów na tabele):

Musimy jeszcze określić typy danych dla kolumn i czy są one Null'owe. Jeżeli SZBD może zapamiętać komentarz dla kolumny, to również ten komentarz możemy określić. Jeżeli niezbędne jest określenie wartości domyślnej, to również możemy ją podać, tak samo jak constraint CHECK. W tym celu ponownie dwukrotnie klikamy na rysunek encji i w oknie jej właściwości przechodzimy na zakładkę "Columns":

Po dwukrotnym kliknięciu na danym atrybucie otwiera się okno "Column Editor", w którym regulujemy właściwości kolumny:

Jeżeli potrzebujemy założyć dodatkowy indeks dla kolumn tej przyszłej tabeli, to posłuży do tego następna zakładka w oknie "Entity Editor" o nazwie "Indexes":

Kolejna zakładka w tym oknie posłuży do wpisanie komentarza przypisanego do tabeli (o ile SZBD może zapamiętać komentarz przypisany do tabeli):

Zauważmy też, że komentarz tabeli może być inny niż encji, który przechowany zostanie w następnej zakładce "Note":

Tak jak komentarz dotyczący encji i tabeli, tak i nazwy atrybutów i kolumn mogą się od siebie różnić. Możemy zmieniać nazwy kolumn i atrybutów w pierwszej zakładce "Attributes", po dwukrotnym kliknięciu na zadanym atrybucie:

Powyższy rysunek dotyczy już encji "Pracownik". W tejże encji zostaną dodane dla przykładu dodatkowe właściwości kolumn - DEFAULT oraz CONSTRAINT CHECK, co pokazują dwa poniższe rysunki:

W ramach diagramu związków encji wykonajmy tylko trzy encje, które po przekonwertowaniu na tabele są omawiane podczas zajęć: "Klient", "Pracownik", "Zamówienie".

Po wykonaniu encji łączymy je ze sobą za pomocą związków encji:

Tak wykonany diagram jest gotowy do przekształcenia go w bazę danych działającą pod kontrolą wybranego SZBD (tu Oracle 7). W tym celu wydajemy polecenie "Generate SQL" z menu "Database" i włącza się kreator bez problemów prowadzący poprzez sposób wykonania skryptu w SQL-u, z którego powstanie nowa baza danych.

Tu muszę jednak uczciwie zaznaczyć, że wersja trial ER/1 nie generuje poprawnie kodu dla Oracle 8 (czyżby brak odpowiednich bibliotek?). Jeżeli chcemy wygenerowania poprawnych skryptów, to musimy przestawić rodzaj SZBD. Ustalmy, że będzie nim SQL Server 6. Teraz wszystkie typy danych obsługiwane przez Oracle'a zostaną przekonwertowane na typy obsługiwane przez SQL Serwer np.: VARCHAR2 na VARCHAR, NUMBER na NUMERIC, a DATE na DATETIME. Jednak do poprawnego wygenerowania tabel potrzebujemy jeszcze zmienić jedną rzecz w tym projekcie - wartość domyślną dla atrybutu "Data_zamowienia" encji "Zamowienie". Otóż wartość ta ma być datą pobraną z serwera i dla Oracle jest to SYSDATE, ale dla SQL Servera datę zwraca funkcja GETDATE() (dla Accessa byłaby to funkcja NOW()). Po takiej zmianie i ponownej generacji kodu (bez generacji trigerów, które nie były jeszcze omawiane na zajęciach - tylko tabele, indeksy i klucze) możemy przetworzyć ten kod na narzędziu będącym odpowiednikiem SQL*Plusa o nazwie Query Analyzer i otrzymać nowy zestaw tabel (poniższy rysunek pokazuje SZBD dla SQL Servera 7 - aplikację o nazwie Enterprise Manager):

W tej też aplikacji możemy zobaczyć diagram zależności pomiędzy tabelami, który jest już fizycznym odpowiednikiem diagramu związków encji:

Jeżeli nie dysponujemy serwerem bazodanowym MS SQL Server 7, to dużo tańszym serwerem jest Sysbase SQL Anywhere 5.5, który pracuje pod Windows 95. Posługując się ER/1 również i dla niego możemy wygenerować kod. W tym celu wystarczy tylko przestawić SZBD z SQL Servera 6 na Sysbase SQL Anywhere. Kod tak wygenerowany możemy przetworzyć na narzędziu zwanym ISQL (odpowiednik SQL*Plusa) i zobaczyć możemy gotowe tabele za pomocą narzędzia Sysbase Central:

Oczywiście nie wszystkie aplikacje wspomagające prace projektowe są tak łatwe w obsłudze. Jest wiele skomplikowanych narzędzi, które potrafią o wiele więcej niż tylko wygenerowanie diagramu związków encji. Jednak celem dzisiejszych zajęć było przedstawienie do czego mogą służyć narzędzia wspomagania inżynierii oprogramowania (narzędzia CASE), a nie wszystkich możliwych ich zastosowań. Mam nadzieję, że samo istnienie takich narzędzi przekona co bardziej opornych, że do pracy przy projektowaniu baz danych konieczna jest jeszcze znajomość teorii, a nie tylko umiejętność obsługi komputera. Mam też nadzieję, że prezentowane powyżej przykłady pracy z trzema popularnymi SZBD dobrze pokazały, że każdy z nich wyposażony jest w edytor tekstu (odpowiednio: SQL*Plus, Query Analyzer, ISQL), za pomocą którego możemy pracować posługując się językiem SQL.



Projekty z aplikacji ER/1:
er1_oracle_7.dm1 - projekt dla Oracle 7 (7,3KB)
er1_sql_server_7.dm1 - projekt dla Microsoft SQL Server 7 (7,4KB)
er1_sql_anywhere.dm1 - projekt dla Sysbase SQL Enywhere 5 (7,6KB)