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