09 Rozdziae 08id 7995 Nieznany

background image

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.

background image

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).

background image

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.

background image

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.

background image

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.

background image

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.

background image

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.

background image

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

background image

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

background image

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

.

background image

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.

background image

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.

background image

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.

background image

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)

background image

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)

background image

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.

background image

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.

background image

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.

background image

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.

background image

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

background image

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.

background image

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.

background image

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.

background image

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

background image

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.

background image

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.

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

.

background image

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

background image

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.


Wyszukiwarka

Podobne podstrony:
09 rozdzial 08 4sgpmlmyclqg6hyv Nieznany (2)
09 rozdzial 08 63dkeu7shlz4usq4 Nieznany
09 08 Rozdzielnice budowlane RB Nieznany (2)
09 rozdzial 09 DPF5CWQOY4VJC77Q Nieznany (2)
09 08 Rozdzielnice budowlane RB Nieznany (2)
05 rozdzial 04 nzig3du5fdy5tkt5 Nieznany (2)
28 rozdzial 27 vmxgkzibmm3xcof4 Nieznany (2)
IS wyklad 14 15 01 09 MDW id 22 Nieznany
ei 2005 09 s004 id 154186 Nieznany
09 Dobieranie materialow odziez Nieznany (2)
PIF2 2007 Wykl 09 Dzienne id 35 Nieznany
09 rany i krwawieniaid 7993 Nieznany (2)
22 Rozdzial 21 KP4Q5YBIEV5DBSVC Nieznany (2)
09 pfsc sas gido3vwa6mgy2a3eiib Nieznany (2)
17 rozdzial 16 fq3zy7m2bu2oan6t Nieznany (2)
Kanicki Systemy Rozdzial 10 id Nieznany
29 rozdzial 28 ciw47mwstcqakqpq Nieznany
09 Rozroznianie stylow muzyczny Nieznany (2)

więcej podobnych podstron