Projekt Bazy Danych

Transkrypt

Projekt Bazy Danych
Projekt Bazy Danych
Artur Janas, Łukasz Gawroński
9 czerwca 2010
Streszczenie
Tematem projektu jest System Obsługi Biblioteki
1
Wymagania funkcjonalne
1. Możliwość wprowadzania opisów książek,
2. Możliwość naliczania kar czytelnikom,
3. Możliwość zamawianie książek przez czytelników,
4. Możliwość informowania czytelników o możliwości odbioru książki,
5. Możliwość wypożyczania książek czytelnikom,
6. Możliwość odnotowywania zwrotu książek przez czytelników,
7. Możliwość blokowania kont użytkownikom,
8. Możliwość blokowania dostępności książek,
9. Możliwość przeglądu historii operacji.
2
Wymagania niefunkcjonalne
1. System klienta napisany w języku Java,
2. System serwera oparty na bazie danych Oracle 10g,
1
3
Model fizyczny encji
2
4
Model konceptualny ecji
5
Opis encji
1. Autor
Encja opisująca autora książki:
id_autora NUMBER(38,0) PRIMARY KEY
id_kraju NUMBER(38,0), FOREIGN KEY, not null
imie VARCHAR2(50), not null
nazwisko VARCHAR2(50), not null
Więzy integralności:
UNIQUE(„naziwsko","imie")
2. Kara
Encja opisująca karę. Status opisuje czy kara jest zapłacona (true)
czy nie zapłacona (false):
id_kary NUMBER(38,0) PRIMARY KEY
id_operacji NUMBER(38,0) FOREIGN KEY
id_typu NUMBER(38,0) FOREIGN KEY
id_ksiazki NUMBER(38,0) FOREIGN KEY
id_osoby NUMBER(38,0) FOREIGN KEY
data DATE, DEFAULT SYSDATE, not null
kwota FLOAT, not null
status NUMBER(1,0), DEFAULT 0, not null
3
Więzy integralności:
FOREIGN KEY (id_operacji, id_typu, id_ksiazki, id_osoby) jako referencja do
encji operacja_biblioteczna
FOREIGN KEY (id_osoby) jako referencja do encji osoba
Kary naliczane przez procedurę wywoływaną raz dziennie o tej samej godzinie
przez bazę danych w godzinach o najmniejszym obciążeniu serwera
3. Kraj
Encja przechowująca informację o kraju pochodzenia autora książki:
id_kraju PRIMARY KEY, NUMBER(38,0)
nazwa VARCHAR2(100), not null
4. Ksiazka rwyp
Encja opisująca czas na jaki może być wypożyczona książka oraz typ wypożyczenia
id_rodzaj NUMBER(38,0) PRIMARY KEY
czas_wyp DATE, not null
nazwa VARCHAR2(100), not null, unique
Czas wypożyczenia określony jest jako data w postaci
data(00/01/01) + faktyczny czas wypożyczenia.
5. Miasto
Encja przechowująca informację o mieście w którym siedzibę ma wydawnictwo:
id_miasta NUMBER(38,0) PRIMARY KEY
nazwa VARCHAR2(100), not null, unique
6. Operacja biblioteczna
Encja przechowująca informację o dacie przeprowadzonej operacji bibliotecznej:
id_operacji NUMBER(38,0)
id_typu FOREIGN KEY, NUMBER(38,0)
id_ksiazki FOREIGN KEY, NUMBER(38,0)
id_osoby FOREIGN KEY, NUMBER(38,0)
data DATE, DEFAULT SYSDATE, not null
status NUMBER(1,0), DEFAULT 0, not null
PRIMARY KEY(id_operacji,id_typu,id_ksiazki,id_osoby)
Operacje ze statusem 0 są aktywne, status 1 jest dla operacji w archiwum
Spójność dat poszczególnych operacji kontroluje trigger operacjadata
7. Oprawa
Encja przechowująca informację o typie oprawy książki:
id_oprawy PRIMARY KEY, NUMBER(38,0)
nazwa VARCHAR2(50), not null
8. Osoba
4
Encja przechowująca informację o czytelniku. Status klienta informuje o tym czy
klient jest czytelnikiem aktywnym, nieaktywnym lub czy jest pracownikiem biblioteki:
id_osoby PRIMARY KEY, NUMBER(38,0), not null
imie VARCHAR2(20), not null
nazwisko VARCHAR2(20), not null
status NUMBER(38,0), DEFAULT 0, not null
adres VARCHAR2(255), not null
data_ur DATE, not null
login VARCHAR2(32), not null, unique
haslo VARCHAR2(32), DEFAULT MD5(qwerty), not null
Więzy integralności:
UNIQUE(imie, nazwisko, data_ur)
9. Typ operacji
Encja słownikowa przechowująca informację o typie przeprowadzonej
operacji (np. wypożyczenie, zwrot):
nazwa CHAR(255), not null
id_typu PRIMARY KEY, NUMBER(38,0)
10. Wydanie
Encja przechowująca informację o wydaniu (rok wydania, liczba stron):
id_wydania PRIMARY KEY NUMBER(38,0)
id_wydawnictwa FOREIGN KEY, NUMBER(38,0), not null
id_autora FOREIGN KEY, NUMBER(38,0), not null
id_oprawy FOREIGN KEY, NUMBER(38,0), not null
rok NUMBER(4,0), not null
ilosc_stron NUMBER(38,0), not null
tytul VARCHAR2(255), not null
opis VARCHAR2(1024), DEFAULT 0, not null
Więzy integralności:
ilosc_stron > 0
11. Wydawnictwo
Encja przechowująca informację o wydawnictwie:
id_wydawnictwa PRIMARY KEY NUMBER(38,0)
id_miasta FOREIGN KEY NUMBER(38,0)
nazwa VARCHAR2(100), not null
adres VARCHAR2(255), not null
telefon NUMBER(12,0), not null
6
Hierarchia menu i podział na moduły
1. Moduł wypożyczającego
(a) logowanie
(b) zakończ
5
(c) szukaj
(d) przeglądaj
(e) zamów
2. Moduł pracownika biblioteki
(a) logowanie
(b) zakończ
(c) szukaj
(d) wprowadź
(e) dodaj czytelnika
(f) zmień dane czytelnika
(g) usuń czytelnika
(h) zarządzaj karami
3. Moduł przeglądania danych, kar oraz operacji
(a) wspólny dla powyższych modułów, dostępny z różnymi odpowiednimi
uprawnieniami (czytelnik ma dostęp tylko do danych dotyczących
siebie samego)
7
Podział realizacji funkcjonalności pomiędzy stronę serwera i klienta
Serwer dba o spójność wprowadzanych danych oraz zachowanie praw dostępu
tak aby w przypadku błędu klienta nie zaszkodzić danym, poza tym obsługuje
transakcje. Rola klienta poza wstępnym sprawdzaniem warunków ogranicza się
do wyświetlania informacji zwrotnych z bazy danych oraz ostrzeżeń użytkownika
o konsekwencji działań.
8
Sposób realizacji wymuszania integralności danych
Integralność tabel realizowana poprzez zależności (dependent) w bazie danych
– nie można usunąć rekordów jeśli inne zależne od nich nadal są w bazie. Klient
będzie informował użytkownika o braku możliwości wykonania operacji i sposobie rozwiązania problemu.
9
Propozycje indeksów w bazie danych
Indeksy zostaną założone na rekordy najczęściej przeszukiwane, np. nazwisko
autora, nazwisko i imię autora, tytuł książki, wydawnictwo, nazwisko czytelnika.
Indeksy domenowe:
1. Imię,
6
2. Nazwisko,
3. Login i hasło w encji osoba,
4. Imię i nazwisko w encji autor,
5. Tytuł i opis w encji wydanie,
6. Nazwa w encji wydawnictwo
10
Opis transakcji
Dla modułu wypożyczeń transakcja będzie polegała na zablokowaniu dostępu
do książek, sprawdzeniu czy stan wypożyczeń nie zmienił się, dokonania rezerwacji a następnie odblokowaniu tabel. Transakcja jest realizowana przez funkcję
„Rezerwuj”.
11
Triggery
1. Triggery inkrementacji (podobne dla wszystkich encji, poza encją operacja
biblioteczna ze złożonym kluczem głównym),
2. Trigger operacjadata chroniący przed błędami zapisu operacji bibliotecznych.
12
Dołączone pliki
1. Pliki źródłowe modułu zamawiania książek
2. Plik skompilowany modułu zamawiania książek
3. Skrypt DDL tworzący bazę danych
4. Skrypt DML wprowadzający znaczną ilość danych testowych
13
Informacje dodatkowe
Niektóre funkcje należy ponownie przekompilować ze względu na niedeterministyczne zachowania bazy danych ORACLE na serwerze wydziałowym. Niektóre
dane w pliku z DML naruszają więzy integralności, nie należy się jednak przejmować błędami, gdyż dzieje się tak z powodu tego, że zostały wygenerowane
losowo. Wyszukiwanie implementowane jest metodą uproszczoną ze względu na
brak bibliotek i uprawnień na serwerze wydziałowym, przez co nie można stworzyć indeksowania domenowego dla więcej niż jednej kolumny naraz. Częściowa
implementacja przykładowa optymalnego rozwiązania zawarta jest w pliku z
DDL. Dane autoryzacyjne do bazy danych są umieszczone w kodzie programu.
Skompilowany plik łączy się z bazą danych na wydziale korzystając z danych
użytkownika ajanas/ajanas
7