Zadania ZPI_IZ_2014
Zadanie – Metoda punktów danych
Przyjęto przy tym następującą specyfikację wymagań dla aplikacji bazodanowej:
Podczas rozmów przeprowadzonych z przyszłymi użytkownikami systemu LOT zebrano następujące informacje o wymaganiach stawianych projektowanej bazie danych.
1.Dział koordynacji lotów ma za zadanie każdemu z rejsów linii AirLine przydzielić samoloty tej firmy.
2.Rejsy są identyfikowane numerem rejsu.
3. Każdemu z rejsów przydzielone zostały dni tygodnia, w którym się one odbywają.
4.Odbycie się rejsu pewnego dnia o określonej dacie dział koordynacji lotów nazywa Lotem.
5.Dział koordynacji lotów przydziela do poszczególnych lotów Samoloty, będące na wyposażeniu linii.
6.Każdy z samolotów firmy posiada jednoznaczny numer identyfikacyjny samolotu. AirLine oferuje rejsy na liniach krajowych i międzynarodowych. Samoloty AirLine mają różne parametry techniczne. Określa je typ samolotu . 7.Na dane o typie samolotu składają się np. informacje o producencie i jednoznaczna nazwa typu.
8.Dokładne dane techniczne typu nie muszą być przechowywane w projektowanej bazie danych.
9.Dla przydziału odpowiedniego typ samolotu dla danego rejsu konieczne jest przechowywanie danych o portach lotniczych odlotu i przylotu.
10.Zgodnie z międzynarodowymi porozumieniami AirLine używa do identyfikacji portów lotniczych jednoznacznych międzynarodowych skrótów. Pracownicy działu koordynacji lotów chcą, mimo jednoznaczności skrótów, aby port lotniczy określony był również nazwą miasta i państwa oraz nazwą własną portu. Ponadto w celu przygotowania samolotu do startu ważna jest informacji o godzinach odlotu (godzina odlotu, godzina przylotu).
11.Kierownictwo AirLine chcąc kontrolować punktualność swych lotów wyraziło życzenie, aby każdy kurs obok planowanego czasu odlotu i przylotu posiadał informacje o rzeczywistych godzinach odlotu i przylotu.
12. Personel techniczny linii lotniczych obok prac remontowych wyposaża samoloty w fotele o standardzie odpowiednim dla klasy miejsca. W tym celu potrzebuje od producenta informacji o maksymalnej dopuszczalnej ilości miejsc.
13. Po dokonaniu instalacji foteli w samolocie istotna dla celów rezerwacji jest rzeczywista ilość miejsc w samolocie. Każde miejsce jest określone przez jednoznaczny numer miejsca. Dla każdej kombinacji rejsu i klasy linie potrzebują informacji o ustalonej cenie.
Streszczając można stwierdzić, iż projektant systemu musi odwzorować w bazie danych następujące obiekty rzeczywiste:
Porty lotnicze,
Typy samolotów,
Samoloty,
Rejsy,
Dni tygodnia,
Loty,
Miejsca i
Ceny
Między powyższymi ośmioma obiektami istnieją, poza ewentualnymi warunkami istnienia, określone związki:
rejs ma określoną cenę,
rejs odbywa się w określonym dniu lub dniach tygodnia,
rejs charakteryzuje port lotniczy odlotu i port przylotu,
samolot jest określonego typu,
każdy rejs posiada loty,
samolot może być przydzielony do lotu,
miejsca na loty mogą być rezerwowane.
W powyższej dokumentacji zestawiliśmy wymagania stawiane bazie danych. Są one podstawą do przeprowadzenia fazy koncepcyjnej projektu
Na poniższym rysunku przedstawiono przykładowy diagram erd w notacji ERD(SERM) dla linii lotniczych. Najbardziej na lewo przedstawiono tabele SQL-owe stojące najwyżej w hierarchii, np. dzień tygodnia, port lotniczy, typ samolotu. Są to dane słownikowe, a klucze główne z tych tabel będą dziedziczone w tabelach podrzędnych.
Przykładowy model danych w notacji SERM
Tabele pochodne jak rejs, samolot, może lądować na, zawierają zarówno klucze obce ( z tabel nadrzędnych), jak i klucze główne (primary) zapewniające dostęp do danych zapisanych w tych tabelach. Klucze obce zapewniają kontrolę spójności bazy danych, a klucze główne zapewniają unikalność danych zapisanych w tych tabelach. Jeżeli nie ma w modelu danych możliwości bezpośredniego powiązania typu nadrzędny-podrzędny wtedy można za pomocą dodatkowej tabeli pośredniej typu R powiązać dwie równorzędne tabele, np. Port lotniczy i typ samolotu zostały powiązane za pomocą tabeli pośredniej Może lądować na
Skrypt bazy danych:
remark
\
Script generated by SQLSys v0.xx
/
connect carloty;
remark
\
Users
/
grant connect to lib identified by sysadm;
grant resource to lib;
grant dba to lib;
grant connect to zb identified by zb;
grant dba to zb;
remark
\
---------------------------
Table ZB.DZIETYG
Level 1, Columns 1, Indexes 0
---------------------------
/
create table zb.dzietyg (
dzientyg char( 12 ) not null );
create unique index zb.pk_dzietyg
on zb.dzietyg (
dzientyg asc );
create public synonym dzietyg for zb.dzietyg;
remark
\
---------------------------
Table ZB.PORT_LOTNICZY
Level 1, Columns 4, Indexes 0
---------------------------
/
create table zb.port_lotniczy (
sym_lotn char( 6 ) not null,
nazw_lotn char( 40 ) not null,
miasto_lotn char( 24 ),
kraj_lotn char( 24 ) );
create unique index zb.pk_port_lotniczy
on zb.port_lotniczy (
sym_lotn asc );
create public synonym port_lotniczy for zb.port_lotniczy;
remark
\
---------------------------
Table ZB.TYP_SAMOL
Level 1, Columns 3, Indexes 0
---------------------------
/
create table zb.typ_samol (
naz_typu char( 8 ) not null,
max_il_miejsc integer not null,
producent char( 30 ) );
create unique index zb.pk_typ_samol
on zb.typ_samol (
naz_typu asc );
create public synonym typ_samol for zb.typ_samol;
remark
\
---------------------------
Table ZB.MOZE_LADOW
Level 2, Columns 2, Indexes 0
---------------------------
/
create table zb.moze_ladow (
naz_typu char( 8 ) not null,
sym_lotn char( 6 ) not null );
create unique index zb.pk_moze_ladow
on zb.moze_ladow (
naz_typu asc,
sym_lotn asc );
create index zb.fk_moze_ladow
on zb.moze_ladow (
naz_typu asc );
create index zb.fk_moze_ladow1
on zb.moze_ladow (
sym_lotn asc );
create public synonym moze_ladow for zb.moze_ladow;
remark
\
---------------------------
Table ZB.REJS
Level 2, Columns 4, Indexes 0
---------------------------
/
create table zb.rejs (
nr_rejsu char( 5 ) not null,
sym_lotn char( 6 ) not null,
godz_odlot datetime,
godz_przylot datetime );
create unique index zb.pk_rejs
on zb.rejs (
nr_rejsu asc,
sym_lotn asc );
create index zb.fk_rejs
on zb.rejs (
sym_lotn asc );
create public synonym rejs for zb.rejs;
remark
\
---------------------------
Table ZB.SAMOLOT
Level 2, Columns 3, Indexes 0
---------------------------
/
create table zb.samolot (
nr_samolotu char( 5 ) not null,
liczba_miejsc integer not null,
naz_typu char( 8 ) );
create unique index zb.pk_samolot
on zb.samolot (
nr_samolotu asc );
create index zb.fk_samolot
on zb.samolot (
naz_typu asc );
create public synonym samolot for zb.samolot;
remark
\
---------------------------
Table ZB.CENA
Level 3, Columns 4, Indexes 0
---------------------------
/
create table zb.cena (
kategoria char( 2 ) not null,
nr_rejsu char( 5 ) not null,
sym_lotn char( 6 ) not null,
warosc_ceny decimal( 12, 2 ) );
create unique index zb.pk_cena
on zb.cena (
kategoria asc,
nr_rejsu asc,
sym_lotn asc );
create index zb.fk_cena
on zb.cena (
nr_rejsu asc,
sym_lotn asc );
create public synonym cena for zb.cena;
remark
\
---------------------------
Table ZB.LOT
Level 3, Columns 6, Indexes 0
---------------------------
/
create table zb.lot (
data_lotu date not null,
rzeczyw_godz_odl time,
rzeczyw_godz_przy time,
nr_rejsu char( 5 ) not null,
sym_lotn char( 6 ) not null,
nr_samolotu char( 5 ) );
create unique index zb.pk_lot
on zb.lot (
data_lotu asc,
nr_rejsu asc,
sym_lotn asc );
create index zb.fk_lot
on zb.lot (
nr_rejsu asc,
sym_lotn asc );
create index zb.fk_lot1
on zb.lot (
nr_samolotu asc );
create public synonym lot for zb.lot;
remark
\
---------------------------
Table ZB.W
Level 3, Columns 3, Indexes 0
---------------------------
/
create table zb.w (
nr_rejsu char( 5 ) not null,
sym_lotn char( 6 ) not null,
dzientyg char( 12 ) not null );
create unique index zb.pk_w
on zb.w (
nr_rejsu asc,
sym_lotn asc,
dzientyg asc );
create index zb.fk_w
on zb.w (
dzientyg asc );
create index zb.fk_w1
on zb.w (
nr_rejsu asc,
sym_lotn asc );
create public synonym w for zb.w;
remark
\
---------------------------
Table ZB.MIEJSCE
Level 4, Columns 4, Indexes 0
---------------------------
/
create table zb.miejsce (
nr_miejsca integer not null,
data_lotu date not null,
nr_rejsu char( 5 ) not null,
sym_lotn char( 6 ) not null );
create unique index zb.pk_miejsce
on zb.miejsce (
nr_miejsca asc,
data_lotu asc,
nr_rejsu asc,
sym_lotn asc );
create index zb.fk_miejsce
on zb.miejsce (
data_lotu asc,
nr_rejsu asc,
sym_lotn asc );
create public synonym miejsce for zb.miejsce;
alter table zb.dzietyg primary key (
dzientyg );
alter table zb.port_lotniczy primary key (
sym_lotn );
alter table zb.typ_samol primary key (
naz_typu );
alter table zb.moze_ladow primary key (
naz_typu,
sym_lotn );
alter table zb.moze_ladow foreign key sam_lad (
naz_typu) references zb.typ_samol on delete restrict;
alter table zb.moze_ladow foreign key lotn_lad (
sym_lotn) references zb.port_lotniczy on delete restrict;
alter table zb.rejs primary key (
nr_rejsu,
sym_lotn );
alter table zb.rejs foreign key odlot (
sym_lotn) references zb.port_lotniczy on delete restrict;
alter table zb.rejs foreign key przylot (
sym_lotn) references zb.port_lotniczy on delete restrict;
alter table zb.samolot primary key (
nr_samolotu );
alter table zb.samolot foreign key tysa_samo (
naz_typu) references zb.typ_samol on delete restrict;
alter table zb.cena primary key (
kategoria,
nr_rejsu,
sym_lotn );
alter table zb.cena foreign key re_cen (
nr_rejsu,
sym_lotn) references zb.rejs on delete restrict;
alter table zb.lot primary key (
data_lotu,
nr_rejsu,
sym_lotn );
alter table zb.lot foreign key re_lo (
nr_rejsu,
sym_lotn) references zb.rejs on delete restrict;
alter table zb.lot foreign key sam_lot (
nr_samolotu) references zb.samolot on delete restrict;
alter table zb.w primary key (
nr_rejsu,
sym_lotn,
dzientyg );
alter table zb.w foreign key dzt_kie (
dzientyg) references zb.dzietyg on delete restrict;
alter table zb.w foreign key re_w (
nr_rejsu,
sym_lotn) references zb.rejs on delete restrict;
alter table zb.miejsce primary key (
nr_miejsca,
data_lotu,
nr_rejsu,
sym_lotn );
alter table zb.miejsce foreign key lo_mie (
data_lotu,
nr_rejsu,
sym_lotn) references zb.lot on delete restrict;
commit;
disconnect carloty;
exit;
Na podstawie ww specyfikacji wymagań oraz załączonego skryptu bazy danych policzyć nakłady na projekt metodą punktów danych.
Termin wykonania : 18 maja 2014
plik PDF z podaniem grupy i roku studiów przysłać na adres: zenonb@finus.com.pl