Tworzenie modelu logicznego i fizycznego danych.
W celu stworzenia modelu danych wykorzystamy program Data Architect wchodzący w skład przykładowego pakietu narzędzi CASE Power Designer, który pozwala utworzyć tzw.
logiczny ( konceptualny model danych) (CDM), fizyczny model danych (PDM) oraz wygenerować skrypt SQL tworzący bazę danych.
Tworzenie modelu logicznego.
Na wstępie określa się zbiory encji oraz ich atrybuty (wraz z określeniem typu danych, wymagalności, ograniczeń) i klucze główne. Pomiędzy tak zdefiniowanymi zbiorami encji kreśli się relacje o określonych własnościach. Wszystko to odbywa się w trybie graficznym.
Rysunek 1 przedstawia symbole wykorzystywane na schematach modeli CDM (prostokąty odpowiadają encjom, związki są prezentowane za pomocą linii łączących odpowiednie encje).
Rys.1. Symbole związków stosowane w modelu logicznym (CDM): jeden do jednego (wymagany z jednej strony), jeden do wielu (nie wymagany z żadnej strony),wiele do jednego (wymagany z jednej strony) ,wiele do wielu (nie wymagany).
Rysunek 2 przedstawia przykładowy model logiczny bazy danych do rejestracji danych osób, ich numerów telefonów oraz rachunków telefonicznych, z wyszczególnieniem atrybutów poszczególnych encji (wraz z typami danych), kluczy głównych oraz związków pomiędzy encjami.
Rys. .2 Schemat przykładowego modelu logicznego utworzony za pomocą programu Data Architect z pakietu Power Designer.
Tworzenie modelu fizycznego.
Model logiczny jest podstawą do wygenerowania tzw. fizycznego modelu danych (PDM) -
Rys.3. Model ten uwzględnia konkretny system baz danych. W tym przypadku – Interbase 6.x.
Rys. 3. Przykładowy fizyczny model danych (PDM).
Tworzenie skryptu SQL
Na podstawie modelu fizycznego można wygenerować, w postaci pliku tekstowego, skrypt SQL opisujący schemat bazy danych (poniżej).
/*==============================================================*/
/* DBMS name: InterBase 6.x */
/* Created on: 2006-05-23 09:19:45 */
/*==============================================================*/
/* Table: numer */
/*==============================================================*/
create table numer (
numer_tel CHAR(9) not null,
id_osoby INTEGER not null,
taryfa VARCHAR(15),
typ_lacza CHAR(6),
constraint PK_NUMER primary key (numer_tel)
);
/*==============================================================*/
/* Table: osoba */
/*==============================================================*/
create table osoba (
id_osoby INTEGER not null,
imie VARCHAR(15) not null,
nazwisko VARCHAR(30) not null,
adres VARCHAR(50),
constraint PK_OSOBA primary key (id_osoby)
);
/*==============================================================*/
/* Table: rachunek */
/*==============================================================*/
create table rachunek (
nr INTEGER not null,
numer_tel CHAR(9) not null,
data DATE not null,
kwota_netto DECIMAL(8,2),
stawka_vat DECIMAL(3,2),
kwota_brutto DECIMAL(8,2),
constraint PK_RACHUNEK primary key (nr)
);
alter table numer
add constraint FK_NUM_OSOBA foreign key (id_osoby)
references osoba (id_osoby);
alter table rachunek
add constraint FK_RACH_NUMER foreign key (numer_tel)
references numer (numer_tel);