Rozdział 8
Pierwsza rzeczywista aplikacja bazy
danych klient/serwer
Programy Silverrun, opisywane w rozdziałach 6,7 i 8, są jednymi z wielu
zestawów narzędzi dostępnych dla osób programujących w języku Delphi
(wybrane zostały przez autora i nie są odbiciem preferencji firmy Borland).
Rozdział ten rozpoczyna drugą część książki - „Tutorial”. Czytelnik znajdzie
w niej informacje na temat budowania aplikacji bazy danych klient\serwer.
W naszych rozważaniach jest to aplikacja, którą można określić jako system
zarządzania wynajmem (w skrócie RENTMAN) - konstruowana według założeń
zaprezentowanych w rozdziałach 6 i 7.
Ograniczona objętość tej książki nie pozwoliła omówić wyczerpująco wszystkich
aspektów dotyczących konstruowania aplikacji RENTMAN - ograniczyliśmy się
więc do tych, których znajomość jest niezbędna przy tworzeniu aplikacji
klient/serwer. Naszym celem było:
Zaprezentowanie praktycznej realizacji (prezentowanych wcześniej w książce),
koncepcji dotyczących projektowania aplikacji i bazy danych.
Wielostronna analiza procesu tworzenia rzeczywistej aplikacji klient/serwer.
Podanie wyczerpujących wskazówek i zasygnalizowanie trudności.
Pokazanie sposobu optymalizacji aplikacji dla systemu zarządzania bazą
danych klient\serwer.
Jak już mówiliśmy w rozdziale 6, w procesie budowania aplikacji bazy danych
formalnie można wyróżnić następujące procesy:
Definiowanie celu i funkcji bazy danych .
Projektowanie fundamentu bazy danych i procesów aplikacji, niezbędnych do
implementowania tych funkcji.
Przekształcenie projektu w aplikację - przez stworzenie bazy danych i obiektów
programowych.
Testowanie aplikacji pod kątem zgodności ze zdefiniowanym celem
i funkcjami.
Instalowanie aplikacji.
244
Część II
Wyróżnić zatem możemy pięć faz tworzenia oprogramowania:
Analiza
Projekt
Budowa (konstrukcja)
Testowanie
Eksploatacja
Poprawne budowanie złożonej aplikacji dowolnego typu wymaga starannego
planowania.
Wiele zadań z zakresu konstrukcji aplikacji RENTMAN zostało zrealizowanych
wcześniej, szczególnie dotyczy to zagadnień odnoszących się do projektowania
bazy danych.
UWAGA
Wstępny projekt bazy danych, opisany w rozdziale 6, stanowi punkt wyjścia prac
projektowych, z
którymi obecnie się zaznajomimy. Przed przejściem do
następnego etapu należy więc najpierw wykonać zadania przedstawione
w rozdziale 6 lub zapoznać się z modelem zapisanym na dołączonym do książki
dysku CD-ROM.
Możemy odwołać się do rozdziału 6, w którym opisany został proces zarządzania
i pobierania opłat dzierżawnych dla firmy Allodium Properties. Obecnie,
wykorzystując nabyte w rozdziale 6 umiejętności, można zbudować i zbadać
proces konserwacji. Wykonany zostanie pełny model procesu z wykorzystaniem
tych elementów, związanych z regułami przetwarzania, które powinny być
włączone do aplikacji. W
pierwszej kolejności - do tworzonego modelu
wbudowywane będą elementy wspólne dla procesów dzierżawienia i konserwacji
oraz dla modeli z rozdziału 6.
Definiowanie celu aplikacji
Pierwszą czynnością, jaką należy wykonać przed rozpoczęciem opracowywania
aplikacji, jest określenie jej zadań i naszych oczekiwań.
Podobnie jak w rozdziale 6, możemy to zrobić, deklarując cel. Deklaracja ta
powinna zawierać zdanie, które składa się z podmiotu, orzeczenia i dopełnienia.
Podmiotem jest zawsze aplikacja, orzeczenie opisuje pracę, którą ona wykonuje,
a podmiot identyfikuje odbiorcę (tej pracy).
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
245
Aplikacja opisywana w tym rozdziale ma jasny cel: zarządzanie własnością
dzierżawioną. System nie zastąpi ludzi, szczególnie przy podejmowaniu decyzji,
a jedynie pomoże im w
zarządzaniu. Tak więc deklaracja celu aplikacji
RENTMAN, sformułowana już w rozdziale 6, jest następująca:
System RENTMAN ułatwia zarządzanie nieruchomościami.
Definiowanie funkcji aplikacji
Po sformułowaniu deklaracji celu można przystąpić do określenia obowiązkowych
funkcji aplikacji, czyli takich, bez których byłaby ona niekompletna (które musi
posiadać, aby wypełnić deklarację celu). W tym przypadku należy dokładnie
określić, co powinna wykonywać aplikacja w celu „ułatwienia zarządzania
własnością dzierżawioną”.
Należy postępować tak, jak w przypadku określania deklaracji celu. W rozdziale 6,
stosując tę metodę, wyodrębniliśmy następujące funkcje systemu RENTMAN:
System RENTMAN ułatwia zarządzanie nieruchomościami poprzez:
Rejestrację i obsługę umów najmu nieruchomości.
Śledzenie przebiegu prac związanych z konserwacją nieruchomości.
Generowanie rachunków dla najemców.
Dostarczanie informacji archiwalnych o poszczególnych nieruchomościach.
Po zdefiniowaniu podstawowych funkcji aplikacji nadszedł czas na
zaprojektowanie bazy danych i
obiektów programowych, niezbędnych do
wykonywania zdefiniowanych funkcji.
Projektowanie podstaw bazy danych i procesów
W rozdziale 6 badane są: baza danych i elementy programowe, niezbędne do
zaimplementowania zarządzania wynajmem. Odpowiada to pierwszej z czterech
podstawowych funkcji systemu RENTMAN. Omówimy tutaj czynniki niezbędne
do obsługi pozostałych funkcji podstawowych, a szczególnie przebieg prac
remontowych - (konserwacji) nieruchomości, fakturowanie najemcy
i archiwizowanie danych statystycznych najmu. Szczęśliwie korzystają one
w dużym stopniu z tej samej bazy danych, stosując niektóre elementy programowe
procesu najmu.
246
Część II
Modelowanie reguł przetwarzania
Rzeczywiste projektowanie bazy danych rozpoczyna się modelowaniem procesu,
a kończy projektowaniem tworzących ją obiektów fizycznych. Ogólnie mówiąc,
projekt bazy danych można sprowadzić do trzech etapów:
1. Dokumentowanie reguł przetwarzania, koniecznych do spełnienia wymaganych
funkcji aplikacji.
2. Tworzenie związków encji niezbędnych do obsługi tych procesów.
3. Stworzenie logicznego projektu bazy danych, niezbędnego do zrealizowania
związków encji i reguł przetwarzania.
Rozpoczniemy dokumentację reguł przetwarzania od ponownego przyjrzenia się
pracy wykonanej w rozdziale 6.
Modele reguł przetwarzania mogą pomóc projektantowi w myśleniu kategoriami
procesów, z których składa się aplikacja. Pomagają one w określaniu, które
elementy programu i bazy danych są niezbędne przy implementowaniu zadanych
reguł przetwarzania. Modele składają się ze zbiorów, procesów i zewnętrznych
elementów połączonych razem strumieniami. Na rysunku 8.1 pokazano końcową
wersję modelu reguł przetwarzania zarządzania wynajmem (z rozdziału 6).
Modelowanie reguł przetwarzania realizowane jest w trzech etapach:
1. Określenie niezbędnych procesów, obiektów zewnętrznych, strumieni i zbiorów
danych.
Rysunek 8.1.
Model reguł
przetwarzania
zarządzania
wynajmem.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
247
2. Określenie wzajemnych relacji między tymi elementami.
3. Schemat tych elementów i związków w modelu.
Najpierw, w celu uzyskania informacji niezbędnej do budowania procesu, należy
przeprowadzić wywiad z
użytkownikiem, sformułować pytania i
poznać
interesującą nas rzeczywistość. W konstruowaniu modelu procesu zarządzania
wynajmem należałoby uzyskać odpowiedzi na następujące pytania:
Jakie obiekty zewnętrzne są niezbędne do prowadzenia dokumentacji
i zarządzania wynajmem majątku?
Jakie procesy można wyróżnić?
Jakich zasobów wymagają te procesy?
Jakie zbiory danych będą niezbędne?
Jak będą przepływały dane z jednego elementu do drugiego?
Po uzyskaniu odpowiedzi na te pytania możemy stwierdzić, że:
Potrzebny jest co najmniej jeden obiekt zewnętrzny - spodziewany najemca.
Należy oddzielić procesy niezbędne do obsługi wynajmu od procesów
realizowania wynajmu.
Firma Allodium Properties chce śledzić zgłoszenia od spodziewanych
najemców i zbierać oddzielnie informacje o najemcach, umowach wynajmu
i nieruchomości, co pociąga za sobą konieczność istnienia czterech zbiorów
danych. W zbiorach tych będą gromadzone zgłoszenia, najemcy, umowy
wynajmu i nieruchomości.
Co się tyczy przepływu danych między tymi elementami, można przyjąć, że:
Spodziewani najemcy kontaktują się z
urzędnikiem w biurze, w celu
zasięgnięcia informacji o dostępnych nieruchomościach lub zawarcia umowy
najmu.
Urzędnik rejestruje każde odebrane zgłoszenie, bez względu na to, czy jego
wynikiem
jest zawarcie umowy, czy też nie.
Urzędnik sprawdza dostępne nieruchomości.
Po zweryfikowaniu przez niego umowy najmu, przekazywana jest ona do
zatwierdzenia (dyrektorowi działu).
Informacja o najemcy jest zapisywana do pliku.
Dyrektor działu przechowuje zapis zawartej umowy.
248
Część II
Ponieważ proces zarządzania wynajmem jest zasadniczo zakończony, narzuca się
pytanie, jakie inne czynności należy wykonać, aby zaimplementować pozostałe
funkcje systemu RENTMAN, czyli:
Śledzenie prac konserwacyjnych nieruchomości.
Generowanie rachunków dla najemców.
Archiwizowanie informacji dotyczących nieruchomości.
Weźmy pierwszą z tych funkcji i wykorzystajmy podobny zestaw pytań, jak
w przypadku procesu zarządzania wynajmem.
Jakie obiekty zewnętrzne są niezbędne do śledzenia prac konserwacyjnych
majątku?
Jakie procesy można wyróżnić?
Jakich zasobów wymagają te procesy?
Jakie zbiory danych będą niezbędne?
Jak będą przepływały dane z jednego elementu do drugiego?
Dochodzimy do następujących wniosków:
W modelu niezbędny jest co najmniej jeden obiekt zewnętrzny, reprezentujący
najemców, którzy zgłaszają się z żądaniami konserwacji.
Do obsługi przetwarzania zgłoszeń i prac konserwacyjnych będą potrzebne
oddzielne procesy.
Konieczny będzie zbiór danych, w którym będzie można zbierać (a następnie
udostępniać z niego) informacje o pracach konserwacyjnych.
Będą potrzebne co najmniej trzy dodatkowe zbiory danych: zbiór najemców,
zbiór zgłoszeń i zbiór danych majątku.
Co do przepływu danych między tymi elementami, można przyjąć, że:
Najemcy kontaktują się z biurem, aby poinformować o zaistniałym problemie
Personel biura otwiera zlecenie pracy i przyporządkowuje je konserwatorowi.
Pracownik wykonuje pracę i po jej zakończeniu powiadamia biuro.
Wzorując się na rozdziale 6, należy skonstruować reguły przetwarzania, które
obejmują te elementy, czyli uruchomić narzędzie Silverrun-BPM i zbudować
model podobny do pokazanego na rysunku 8.2.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
249
WSKAZÓWKA
Wykorzystanie starych modeli przy konstruowaniu nowych oszczędza czas - unika
się ponownego tworzenia elementów modelu (zbiorów danych, procesów itp.),
które występowały w modelu pierwotnym. W tym przypadku nowy model reguł
przetwarzania możemy oprzeć na procesie opisanym w rozdziale 6. Należy
w Silverrun-BPM ponownie otworzyć plik modelu
LEASE.BPM
i - używając opcji
menu
File\Clone
- zapisać go pod inną nazwą. Następnie zamknąć
LEASE.BPM
i załadować nowy model (alternatywą klonowania, zamknięcia i ponownego
załadowania jest wybór polecenia
File\Save
as
- wybór należy do użytkownika).
W opisanym powyżej modelu są dwa zbiory danych, które nie występowały
w modelu procesu wynajmu, skonstruowanym w rozdziale 6 (EMPLOYEE
i WORDER). Ich pojawienie się związane jest z koniecznością przyporządkowania
konserwatora do zleconych prac konserwacyjnych.
Firma Allodium chce, aby w nowym systemie naśladować formularze papierowe.
W celu przechowywania informacji, dotyczących zleceń prac w mieszkaniach,
dołączono zbiór danych
WORDER
. Żaden z tych dwóch zbiorów danych nie był
potrzebny w modelu procesu wynajmu, w związku z tym nie były one tam
implementowane.
Tak jak w przypadku procesu wynajmu należy w tym miejscu określić struktury
danych. Pozwolą one na zdefiniowanie informacji o atrybutach dla zbiorów
danych. Później informacja ta będzie wykorzystana do tworzenia atrybutów
w schematach E-R i tabelach w relacyjnym modelu danych. Na schemacie
Rysunek 8.2.
Model reguł
przetwarzania dla
zarządzania
majątkiem.
250
Część II
znajdują się dodane właśnie dwa zbiory danych i niezbędne struktury danych.
Należy zdefiniować dwie nowe struktury (
Project\Data Structures
),
następnie dodać atrybuty do każdej struktury (
Data\Structure
Composition
).
Do struktury danych
EMPLOYEE
należy dodać następujące atrybuty:
Employee Number (numer pracownika)
Employee Name (nazwisko pracownika)
Do struktury danych
WORDER
należy dodać te atrybuty:
WOrder Number (numer zlecenia)
WOrder Start Date (data rozpoczęcia zlecenia)
WOrder End Date (data zakończenia z
lecenia)
WOrder Employee Number (nr pracownika przyporządkowanego do
➥
zlec.)
WOrder Property Number (nr własności)
WODetail Line Number (numer wiersza)
WODetail Description (opis szczegółu)
Work Type Code (kod typu)
Work Type Description (opis typu)
Work Type Task Duration (czas trwania zadania)
WOrder Comments (komentarze)
Po ustanowieniu struktury danych, należy skojarzyć ją z odpowiednim zbiorem
danych. W tym celu powinniśmy postępować zgodnie z procedurą opisaną poniżej:
1. Wyświetlić listę aktualnie zdefiniowanych zbiorów danych. W tym celu
w aplikacji Silverrun-BPM należy wybrać opcję menu
Presentation\Palettes\
Data Structures
.
2. Używając prawego przycisku myszy przeciągnąć strukturę danych - z
Data
Structure
Palette
- do odpowiedniego zbioru danych.
3. W
Data
Structure
Palette
, na lewo od skojarzonych struktur danych, widoczna
jest gwiazdka. Można również dwukrotnie kliknąć zbiór (store) - aby upewnić
się, że jest on prawidłowo połączony ze strukturą danych.
Zachowywanie modelu
Po prawidłowym ustawieniu struktur danych nie ma przeszkód, aby zapisać nowy
model (należy w tym celu kliknąć opcję
File\Save
). Dobrą nazwą dla tego pliku
(o ile nie jest już nazwany) jest
MAINT.BPM
. Następnie przechodzimy do
tworzenia schematu E-R.
Specjalny zestaw instrukcji, służący do udostępnienia zbiorów danych dla
programu narzędziowego Silverrun-ERX, pozwala na wykorzystanie zbiorów
i struktur danych, zdefiniowanych w modelu reguł przetwarzania, w diagramach
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
251
związków encji. Przede wszystkim należy uaktualnić składnicę elementów modelu,
w taki sposób, aby utworzony model był dostępny dla obu narzędzi - BPM i ERX.
W tym celu powinniśmy:
1. Kliknąć opcję menu
Util\WRM
. Spowoduje to przejście do trybu specjalnego,
umożliwiającego pracę lokalnej składnicy Silverrun. Powinno pojawić się okno
dialogowe, zatytułowane
WRM Dictionary
, i nowe menu
WRM
Dictionary
, które
zostanie wyświetlone na menu głównym Silverrun-BPM.
2. Kliknąć pozycję menu
WRM Dictionary\Update WRM Dictionary
(przy
widocznym na ekranie oknie dialogowym).
3. W wyświetlonym właśnie oknie dialogowym kliknąć opcję
Update
. Następnie -
aby zaakceptować nazwę uaktualnionego raportu - należy kliknąć przycisk
Save
. Efektem będzie kopiowanie składnicy i uaktualnienie jej o zbiory danych
i struktury istniejące w
modelu. Zaakceptować domyślną nazwę pliku
uaktualnianego raportu, a następnie kliknąć
OK
. - co spowoduje wykasowanie
komunikatu informacyjnego, wyświetlonego po uaktualnieniu.
4. Kliknąć opcję menu
WRM Dictionary\Save WRM Dictionary
, następnie podać
nazwę
MAINT.WRM
- jako nową dla pliku składnicy Na dysk twardy zapisana
zostanie kopia składnicy, skąd można ją importować do programu Silverrun-
ERX.
5. Kliknąć przycisk zamknięcia (
Close
) na ramce okna dialogowego
WRM
Dictionary
.
Teraz, gdy model i skojarzona z nim składnica są zapisane na dysku, można
przejść do konstruowania diagramu E-R dla procesu zarządzania konserwacją.
Zamknąć narzędzie Silverrun-BPM i uruchomić ERX.
Modelowanie związków encji
Podstawową zaletą (jak już wspomniano w rozdziale 6) stosowania narzędzia
Silverrun ERX do projektowania bazy danych jest to, że można normalizować
związki encji. ERX ułatwia wykrywanie i ustalanie tych powiązań, które nie są
zgodne z trzecią postacią normalną. Proces ten można nieco uprościć, nazywając
atrybuty tak, aby nieodpowiednie wzajemne relacje były łatwiejsze do zauważenia
(jest to jednak czymś niezwykłym wśród narzędzi E-R). W wielu narzędziach
CASE, wspierających tworzenie baz danych, nie ma udogodnień normalizujących
projekt.
Można pominąć proces wykonywania schematu E-R i przejść prosto do tworzenia
logicznego modelu bazy danych. Narzędzie Silverrun RDM importuje zbiory
danych zarówno z narzędzia BPM, jak i ERX. Powtórzmy jeszcze raz -
podstawową zaletą użycia w tym momencie programu ERX jest to, że pomaga
252
Część II
zabezpieczyć spójność relacji modelu. Niektórzy programiści uważają proces
tworzenia schematu E-R za zbędny i bezpośrednio - z fazy modelowania procesów
- przechodzą do modelowania logicznego danych.
Importowanie zbiorów modelu reguł przetwarzania
Aby przetransponować zbiory danych, zdefiniowane w
modelu reguł
przetwarzania, na encje, należy je wpierw importować do programu
narzędziowego ERX Silverrun. W tym celu trzeba:
1. Wybraæ opcjê menu
Util\WRM Dictionary
. Spowoduje to przejście ERX do
specjalnego trybu pracy z lokalną składnicą Silverrun.
2. Kliknąć opcję menu
WRM Dictionary\Update a Model
i wybrać plik składnicy
MAINT.WRM, stworzony w narzędziu BPM.
3. Wybrać opcję menu
WRM Dictionary\Update a Model
, następnie kliknąć
Update
w oknie dialogowym i zaakceptować domyślną nazwę dla uaktualnionego pliku
raportu. Po zapytaniu, czy dołączyć model do tego samego projektu, w którym
znajduje się składnica, należy kliknąć
Yes
. Dodane zostaną do bieżącego
modelu zbiory danych i struktury, zdefiniowane w modelu reguł przetwarzania.
Później będzie można użyć ich do konstruowania encji w schemacie E-R. Po
kliknięciu
OK
skasowany zostanie komunikat informacyjny, pojawiający się po
zakończeniu uaktualnienia.
4. Kliknąć przycisk zamknięcia (
Close
) na ramce okna dialogowego
WRM
Dictionary
.
Teraz zbiory dostępne są w
modelu i
można je przeciągnąć (myszą) na
powierzchnię modelowania i w ten sposób przetransponować na encje, które
można ująć w schemacie E-R. Aby tego dokonać, należy:
1. Wybrać opcję menu
Presentation\Palettes\Component: SR Store
- wyświetli się
paleta zbiorów importowanych pośrednio z modelu reguł przetwarzania.
2. Z wyjątkiem zbiorów LEASE i PROPERTY, każdy zbiór danych należy
przeciągnąć z
palety na powierzchnię modelowania, używając prawego
przycisku myszy. Zbiory danych LEASE i PROPERTY można pominąć,
ponieważ nie istnieją one w modelu procesu zarządzania konserwacją. Każdy
z nich pozostaje w modelu procesu wynajmu.
3. Należy zauważyć, że każda encja jest tworzona w centrum modelu - bez
względu na to, gdzie jest „upuszczana”, co powoduje narastanie stosu encji. Po
przetransponowaniu wszystkich zbiorów do modelu, należy przesunąć każdą
encję tak, aby nie nakładała się na inne.
4. Zamknąć okno dialogowe
Componnet:SR Store palette
przyciskiem
Close
.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
253
Na rysunku 8.3 pokazano możliwy wygląd schematu E-R.
Normalizacja modelu
Teraz, gdy uporządkowany jest wyjściowy zestaw encji, można przystąpić do
normalizacji modelu E-R. W tym celu należy:
1. Kliknąć opcję menu
Expert\Expert Mode
- ERX przejdzie do specjalnego trybu,
w którym możliwe jest wykonanie zaawansowanych funkcji oraz
przeprowadzenie normalizacji.
2. Kliknąć opcję menu
Expert\ Normalize Model
. Spowoduje to uruchomienie
normalizacji. Po zapytaniu, czy analizować nazwy aktualnie używane
w modelu, klikamy
Yes
.
3. Po analizie nazw elementów modelu kliknąć
OK
w oknie dialogowym
Analyze
Attribute Names
.
4. Następnie zostanie wyświetlone okno dialogowe z
komunikatem
ostrzegającym, że normalizacja może znacząco zmienić model. Wybranie
Yes
sygnalizuje ERX zgodę na kontynuowanie procesu normalizacji.
Model jest obecnie znormalizowany w pełnym zakresie oferowanym przez ERX.
Relacje są początkowo układane w modelu na stosie (jedno na drugim). Należy
rozmieścić je w taki sposób, aby nie nakładały się na siebie. Na rysunku 8.4
pokazano przykładowy wygląd modelu.
Rysunek 8.3.
Schemat E-R
w etapach
początkowych.
254
Część II
Należy zwrócić uwagę na dwie nowe encje w modelu, a mianowicie WODetail
i Work Type. Aby uzyskać zgodność z resztą modelu, należy dwukrotnie kliknąć
górną część każdej z nich i zmienić ich nazwy na pisane dużymi literami. Zgodnie
z przyjętą w rozdziale 4 konwencją, dotyczącą nazewnictwa, podczas zamiany
małych liter na duże, z nazwy encji Work Type powinna zostać usunięta spacja.
Nie ma wątpliwości, że normalizując model, przy pomocy ERX, programista
oszczędza czas. Pojawia się jednak również kilka problemów. Po pierwsze, należy
zwrócić uwagę na wzajemne związki między encjami WORDER i WORKTYPE.
WORKTYPE jest w rzeczywistości powiązany z pozycjami wierszy zleceń pracy;
w przypadku jednego zlecenia pracy może być realizowane kilka różnych typów
prac.
Złożenie dokonane przez eksperta normalizacji jest więc nieprawidłowe. Aby
zapobiec takiej sytuacji, należy postępować zgodnie z procedurą opisaną poniżej:
1. Kliknąć obiekt relacji między encjami WORDER i WORKTYPE i wybrać
Delete
- powiązania między tymi dwoma obiektami zostaną usunięte.
2. Wybrać narzędzie relacji w palecie narzędzi ERX (najlepiej dopuszczające
linie diagonalne), a
następnie kliknąć (jeden raz) encję WODETAIL
i
WORKTYPE - między nimi zostaną utworzone powiązania. Należy
zauważyć, że minimalna i maksymalna liczność relacji jest pozostawiona pusta.
Można je później ustawić po zweryfikowaniu połączeń modelu.
Inny problem, związany z modelem wynika z faktu, iż TENANT jest encją
„wiszącą”. Nie znajduje się ona w jakichkolwiek relacjach z innymi encjami.
Problem ten nie jest wynikiem złej pracy narzędzi normalizacji ERX, ale luki
Rysunek 8.4.
Schemat E-R po
wykonaniu
normalizacji.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
255
w oryginalnych, wcześniej stworzonych, definicjach struktury danych BPM.
W modelu procesu konserwacji nie ma bezpośredniego odniesienia, przez
jakiekolwiek inne zbiory, do zbioru danych TENANT. W modelu procesu
wynajmu zbiór TENANT jest powiązany ze zbiorem LEASE , a LEASE ze
zbiorem PROPERTY. W
modelu procesu konserwacji zbiory PROPERTY
i LEASE są albo definiowane bez odpowiednich struktur danych albo są
całkowicie pominięte. W konsekwencji zbiór danych TENANT jest nie związany.
Ponieważ w późniejszym okresie relacyjne modele danych procesu wynajmu
i konserwacji będą połączone, nie ma to aż tak istotnego znaczenia. W tym
momencie można usunąć z modelu encję TENANT. W tym celu należy kliknąć
lewym przyciskiem myszy wskazując encję TENANT a następnie nacisnąć
klawisz
Delete
. Na rysunku 8.5 pokazano przykładowy wygląd modelu na tym
etapie.
Weryfikowanie połączeń
Uporządkowany model jest gotowy do zweryfikowania. W procesie weryfikacji
sprawdzane jest, czy normalizacja połączeń encji, oparta na przypuszczeniach
eksperta, jest poprawna. Aby sprawdzić dokładność bieżących wzajemnych
zależności encji, należy:
1. Wybrać opcję menu
Expert\Verify Connectivities
- aby rozpocząć pracę eksperta
połączeń, który postawi szereg pytań, odnoszących się do wzajemnych
związków między encjami w schemacie.
Rysunek 8.5.
Model po
uporządkowaniu.
256
Część II
2. Kliknąć przełącznik (radio button) All Connectivities w oknie dialogowym
Verify Connectives
i upewnić się, czy dla wybranego pola wyboru wzajemnych
związków nie dokonano już weryfikacji. Kliknąć
Verify
.
3. Następnie ekspert zada kilka pytań odnoszących się do wzajemnych związków
między encjami. Silverrun-ERX wykorzysta uzyskane w ten sposób informacje
do ustawienia połączeń w modelu. Odpowiadając na pytania, należy używać
odpowiedzi podanych w tabeli 8.1.
Tabela 8.1 Odpowiedzi na pytania stawiane przez eksperta połączeń ERX
Pytanie
Odpowiedź
In general, is it necessary for a WORDER to have an
EMPLOYEE to exist?
Yes
(Czy niezbędnym warunkiem istnienia wystąpienia encji
WORDER jest istnienie odpowiadającego wystąpienia
encji EMPLOYEE?)
(Tak)
In general, can one WORDER have many EMPLOYEEs?
No
Czy jedno wystąpienie encji WORDER może odpowiadać
wielu wystąpieniom encji EMPLOYEE?
(Nie)
In general, is it necessary for a EMPLOYEE to have an
WORDER to exist?
No
(Czy niezbędnym warunkiem istnienia wystąpienia encji
EMPLOYEE jest istnienie odpowiadającego wystąpienia
encji WORDER?)
(Nie)
In general, can one EMPLOYEE have many WORDERSs?
Yes
Czy jedno wystąpienie encji EMPLOYEE może
odpowiadać wielu wystąpieniom encji WORDER?
(Tak)
In general, is it necessary for a WORDER to have
a WODETAIL to exist?
No
(Czy niezbędnym warunkiem istnienia wystąpienia encji
WORDER jest istnienie odpowiadającego wystąpienia
encji WODETAIL?)
(Nie)
In general, can one WORDER have many WODETAILs?
Yes
Czy jedno wystąpienie encji WORDER może odpowiadać
wielu wystąpieniom encji WODETAIL?
(Tak)
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
257
Pytanie
Odpowiedź
In general, is it necessary for a WODETAIL to have
a WORDER to exist?
Yes
(Czy niezbędnym warunkiem istnienia wystąpienia encji
WODETAIL jest istnienie odpowiadającego wystąpienia
encji WORDER?)
(Tak)
In general, can one WODETAIL have many WORDERs?
No
Czy jedno wystąpienie encji WODETAIL może
odpowiadać wielu wystąpieniom encji WORDER?
(Nie)
In general, is it necessary for a CALL to have a WORDER
to exist?
No
(Czy niezbędnym warunkiem istnienia wystąpienia encji
CALL jest istnienie odpowiadającego wystąpienia encji
WORDER?)
(Nie)
In general, can one CALL have many WORDERs?
No
Czy jedno wystąpienie encji CALL może odpowiadać
wielu wystąpieniom encji WORDER?
(Nie)
In general, is it necessary for a WORDER to have a CALL
to exist?
No
(Czy niezbędnym warunkiem istnienia wystąpienia encji
WORDER jest istnienie odpowiadającego wystąpienia
encji CALL?)
(Nie)
In general, can one WORDER have many CALLs?
Yes
Czy jedno wystąpienie encji WORDER może odpowiadać
wielu wystąpieniom encji CALL?
(Tak)
In general, is it necessary for a WORKTYPE to have
a WODETAIL to exist?
No
(Czy niezbędnym warunkiem istnienia wystąpienia encji
WORKTYPE jest istnienie odpowiadającego wystąpienia
encji WODETAIL?)
(Nie)
In general, can one WORKTYPE have many
WODETAILs?
Yes
Czy jedno wystąpienie encji WORKTYPE może
odpowiadać wielu wystąpieniom encji WODETAIL?
(Tak)
258
Część II
Pytanie
Odpowiedź
odpowiadać wielu wystąpieniom encji WODETAIL?
In general, is it necessary for a WODETAIL to have
a WORKTYPE to exist?
Yes
(Czy niezbędnym warunkiem istnienia wystąpienia encji
WODETAIL jest istnienie odpowiadającego wystąpienia
encji WORKTYPE?)
(Tak)
In general, can one WODETAIL have many
WORKTYPEs?
No
Czy jedno wystąpienie encji WODETAIL może
odpowiadać wielu wystąpieniom encji WORKTYPE?
(Nie)
Po udzieleniu odpowiedzi na pytania ekspert połączeń ERX ustala wzajemne
związki między encjami - aby określić liczność relacji na podstawie uzyskanych
odpowiedzi. Należy zauważyć, że liczność relacji między encjami WORDER
i WODETAIL nie jest już pusta. Na rysunku 8.6 pokazano, jak taki model
powinien wyglądać.
Definiowanie identyfikatorów encji
Teraz, gdy związki między encjami są ustawione prawidłowo, można przystąpić do
ustanawiania identyfikatorów dla każdej klasy encji. Postępując zgodnie
Rysunek 8.6.
Model po ustaleniu
połączeń między
encjami.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
259
z procedurą opisaną poniżej, należy wskazać atrybuty, które identyfikują każdą
z encji.
1. Aby uruchomić eksperta identyfikacji encji, należy kliknąć opcję menu
Expert\Search for Identifiers
.
2. Upewnić się, że znacznik wyboru encji nie został już wybrany w otwartym
oknie dialogowym i kliknąć
Search
.
Zamiast przeszukiwania ekspert wyświetla więc szereg okien dialogowych, które
pozwalają na określenie identyfikatora dla każdego atrybutu. Aby wykorzystać
identyfikatory podane w
tabeli 8.2, należy dwukrotnie kliknąć wpierw
identyfikator encji, a następnie przycisk
Continue
.
Spowoduje to przesunięcie identyfikatora na wierzchołek listy. W jego kolumnie
id zostanie wyświetlona gwiazdka.
Tabela 8.2 Identyfikatory obiektów dla schematów E-R.
Encja
Identyfikator
CALL Numer
zgłoszenia
EMPLOYEE Numer
pracownika
WODETAIL
Identyfikator WORDER, numer wiersza WODetail
WORDER Numer
WOrder
WORKTYPE
Kod typu pracy
Należy zauważyć złożoność identyfikatora encji WODETAIL. Każde zlecenie
pracy może mieć wiele wierszy opisujących pracę do wykonania. Każdy z wierszy
będzie kolejno numerowany, w ten sposób nadany zostanie atrybut numeru
wiersza WODetail Line Number. Jednakże numery wiersza same w sobie nie są
wystarczające do jednoznacznej identyfikacji każdej wystąpienia encji
WODETAIL (np. wszystkie zlecenia pracy powinny normalnie mieć wiersz
o numerze 1) Do prawidłowej identyfikacji potrzebny jest dodatkowy element.
W tym przypadku pominiętym składnikiem jest numer wiersza głównego zlecenia
pracy. Numer ten jest identyfikatorem encji WORDER. Stosując połączenie
numerów zlecenia pracy i numeru wiersza, można określić każde pojawienie się
encji WODETAIL. W ten sposób WODETAIL jest zależny od encji WORDER,
ponieważ jego identyfikator encji zawiera co najmniej częściowo identyfikator
encji WORDER. ERX podświetla tą encję zależnie od podkreślenia odpowiedniej
liczności w modelu.
260
Część II
UWAGA:
Ekspert identyfikatorów ERX umieszcza atrybut identyfikatora WORDER poniżej
atrybutu numeru linii WODetail w liście, którą determinuje identyfikator encji
WODETAIL. Pomimo tego może wydawać się, że kolumna numeru zlecenia pracy
powinna poprzedzać kolumnę numeru linii w fizycznej implementacji bazy
danych, ale nie należy się tym niepokoić. Silverrun RDM, generujący, wymagany
do stworzenia projektu bazy danych, skrypt SQL, poradzi sobie z właściwym
ustawieniem kolejności atrybutów w więzach klucza pierwotnego WODETAIL.
Umieszczenie identyfikatora encji WORDER po lewej stronie klucza pierwotnego
WODETAIL spowoduje zbudowanie indeksu WODETAIL przy pomocy trzech
kolumn ustawianych w określonej kolejności. Wszystko to oznacza, że położenie
identyfikatora WORDER jest nieistotne, gdy więzy klucza pierwotnego
WODETAIL i indeksy są zbudowane w sposób prawidłowy.
Na rysunku 8.7 pokazano model z rozmieszczonymi kluczami pierwotnymi.
Zachowywanie modelu
Zasadniczo budowa schematu E-R została zakończona. Teraz można zachować
model i przekształcić go na format pliku narzędzia RDM. Aby przygotować model
dla Silverrun-RDM, należy:
1. Wybrać opcję
File\Save
- w celu zapisania modelu na dysk twardy (nazwa
MAINT.ERX
). Jak już była mowa w rozdziale 6, model przed zapisaniem
Rysunek 8.7.
Schemat E-R po
zdefiniowaniu
kluczy
pierwotnych.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
261
można opisać, używając opcji menu
Model\Model Description
. Na rysunku 8.8
pokazano wygląd modelu z opisem.
2. Opuścić narzędzie ERX i uruchomić Silverrun ERX-RDM. Narzędzie to jest
wykorzystywane do przekształcenia modelu, zaprojektowanego w ERX, na
format pliku, który jest kompatybilny z Silverrun-RDM.
3. W Silverrun ERX-RDM wybrać opcję menu
File\Transform ERX->RDM
.
4. Wybrać plik zawierający model E-R, stworzony dla procesu konserwacji.
Powinien być nazwany MAINT.ERX.
5. Po zapytaniu o wybór nazwy pliku wyjściowego, należy zaakceptować
proponowaną MAINT.RDM. Plik ten powinien być zgodny z narzędziem
Silverrun RDM.
6. Zamknąć narzędzie Silverrun ERX-RDM i uruchomić Silverrun-RDM.
Konstruowanie logicznego modelu danych
Po przetłumaczeniu schematu E-R na format pliku kompatybilnego z Silverrun-RD
możemy przejść do budowy relacyjnego modelu projektowanej bazy danych.
Należy zdać sobie sprawę, że w
tym miejscu główny akcent w procesie
modelowania zaczyna się przesuwać w kierunku fizycznej implementacji bazy
danych. Następuje przejście od definiowania pojęć abstrakcyjnych - np. encji - do
definiowania struktur fizycznych (tabel). Efektem pracy będzie skrypt SQL, który
Rysunek 8.8.
Schemat końcowy
E-R.
262
Część II
można użyć do tworzenia obiektów, wyszczególnionych w logicznym modelu
danych. W dalszej części podręcznika omówiliśmy wykorzystanie skryptu do
tworzenia tabel RENTMAN i innych obiektów baz danych na platformie
docelowej DBMS ( dla systemu
RENTMAN
platformą docelową jest Inter Base).
Integracja relacyjnego modelu wynajmu
Aby rozpocząć budowę logicznego modelu danych (LDM - logical data model) dla
procesu konserwacji, należy w pierwszej kolejności dołączyć logiczny model
danych procesów wynajmu. Integracja ta umożliwi uzyskanie pojedynczego
modelu danych dla całości bazy danych RENTMAN - z pominięciem ponownego,
„ręcznego” tworzenia obiektów.
Silverrun-RDM posiada opcje, zaprojektowane specjalnie w celu integracji
różnych modeli. Aby wykorzystać je do połączenia procesu wynajmu
i konserwacji w jeden relacyjny model danych, powinniśmy:
1. Klikając przycisk zamknięcia na ramce okna, zamknąć domyślny model
stworzony przez RDM.
2. Kliknąć przycisk otwarcia na pasku narzędzi i wybrać plik
MAINT.RDM
-
stworzony jako ostatni przez Silverrun ERX-RDM.
3. Może pojawić się komunikat sygnalizujący, iż plik modelu odpowiada starszej
wersji narzędzia RDM. Aby jednak go otworzyć klikamy
Yes
4. Teraz zapytani zostaniemy o
wybór systemu docelowego dla modelu.
Wybieramy
Avail.Target Sys
. oraz - z wyświetlonego, rozwijalnego menu -
INTBASINTBAS41.TYP
i klikamy
OK
. Umożliwi to wybranie ostatniej wersji
InterBase (4.1), obsługiwanej przez Silverrun-RDM, oraz platformy docelowej
DBMS. Otwarty zostanie model w narzędziu RDN.
5. Klikamy opcję menu
Schema\Schema Description
i zmienić opis na:
Realtional Data Model for Maintenance Process
, a następnie
zapisujemy model.
6. Po raz drugi wybieramy przycisk otwarcia i otwieramy, stworzony w rozdziale
6 dla procesu wynajmu, relacyjny model danych. Powinien nazywać się
LEASE.RDM.
7. Aby uruchomić eksperta integracji RDM, klikamy opcję menu
Util.\Integrate
.
8. W oknie dialogowym
Schema Integration
wybieramy schemat relacyjny
wynajmu - jako schemat źródłowy (
Source Schema
) i schemat relacyjny
konserwacji - jako docelowy (
Dest. Schema
) i klikamy
Integrate
.
9. Wyświetlone zostanie okno dialogowe sygnalizujące, że model wynajmu
powinien być uwzględniony jako schemat cząstkowy modelu konserwacji. Ten
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
263
komunikat jest mało znaczący - by przejść do dalszej realizacji zadań klikamy
OK
.
10. Aby zaakceptować nazwę pliku dla raportu integracji klikamy
Save
w oknie
dialogowym
Integration Report
.
11. W oknie dialogowym
Target Systems
, w
liście platform docelowych,
wybieramy opcję
Inter Base
i potwietrdzamy przyciskiem
OK
.
12. Aby połączyć obiekty, wykorzystujące wspólną nazwę, w oknie dialogowym
Tables
należy kliknąć przycisk
Link by Name
. W tym przypadku jest to tablica
CALL. Klikamy
OK
.
13. W oknie dialogowym
Connectors
klikamy
OK
, akceptując domyślną
informację konektora. Ekspert zintegruje wówczas model wynajmu z modelem
konserwacji.
14. Otworzyć okno, zawierające logiczną strukturę danych konserwacji. Powinien
wówczas zostać wyświetlony model wynajmu, połączony z
modelem
konserwacji. Prawdopodobnie będziemy musieli przemieścić pozycje w tym
modelu tak, aby nie zachodziły na siebie, a ich wzajemne relacje stały się
bardziej wyraziste.
15. Wybrać opcje menu
Schema\Schema Description
i obciąć nową nazwę modelu
do postaci
Relational Data Model
(nazwa projektu zawarta jest
w tytule okna, więc szerszy opis nie ma uzasadnienia).
16.
Zapisujemy nowy model jako RENTMAN.RDM (nie nadpisywać
MAINT.RDM). Jest to teraz relacyjny model danych, na podstawie którego
będzie konstruowana baza danych
RENTMAN
. Na rysunku 8.9 pokazano
przykładowy wygląd takiego modelu.
264
Część II
Zdolność do integracji oddzielnych modeli relacyjnych jest jedną z największych
zalet Silverrun (cechy tej nie posiadają znane autorowi inne narzędzia typu
CASE). Jeśli (z jakichkolwiek przyczyn) nie będziemy mogli jej wykorzystać,
wówczas będziemy musieli „ręcznie” połączyć modele, w narażonym na błędy
i nudnym procesie.
Szczególnie interesująca jest integracja dwóch różnych widoków tabeli CALL.
W modelu wynajmu jest ona przyłączona do tabeli PROPERTY, natomiast w
modelu konserwacji - do tabeli WORDER. Należy zauważyć, że nowy model
obsługuje wstępnie obydwie relacje, co oznacza istotną oszczędność czasu.
Tabela CALL zawiera w dalszym ciągu kolumnę o nazwie Property Number -
pozostałość pierwotnego modelu reguł przetwarzania konserwacji. Atrybut
Number
Property
został włączony do modelu procesu konserwacji, ponieważ
znajdował się w formularzu zgłoszenia firmy Allodium. Obecnie, gdy między
tabelami CALL i PROPERTY została ustanowiona relacja z użyciem klucza
obcego, można tę kolumnę bezpiecznie skasować. Nie będzie ona już więcej
potrzebna, ponieważ zastępująca ją relacja spowoduje stworzenie kolumny
Property Number w fizycznej bazie danych. Aby usunąć kolumnę należy
dwukrotnie kliknąć tabelę CALL, wybrać kolumnę Property Number (jej kolumny
Coded Name i Domain powinny być puste), a następnie kliknąć
Delete
. Klikając
OK
zamykamy okno dialogowe
Table Columns
. Na rysunku 8.10 pokazano
przykład ilustrujący tę sytuację.
Rysunek 8.9.
Logiczny model
danych
RENTMAN.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
265
W tabeli WORDER pojawia się ten sam problem; posiada ona zbędną kolumnę
Property Number, która bez wątpienia przeszła z
formularza zamówienia
Allodium. Należy usunąć ją w taki sam sposób, jak w przypadku kolumny Property
Number z tabeli CALL. Następnie należy - używając narzędzia konektora RDM -
ustanowić relację z
użyciem klucza obcego między tabelami WORDER
i PROPERTY.
Definiowanie kolumn
Dla zachowania jednolitości aplikacji RENTMAN należy - po zintegrowaniu
logicznego modelu danych wynajmu i konserwacji w pojedynczy model relacyjny
- zdefiniować informacje o domenach dla tych tabel, które powstały dopiero
w modelu konserwacji. Tabele pochodzące z modelu wynajmu mają już określone
domeny (co można łatwo sprawdzić po dwukrotnym kliknięciu lub oglądając
uważnie rysunek 8.10). Dla pojawiających się w modelu konserwacji tabel:
WORDER, WODETAIL, WORKTYPE i
EMPLOYEE musimy określić
ustawienia domen - tj. typ kolumny, jej długość, wszystkie zasady integralności
lub więzy i różne inne szczegóły określane na poziomie kolumny (dwukrotnie
klikamy każdą tabelę modelu konserwacji i definiujemy domeny zgodnie z tabelą
8.3).
Zwróćmy uwagę na wykorzystanie domeny użytkownika (Tcomments) w kolumnie
Worder Comments tabeli WORDER. Dodatkową korzyścią integracji logicznego
modelu danych wynajmu i konserwacji jest uzyskanie dostępu do domen
użytkownika, pierwotnie zdefiniowanych w modelu wynajmu.
Rysunek 8.10.
Usuwanie kolumny
Property Number
z tablicy CALL.
266
Część II
UWAGA:
Kolumny Descriptions w tabelach CALL, WODETAIL i WORKTYPE są bardzo
podobne. Ze względów praktycznych nie były one wcześniej definiowane. Warto
o tym pamiętać podczas tworzenia własnych baz danych. Dzięki gromadzeniu
najczęściej spotykanych typów danych w domenach centralnych oszczędzamy czas
i unikamy kłopotów, gdyby kiedykolwiek zaistniała potrzeba dokonywania zmian
w definicjach przyłączanych kolumn. Jeśli do definiowania wielu kolumn używana
jest pojedyncza domena, można jednocześnie wprowadzić zmiany do wszystkich
kolumn, modyfikując tylko ich domenę
Tabela 8.3 Informacje dotyczące domen kolumn dla tabel modelu konserwacji
Tabela
Kolumna
Domena
Długość
Miejsca
dziesiętne
Wart.
domyśl.
Czy
możliwa
wart.
zerowa
EMPLOYEE
Employee Number
Employee Name
INTEGER
CHARACTER
N/A
30
N/A
N/A
pusty
pusty
Nie
Nie
WORDER
WOrder Number
WOrder Start Date
WOrder End Date
WOrder Comments
INTEGER
DATE
DATE
TComments
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
pusty
pusty
N/A
N/A
Nie
Nie
Tak
Tak
WODETAIL
WODetail Line
Number
WODetail
Description
INTEGER
CHARACTER
N/A
30
N/A
N/A
N/A
N/A
Nie
Tak
WORKTYPE
Work Type Code
Work Type
Description
Work Type Task
Duration
INTEGER
CHARACTER
DECIMAL
N/A
30
5
N/A
N/A
2
N/A
N/A
N/A
Nie
Nie
Nie
Generowanie nazw kodowych
Po zdefiniowaniu wszystkich kolumn możemy przystąpić do generowania nazw
kodowych dla poszczególnych elementów modelu. Są one drugimi nazwami
elementów, które są dopuszczalne na wybranej platformie DBMS. Silverrun-RDM
usuwa spacje, obcina długie nazwy i ogólnie porządkuje nazwy wykorzystywane
przez model. Należy zauważyć, że zachowywane są nazwy pierwotne, wybrane
przez użytkownika; nazwy kodowe są przechowywane oddzielnie. Podczas
generowania skryptu SQL który będzie używany do konstruowania obiektów bazy
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
267
danych, można stosować pełne nazwy elementów modelu lub ich nazwy kodowe.
Za pośrednictwem opcji menu
Presentation\Displayed Descriptor
można także
skontrolować, czy RDM będzie wyświetlać nazwy kodowe w reprezentacji
graficznej modelu. Aby wygenerować nazwy kodowe dla modelu, należy:
1. Wybrać opcję menu
Schema\Generate Coded Name
.
2. Kliknąć przycisk Specify, a następnie ustawić maksymalną długość
(Maximum Lenght), a dla ilości znaków od początku do końca
każdego słowa w
nazwie
przyjąć
30
. Stworzone obiekty znajdują się
w bazie danych InterBase (tak więc
30
jest dobrym wyborem).
3. Ustawienia innych okien dialogowych należy pozostawić nie zmienione.
Następnie, aby powrócić do okna dialogowego
Coded Names Generation
,
klikamy kolejno
OK
i przycisk
Generate
.
Nowe nazwy kodowe zostaną wyświetlone po dwukrotnym kliknięciu każdej tabeli
w modelu. Aby zobaczyć nazw kodowe dla dowolnej kolumny, klikamy ją
dwukrotne w oknie dialogowym
Table Column
.
Po wygenerowaniu nazw kodowych dla elementów modelu należy edytować
nazwy dla kolumn w
tabelach WORDER, WODETAIL, EMPLOYEE
i WORKTYPE (podobnie jak w przypadku tabel modelu wynajmu). Za wyjątkiem
klucza pierwotnego tabel, należy usunąć nazwy tabeli na lewo od każdej kodowej
nazwy kolumny. Pierwotnie te przedrostki nazw pełniły funkcję pomocniczą dla
eksperta normalizacji w Silverrun-ERX, ale w tym momencie stają się zbędne.
Stąd np. należy zredukować
WODetail_Description
na
Description
, ale
nazwa
WODetail_Line_Number
powinna pozostać nie zmieniona. W ten
sposób obiekty otrzymują nazwy ułatwiające pracę nad aplikacjami, które będą je
używać. Takie podejście gwarantuje też, że nazwy kolumn najbardziej nadających
się do tworzenia obcych kluczy w innych tabelach (tj. klucze pierwotne) pozostają
unikalne w całej bazie danych.
Ustanawianie relacji
Z uwagi na fakt, iż model był importowany z Silverrun-ERX, większość relacji jest
już właściwa. Jednakże z racji tego, że encja nieruchomości nie była nigdy
definiowana w schemacie E-R dla procesu konserwacji, żadna relacja między
tabelami WORDER i PROPERTY nie została jeszcze ustanowiona. Firma
Allodium Properties mogłaby naturalnie zamieścić informacje na temat
nieruchomości (majątku) na zleceniach pracy, przyporządkowanych do
konserwatorów. Mimo, że informację tę można uzyskać za pośrednictwem tabeli
CALL, nie wszystkie zlecenia pracy zostaną przyporządkowane zgłoszeniom.
W oparciu o historię nieruchomości kierownik konserwacji firmy może
zdecydować, czy w danym obiekcie powinien być wymieniony dach. Zlecenie
byłoby wtedy wydawane bez powiadamiania najemcy.
268
Część II
Rozwiązaniem tego problemu będzie relacyjne powiązanie dwóch tabel. Aby to
uczynić klikamy narzędzie
Connector
w palecie narzędzi RDM, następnie kolejno
tabele PROPERTY i WORDER. Wyświetlony zostanie wówczas ich tymczasowy
związek. Założenie przyjęte przez RDM, odnoszące się do liczności relacji, jest
poprawne i być może nie zajdzie potrzeba przeprowadzania modyfikacji. Jest to
w dużej mierze spowodowane kolejnością, w której obsługiwane były tabele.
RDM przyjmuje, że pierwsza wskazana tabela jest pierwotna (parent), a druga jest
tabelą pochodną (child). Na rysunku 8.1 pokazano nowe związki, które możemy
zobaczyć na ekranie.
Generowanie kluczy obcych
Po wyznaczeniu wszystkich relacji między tabelami w modelu, można przystąpić
do generowania kluczy obcych. Zamiast automatycznego propagowania kluczy
obcych przy wzajemnym łączeniu tabel, narzędzie RDM stwarza nam możliwość
pracy wsadowej - w celu generowania kluczy obcych dla wszystkich tabel modeli
w jednym przebiegu. Generowanie kluczy obcych powoduje powielanie kolumn
kluczy z tabel pierwotnych (parent) do ich tabel pochodnych (child). W projekcie
fizycznym klucz obcy jest zazwyczaj implementowany jako kolumna (lub
kolumny) w tabeli pochodnej, która odnosi się do kluczy pierwotnych tabeli
pierwotnej.
Aby wygenerować klucze obce, należy postępować zgodnie z następującą
procedurą:
1. Wybrać opcję menu
Schema\Foreign Keys
.
Rysunek 8.11.
Używając
narzędzia
Connector RDM
można łatwo
połączyć tabele.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
269
2. Kliknąć przycisk
Generate
w wyświetlonym oknie dialogowym.
3. Aby zaakceptować proponowaną nazwę pliku dla raportu, kliknąć przycisk
Save
.
Do obiektów tabeli zostanie dodana pewna ilość nowych kolumn. W zależności od
wybranego stylu notacji, każdy klucz obcy zostanie prawdopodobnie poprzedzony
przedrostkiem FK. Na rysunku 8.12 pokazano przykładowy wygląd modelu.
W tym momencie model jest już prawie ukończony. Można w zasadzie przystąpić
do generowania skryptu SQL, niezbędnego do tworzenia obiektów definiowanych
przez model.
Weryfikowanie integralności modelu
Przed generowaniem skryptu SQL, koniecznego do stworzenia obiektów bazy
danych, należy zweryfikować integralność modelu. Dla tego celu Silverrun-RDM
oferuje wygodne narzędzia. Tok postępowania będzie tutaj następujący:
1. Wybieramy opcję menu
Schema\Verify
.
2. Z okna dialogowego wybieramy
Maximum Level of Verification
,
a następnie przycisk
Verify
.
3. Po zapytaniu o nazwę pliku raportu, akceptujemy proponowaną nazwę.
Klikamy przycisk
Verify
.
Rysunek 8.12.
Model po dodaniu
kluczy obcych.
270
Część II
4. Zostanie teraz wyświetlony komunikat, sygnalizujący brak błędów w modelu
(mogą również pojawić się ostrzeżenia - nie powinny one jednak sygnalizować
żadnych istotnych błędów).
5. Jeśli chcemy zobaczyć generowany przez RDM raport integralności modelu,
wybieramy opcję menu
Util.\View
a
Text File
i wpisujemy nazwę raportu
integralności (
Verify
, domyślnie). Aby obejrzeć wygenerowany raport, klikamy
Open.
Generowanie DDL
Po zakończeniu budowania modelu i zweryfikowaniu jego integralności można
przejść do generowania instrukcji SQL Data Definition Language (DDL) (język
definicji danych), niezbędnych do utworzenia bazy danych. Silverrun stworzy
pojedynczy skrypt SQL, który możemy uruchomić i stworzyć tym samym obiekty
bazy danych.
Dodatkowo - aby wygenerować instrukcje
CREATE TABLE
dla wszystkich tabel
w modelu narzędzie RDM umieszcza w skrypcie instrukcję
CONNECT
, która służy
do połączenia z bazą danych obejmującej nowe obiekty. RDM pobiera używaną
przez siebie nazwę bazy danych z
bieżącego schematu nazw kodowych.
W związku z tym, przed przystąpieniem do generowania DDL, zalecane jest
ustalenie nazw kodowych bazy danych. Wówczas instrukcja
CONNECT
,
generowana przez RDM, zawierać będzie poprawną nazwę bazy danych. Aby
ustalić nazwę kodową schematu, powinniśmy:
1. Klikn¹æ opcjê menu
Schema\Schema Desciption
. Spowoduje to wyświetlenie
okna dialogowego
Schema Description
.
2. W oknie wprowadzania danych
Coded Name
wpisać pełną ścieżkę nazwy bazy
danych InterBase, w której znajdują się nowe obiekty. Domyślnie ustawiono:
\DATA\RENTMAN\RENTMAN.GDB
.
3. Aby opuścić okno dialogowe, klikamy
OK
.
Ustawianie bazy danych zostało zakończone i można przystąpić do generowania
skryptu SQL. W tym celu należy:
1. Wybrać opcję menu
Schema\Generate DDL
.
2. Kliknąć przełącznik (radio button)
Coded Name
w pojawiającym się oknie
dialogowym.
3. Wybrać opcję
Generate
.
4. Po zapytaniu o nazwę pliku, wpisać
*.SQL
(i wcisnąć ENTER). W efekcie
wyświetlone zostaną wszystkie skrypty SQL i zmieni się domyślne rozszerzenie
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
271
pliku - z TXT na SQL. Następnie wpisać
RENTMAN.SQL
i kliknąć
Save
.
Rozpocznie się teraz generowanie skryptu.
Właśnie utworzyliśmy model i skrypt (choć ten nie jest jeszcze całkowicie
gotowy). Model należy zapisać i opuścić Silverrun-RDM. listing 8.1 przedstawia
skrypt RENTMAN.SQL.
Listning 8.1 Skrypt DDL, generowany przez Silverrun-RDM, dla
relacyjnego modelu danych RENTMAN
CONNECT „C:\DATA\RENTMAN\RENTMAN.GDB” USER „”PASSWORD””;
CREATE DOMAIN TAddition AS CHARACTER(20) NOT NULL CHECK
(VALUE IN (‘Deerfield’,’Firewheel’,’Legacy Hils’,
➥
‘Switzerland Estates’,’Sherwood’,’Rockknoll’));
CREATE DOMAIN TAddres AS CHARACTER(30) NOT NULL CHECK
CREATE DOMAIN TCity AS CHARACTER(30) NOT NULL CHECK
(VALUE IN (‘OklahomaCity’,’Norman’,’Edmond’,’Dallas’,‘Richardson’,
➥
’Plano’));
CREATE DOMAIN TComments AS VARCHAR(80);
CREATE DOMAIN TPhone AS CHARACTER(13) NOT NULL;
CREATE DOMAIN TpropertyNo AS INTEGER NOT NULL;
CREATE DOMAIN TRent No AS NUMERIC(5,2) NOT NULL;
CREATE DOMAIN TRooms No AS INTEGER NOT NULL CHECK
(VALUE IN (0, 1, 2, 3, 4, 5));
CREATE DOMAIN TschoolDistrict AS CHARACTER(20) NOT NULL CHECK
(VALUE IN ('Putnam City', 'Oklahoma City','Richardson',
➥
'Edmond','Garland','Dallas','Plano'));
CREATE DOMAIN TState AS CHARACTER(2) NOT NULL CHECK
(VALUE IN('OK', 'TX'));
CREATE DOMAIN TTenatNo AS INTEGER NOT NULL;
CREATE DOMAIN TYesNo AS CHARACTER(1) NOT NULL CHECK
(VALUE IN ('Y', 'N', 'T', 'F'));
CREATE DOMAIN TZip AS CHARACTER910) NOT NULL;
CREATE TABLE EMPLOYEE
(
Employe_Number
INTEGER NOT NULL
Name
CHARACTER(30) NOT NULL
272
Część II
PRIMARY KEY (Employee_Number)
);
CREATE TABLE PROPERTY
(
Property_Number
TPropertNo NOT NULL,
Address
TAddress NOT NULL,
City
TCity NOT NULL,
State
TState NOT NULL,
Zip
TZip NOT NULL,
Addition
TAddition NOT NULL,
SchoolDistrict
TSchoolDistrict NOT NULL,
Rent
TRent NOT NULL,
Deposit
TRent NOT NULL,
LivingAreas
TRooms NOT NULL,
BedRooms
TRooms NOT NULL,
BathRooms
TRooms NOT NULL,
GarageType
TRooms NOT NULL,
CentralAir
TYesNo NOT NULL'
CentralHeat
TYesNo NOT NULL'
GasHeat
TYesNo NOT NULL'
Refrigerator
TYesNo NOT NULL'
Range
TYesNo NOT NULL'
DishWasher
TYesNo NOT NULL'
PrivacyFence
TYesNo NOT NULL'
LastLawnDate
DATE,
LastSprayDate
DATE,
PRIMARY KEY (Property_Number)
);
CREATE TABLE TENANT
(
TENANT_Number
TTenantNo NOT NULL,
Name
CHARACTER (30) NOT NULL,
Employer
CHAR(30) NOT NULL,
EmployerAddress
TAddres NOT NULL,
EmployerCity
TCity NOT NULL,
EmployeeState
TState NOT NULL,
EmployerZip
TZip NOT NULL,
HomePhone
TPhone NOT NULL,
WorkPhone
TPhone NOT NULL,
ICEPhone
TPhone NOT NULL,
Comments
TComments,
PRIMARY KEY (Tenant_Number)
);
CREATE TABLE WORKTYPE
(
Wor_Type_Code
INTEGER NOT NULL,
Description
CHARACTER(30) NOT NULL,
TaskDuration
NUMERIC(5,2) NOT NULL,
PRIMARY KEY (Wor_Type_Code)
);
CREATE TABLE LEASE
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
273
(
Lease_Number
INTEGER NOT NULL,
BeginDate
DATE NOT NULL,
EndDate
DATE NOT NULL,
MovedInDate
DATE,
MovedOutDate
DATE,
Rent
TRent NOT NULL,
Deposit
TRent,
PetDeposit
TRent,
RentDueDay
SMALLIINT NOT NULL,
LawnService
TYesNo NOT NULL,
Comments
TComments,
Property_Number
TPropertyNo NOT NULL,
Tenant_Number
TTenantNo NOT NULL,
PRIMARY KEY (Lease_Number),
CONSTRAINT FK_TENANT1
FOREIGN KEY (Tenant_Number)
REFERENCES TENANT,
CONSTRAINT FK_PROPERTY2
FOREIGN KEY (Property_Number)
REFERENCES PROPERTY
);
CREATE TABLE WORDER
(
WOrder_Number
INTEGER NOT NULL,
StartDate
DATE NOT NULL,
EndDate
DATE,
Comments
TComments
Property_Number TPropertyNo NOT NULL,
Employee_Number INTEGER NOT NULL,
PRIMARY KEY (WOrder_Number),
CONSTRAINT FK_PROPERTY3
FOREIGN KEY (Property_Number)
REFERENCES PROPERTY
CONSTRINT FK_EMPLOYEE4
FOREIGN KEY (Employee_Number)
REFERENCES EMPLOYEE
);
CREATE TABLE CALL
(
Call_Number
INTEGER NOT NULL,
CallDate
DATE NOT NULL,
CallTime
CHARACTER(11) NOT NULL,
Description
CHARACTER(30) NOT NULL,
Property Number TPropertyNo,
WOrder_Number
INTEGER,
PRIMARY KEY (Call_Number)
CONSTRAINT FK_PROPERTY5
FOREIGN KEY (Property_Number)
REFERENCES PROPERTY,
CONSTRINT FK_WORDER6
FOREIGN KEY (WOrder_Number)
REFERENCES WORDER
274
Część II
);
CREATE TABLE WODTAIL
(
WODetail_Line_Number INTEGER NOT NULL,
Description
CHARACTER(30),
Work_Type_Code
INTEGER NOT NULL,
WOrder_Number
INTEGER NOT NULL,
PRIMARY KEY (WOrder_Number, WODetail_Line_Number),
CONSTRAINT FK_WORKTYPE7
FOREIGN KEY (Work_Type_Code)
REFERENCES WORKTYPE,
CONSTRAINT FK_WORDER8
FOREIGN KEY (WOrder_Number)
REFERENCES WORDER
);
Instrukcja
CONNECT
w skrypcie nie zawiera ważnej nazwy użytkownika i hasła.
Przy pomocy edytora kodu Delphi można edytować plik skryptu oraz do instrukcji
CONNECT
dodać obowiązującą nazwę użytkownika i hasło. W tym celu należy
uruchomić Delphi i otworzyć (w edytorze) skrypt RENTMAN.SQL. Instrukcję
CONNECT
należy zmienić zgodnie z poniższym wzorem:
CONNECT "C:\DATA\RENTMAN\RENTMAN.GDB" USER "SYSDBA" PASSWORD
➥
"masterkey";
Po dokonaniu tej zmiany zapisać plik skryptu i opuścić Delphi.
Tworzenie bazy danych
Skrypt SQL DDL jest już kompletny i można przystąpić do tworzenia bazy danych
RENTMAN. Aby stworzyć bazę danych InterBase do obsługi obiektów bazy
danych RENTMAN, należy postępować zgodnie z poniższą procedurą:
1. Uruchomić serwer InterBase (jeśli tego jeszcze nie uczyniliśmy). Będzie on
prawdopodobnie pracował na komputerze lokalnym, aczkolwiek wcale tak być
nie musi. Aby uruchomić lokalną kopię serwera, należy wywołać aplikację
InterBase 4.2 w folderze InterBase 4.2. W systemie Windows NT 4.0
i
Windows 95 dostęp do foldera InterBase 4.1 uzyskamy z
poziomu
Exploratora. W NT 3.51, aby uruchomić serwer, należy znaleźć grupę InterBase
4.2 i otworzyć ikonę InterBase 4.2.
2. Na serwerze stworzyć katalog, służący specjalnie do przechowywania
tworzonej bazy danych (na komputerze autora jest to:
C:\DATA\RENTMAN
).
3. Uruchomić narzędzie InterBase Windows ISQL i kliknąć jego opcję menu
File\Create Database
. Na ekranie wyświetlone zostanie okno dialogowe
Create
Database
.
Pierwsza rzeczywista aplikacja bazy danych klient/serwer
275
4. Po Database Name wpisać pełną ścieżkę dostępu do tworzonego pliku bazy
danych (domyślnie powinna to być: C:\DATA\RENTMAN\RENTMAN.GDB).
Wybrana nazwa powinna być zgodna z nazwą kodową (Name Coded), wpisaną
w oknie dialogowym
Schema Description
narzędzia RDM.
5. Do odpowiednich pól wprowadzania wpisać obowiązującą nazwę użytkownika
i hasło. Domyślnie proponowana nazwa użytkownika SYSDBA. Hasło
proponowane dla użytkownika SYSDBA InterBase przyjmuje nazwę
masterkey
. Jest niezwykle istotne, należy więc upewnić się, że jest wpisane
prawidłowo.
6. Aby stworzyć bazę danych, klikamy
OK
. Wkrótce ISQL powinien zakończyć
proces tworzenia bazy danych i automatycznie przyłączyć do niej użytkownika.
Teraz baza danych jest gotowa i możemy przystąpić do uruchomienia skryptu
SQL, stworzonego przez Silverrun-RDM. Aby to zrobić, należy:
1. Wybrać opcję menu
Script ISQL File\Run
i podać nazwę pliku skryptu
wygenerowanego przez RDM.
2. Aby wykonać skrypt, klikamy
Open
.
3. Na zapytanie o zapisanie komunikatów do pliku należy odpowiedzieć:
No
.
Spowoduje to wyprowadzenie komunikatów do ISQL, co w tym przypadku jest
istotnym uproszczeniem.
4. Teraz ISQL powinien wyświetlić komunikat informujący o
pomyślnym
wykonaniu skryptu. Możemy opuścić narzędzie ISQL.
Inne funkcje aplikacji RENTMAN
Pobieżny przegląd nowej bazy danych RENTMAN ujawnia, iż - dla implementacji
trzeciej i czwartej z głównych funkcji aplikacji RENTMAN - nie jest potrzebny
oddzielny proces i dodatkowe funkcje. Funkcje te (generowanie faktur dla najemcy
i historyczne informacje dotyczące majątku) można zrealizować na podstawie już
istniejącej bazy danych. Rola aplikacji RENTMAN sprowadza się do
wydrukowania odpowiednich raportów. Zakładając, że generowanie faktur stanowi
proste drukowanie pozostałych do zapłacenia rat najmu za każdy miesiąc dla
każdego najemcy, potrzebny jest jedynie dostęp do listy najemców, ich adresów,
terminy płatności rat oraz ich wysokość. Tabele TENANT, PROPERTY i LEASE
zawierają wszystkie elementy, niezbędne do uzyskania tych informacji.
Zapoznanie się z odpowiednią informacją archiwalną pozwala na określenie
okresów najmu i prac konserwacyjnych, które w tym czasie powinny być
wykonane. Powtórzmy to jeszcze raz - wszystkie niezbędne do właściwej pracy
aplikacji elementy są już dostępne. Jak będzie można zobaczyć w rozdziale 12,
RENTMAN - za pośrednictwem raportów - może wygenerować zestawienia
276
Część II
archiwalne dla każdej nieruchomości. Funkcje te nie wymagają definiowania
w aplikacji RENTMAN żadnych dodatkowych procesów lub obiektów danych.
Istnieją oczywiście procesy pochodne, wywodzące się z już omówionych . I tak
np. - w celu regularnej konserwacji majątku przedsiębiorstwo będzie musiało
sporządzić inwentarz narzędzi i
materiałów do prowadzenia robót. Dla
przeprowadzenia inwentaryzacji i jej rozliczenia można by stworzyć oddzielny
model. Podobnie - do stworzonego już procesu generowania faktur możemy
dołączyć system płatności. Pozwoliłoby to na rozszerzenie możliwości systemu
o wydruk wystawianych najemcy faktur, zaległych płatności i tak dalej. Większość
z nich pominięto, aby skupić się na głównych funkcjach systemu RENTMAN.