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