Bazy danych. Projekt prostej biblioteki. 26 stycznia Hubert Anisimowicz,

Podobne dokumenty
Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Hurtownia Świętego Mikołaja projekt bazy danych

BAZA DANYCH SIECI HOTELI

Monika Sychla Daniel Smolarek Projekt bazy danych

Przykładowa baza danych BIBLIOTEKA

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Baza danych hotel Maciej Gerus

Wykład 05 Bazy danych

Język SQL, zajęcia nr 1

Autor: Joanna Karwowska

Bartosz Jachnik - Kino

Aspekty aktywne baz danych

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Projekt-bazy danych Poczta

Paweł Rajba

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Bazy danych - Materiały do laboratoriów VIII

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

SQL :: Data Definition Language

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Wykład 8. SQL praca z tabelami 5

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych 6. Klucze obce. P. F. Góra

Widok Connections po utworzeniu połączenia. Obszar roboczy

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

LAB 3 (część 1 Projektu)

Bazy Danych i Usługi Sieciowe

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Projekt bazy danych. Schemat bazy danych. Opis bazy danych

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Wykład 5. SQL praca z tabelami 2

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

PODSTAWY BAZ DANYCH 13. PL/SQL

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Oracle PL/SQL. Paweł Rajba.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

P o d s t a w y j ę z y k a S Q L

Bazy danych i usługi sieciowe

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Zaawansowane bazy danych i hurtownie danych semestr I

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Język SQL, zajęcia nr 2

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Bazy danych. Dr inż. Paweł Kasprowski

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych 10. SQL Widoki

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

1 Projekt fizyczny 1. 3 Perspektywy słownika danych Źródła 12

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Język zapytań SQL- język relacyjnych baz danych

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

1. Dodatkowe informacje. 2. Czynnoci wstpne. 3. Zadania

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Administracja i programowanie pod Microsoft SQL Server 2000

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

TABUN_CMS. System zarządzania treścią dla dedykowanej grupy użytkowników. Tabun_CMS 2008 Marcin Biegun, Szymon Bąk

Muzyczna Baza Danych

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Bazy danych, 4. wiczenia

Wyzwalacze (triggery) Przykład

SQL 4 Structured Query Lenguage

Projektowanie systemów baz danych

Cele. Definiowanie wyzwalaczy

SIECI KOMPUTEROWE I BAZY DANYCH

Politechnika Gdańska, międzywydziałowy kierunek INŻYNIERIA BIOMEDYCZNA. Instrukcja do laboratorium z przedmiotu: Bazy danych. Laboratorium nr 2.

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Struktura bazy danych

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

1. Wyzwalacze BD (ang. triggers)

Bazy danych Ćwiczenia projektowe

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Bazy danych 7. SQL podstawy

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Systemowe aspekty baz

CREATE TABLE logika (p BOOLEAN); INSERT INTO logika VALUES(true); INSERT INTO logika VALUES(false); INSERT INTO logika VALUES(NULL);

Bazy danych programowanie Wykład dla studentów matematyk

SQL język zapytań (query language) cz.1

Transkrypt:

Bazy danych Projekt prostej biblioteki 26 stycznia 2015 Hubert Anisimowicz, 275859

Spis treści Rozdział 1 Schemat bazy danych... 2 Rozdział 2 Opis bazy danych... 2 Rozdział 3 Skrypt generujący bazę danych... 3 1. Relacje... 3 2. Klucze główne... 4 3. Klucze obce... 4 4. Klucze unikalne i domyślne wartości atrybutów... 5 5. Więzy check... 5 6. Funkcje... 5 7. Widoki... 6 8. Wyzwalacze... 6 9. Przykładowe dane... 7 10. Przykładowe wypożyczenia... 8 Rozdział 4 Elementy interfejsu graficznego... 9 1

Rozdział 1 Schemat bazy danych Rozdział 2 Opis bazy danych Niniejsza baza danych jest przykładowym projektem stworzonym na potrzeby prostej biblioteki. Przyjęto jako narzucone z góry dwa warunki: biblioteka wymusza na czytelniku podanie przynajmniej jednego numeru telefonu i przynajmniej jednego adresu e-mail, w danym momencie można mieć wypożyczone co najwyżej 3 książki. Baza składa się z 8 tabel: trzy z nich przechowują dane czytelników, jedna śledzi bieżące ilości wypożyczonych książek przez każdego z czytelników, kolejne trzy przechowują dane o książkach dostępnych w bibliotece oraz ostatnia tabela łącząca informacje o konkretnych wypożyczeniach. 2

Rozdział 3 Skrypt generujący bazę danych W tej części raportu zostaną przedstawione polecenia generujące bazę danych prostej biblioteki. Dla przejrzystości w niniejszym raporcie pominięto polecenia DROP [obiekt]. CREATE DATABASE biblioteka; \c biblioteka 1. Relacje Większość atrybutów przyjęto jako NOT NULL, oprócz tych, których nie uznano za niezbędne dla poprawnego funkcjonowania bazy danych. Dla automatycznego numerowania krotek (a tym samym dla łatwego utworzenia kluczy głównych) oraz tam, gdzie miało to sensowne zastosowanie posłużono się typem SERIAL. CREATE TABLE czytelnicy( id_czyt SERIAL NOT NULL, nazwisko VARCHAR(100) NOT NULL, imie VARCHAR(50) NOT NULL, adres VARCHAR(100) NOT NULL, pesel VARCHAR(11) NOT NULL, uwagi VARCHAR(200) ); CREATE TABLE telefony( id_czyt INTEGER NOT NULL, nr_tel VARCHAR(14) NOT NULL ); CREATE TABLE maile( id_czyt INTEGER NOT NULL, mail VARCHAR(100) NOT NULL ); CREATE TABLE dzialy( dzial INTEGER NOT NULL, opis VARCHAR(100) NOT NULL ); CREATE TABLE ksiazki( ksiazka SERIAL NOT NULL, autor VARCHAR(100), tytul VARCHAR(100) NOT NULL, wydawnictwo VARCHAR(100), dzial INTEGER NOT NULL, isbn VARCHAR(13), uwagi VARCHAR(200) ); CREATE TABLE egzemplarze( sygnatura SERIAL NOT NULL, ksiazka INTEGER NOT NULL, uwagi VARCHAR(200) ); CREATE TABLE liczba_wyp( id_czyt INTEGER NOT NULL, liczba INTEGER NOT NULL); 3

CREATE TABLE wypozyczenia( id_wyp SERIAL NOT NULL, id_czyt INTEGER NOT NULL, sygnatura INTEGER NOT NULL, data_wyp DATE NOT NULL, uwagi VARCHAR(200) ); 2. Klucze główne Dla każdej z tabel ustanowiono klucz główny. ALTER TABLE czytelnicy ADD PRIMARY KEY (id_czyt); ALTER TABLE telefony ADD PRIMARY KEY (nr_tel); ALTER TABLE maile ADD PRIMARY KEY (mail); ALTER TABLE dzialy ADD PRIMARY KEY (dzial); ALTER TABLE ksiazki ADD PRIMARY KEY (ksiazka); ALTER TABLE egzemplarze ADD PRIMARY KEY (sygnatura); ALTER TABLE liczba_wyp ADD PRIMARY KEY (id_czyt); ALTER TABLE wypozyczenia ADD PRIMARY KEY (id_wyp); 3. Klucze obce Odpowiednio zdefiniowane klucze obce zapobiegają niepożądanym operacjom, np. usunięciu z zasobów książki, która jest aktualnie wypożyczona. ALTER TABLE telefony ADD FOREIGN KEY (id_czyt) REFERENCES czytelnicy(id_czyt) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE maile ADD FOREIGN KEY (id_czyt) REFERENCES czytelnicy(id_czyt) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE ksiazki ADD FOREIGN KEY (dzial) REFERENCES dzialy(dzial) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE egzemplarze ADD FOREIGN KEY (ksiazka) REFERENCES ksiazki(ksiazka) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE wypozyczenia ADD FOREIGN KEY (id_czyt) REFERENCES czytelnicy(id_czyt) ON UPDATE CASCADE ON DELETE RESTRICT; ALTER TABLE liczba_wyp ADD FOREIGN KEY (id_czyt) REFERENCES czytelnicy(id_czyt) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE wypozyczenia ADD FOREIGN KEY (sygnatura) REFERENCES egzemplarze(sygnatura) ON UPDATE CASCADE ON DELETE RESTRICT; 4

4. Klucze unikalne i domyślne wartości atrybutów Zadbano także aby wartości takie jak nr PESEL czytelnika czy numer ISBN książki były unikalne. Dodatkowo zostały ustalone domyślne wartości dwóch atrybutów. ALTER TABLE czytelnicy ADD UNIQUE (pesel); ALTER TABLE ksiazki ADD UNIQUE (isbn); ALTER TABLE wypozyczenia ADD UNIQUE (sygnatura); ALTER TABLE wypozyczenia ALTER COLUMN data_wyp SET DEFAULT current_date; ALTER TABLE liczba_wyp ALTER COLUMN liczba SET DEFAULT 0; 5. Więzy check Zostało odpowiednio wprowadzone więzy check dbające aby do bazy nie dostały się błędne dane, np. numer telefonu zawierający litery. ALTER TABLE czytelnicy ADD CHECK (pesel~'^[0-9]*$'); ALTER TABLE czytelnicy ADD CHECK (length(pesel) IN (11)); ALTER TABLE telefony ADD CHECK (nr_tel~'^[0-9]*$'); ALTER TABLE telefony ADD CHECK (length(nr_tel) IN (9,11,12,13,14)); ALTER TABLE ksiazki ADD CHECK (isbn~'^[0-9]*$'); ALTER TABLE ksiazki ADD CHECK (length(isbn) IN (10,13)); 6. Funkcje Zaprojektowano także dwie funkcje ułatwiające wypożyczanie I zwrot książek. CREATE OR REPLACE FUNCTION wypozycz(id INTEGER, s INTEGER) RETURNS TEXT AS $$ INSERT INTO wypozyczenia(id_czyt, sygnatura, data_wyp) VALUES (id, s, current_date); RETURN 'Czytelnikowi ' id ' wypozyczono ksiazke ' s '!'; CREATE OR REPLACE FUNCTION zwroc(id INTEGER, s INTEGER) RETURNS TEXT AS $$ DELETE FROM wypozyczenia WHERE id=id_czyt AND s=sygnatura; RETURN 'Ksiazka ' s ' zostala zwrocona!'; 5

7. Widoki Dla ułatwienia korzystania z bazy zaprojektowano dwa widoki wyświetlające dane wszystkich czytelników oraz wszystkie dostępne książki. CREATE VIEW wszyscy_czyt AS ( SELECT c.id_czyt AS "id czytelnika", c.imie AS "imie", c.nazwisko AS "nazwisko", c.adres AS "adres", c.pesel AS "pesel", t.nr_tel AS "nr telefonu", m.mail AS "adres e-mail" FROM czytelnicy AS c, telefony AS t, maile AS m WHERE c.id_czyt=t.id_czyt AND c.id_czyt=m.id_czyt ORDER BY nazwisko ASC ); CREATE VIEW wszystkie_ksiazki AS ( SELECT ksiazka AS "id ksiazki", autor, tytul, dzial, isbn, uwagi FROM ksiazki ORDER BY autor ASC ); 8. Wyzwalacze Nad egzekwowaniem zasad panujących w bibliotece czuwają wyzwalacze śledzące ilość wypożyczonych książek i uniemożliwiające wypożyczenie zbyt dużej ilości książek. CREATE OR REPLACE FUNCTION wpisz_liczbe() RETURNS TRIGGER AS $$ INSERT INTO liczba_wyp(id_czyt, liczba) VALUES (NEW.id_czyt, 0); RETURN OLD; DROP TRIGGER wpisz_liczbe_trigger ON czytelnicy CASCADE; CREATE TRIGGER wpisz_liczbe_trigger AFTER INSERT ON czytelnicy FOR EACH ROW EXECUTE PROCEDURE wpisz_liczbe(); CREATE OR REPLACE FUNCTION jeden_wiecej() RETURNS TRIGGER AS $$ UPDATE liczba_wyp SET liczba=liczba+1 WHERE NEW.id_czyt=liczba_wyp.id_czyt; RETURN OLD; DROP TRIGGER jeden_wiecej_trigger ON wypozyczenia CASCADE; CREATE TRIGGER jeden_wiecej_trigger AFTER INSERT ON wypozyczenia FOR EACH ROW EXECUTE PROCEDURE jeden_wiecej(); 6

CREATE OR REPLACE FUNCTION liczba_wypozyczen() RETURNS TRIGGER AS $$ IF liczba_wyp.liczba=3 FROM liczba_wyp WHERE liczba_wyp.id_czyt=new.id_czyt THEN RAISE EXCEPTION 'Czytelnik wypozyczyl juz 3 ksiazki!'; END IF; RETURN NEW; DROP TRIGGER liczba_wypozyczen_trigger ON wypozyczenia CASCADE; CREATE TRIGGER liczba_wypozyczen_trigger BEFORE INSERT ON wypozyczenia FOR EACH ROW EXECUTE PROCEDURE liczba_wypozyczen(); CREATE OR REPLACE FUNCTION jeden_mniej() RETURNS TRIGGER AS $$ UPDATE liczba_wyp SET liczba=liczba-1 WHERE OLD.id_czyt=liczba_wyp.id_czyt; RETURN NEW; DROP TRIGGER jeden_mniej_trigger ON wypozyczenia CASCADE; CREATE TRIGGER jeden_mniej_trigger AFTER DELETE ON wypozyczenia FOR EACH ROW EXECUTE PROCEDURE jeden_mniej(); 9. Przykładowe dane Do bazy wprowadzono przykładowe krotki ilustrujące jej działanie. Dane zostały wprowadzone poprawnie, z zachowaniem wymagań więzów check i wyzwalaczy. INSERT INTO czytelnicy(nazwisko, imie, adres, pesel) VALUES ('Abacki', 'Adam', 'Trzebnicka 12, 51-130 Wroclaw', '91062484665'), ('Babacki', 'Bronislaw', 'Lindego 20, 51-138 Wroclaw','91042908329'), ('Cabacka', 'Czeslawa', 'Slaska 15, 42-222 Legnica', '62051851224'), ('Dabacki', 'Dariusz', 'Bardzka 8, 34-242 Kobierzyce', '74091584241'), ('Ebacka', 'Elzbieta', 'Wroclawska 7, 32-543 Walbrzych', '92070951482'); INSERT INTO telefony(id_czyt, nr_tel) VALUES (1, '512487954'), (2, '214569874'), (3, '548632145'), (4, '548756321'), (5, '521632521'), (5, '00447154263145'); 7

INSERT INTO maile(id_czyt, mail) VALUES (1, 'abacki@wp.pl'), (1, 'abacki.adam@onet.eu'), (2, 'babacki@wp.pl'), (3, 'cabacka@wp.pl'), (4, 'dabacki@wp.pl'), (5, 'ebacka@wp.pl'); INSERT INTO dzialy(dzial, opis) VALUES (4, 'Informatyka'), (5, 'Zarzadzanie'), (8, 'Kultura'), (303, 'Metodologia badan'), (613, 'Uzaleznienia'); INSERT INTO ksiazki(autor, tytul, dzial, isbn) VALUES ('Herbata Z.', 'Relacyjne bazy danych', 4, '5487562314'), ('Ogorek M.', 'Metodologia badan w socjologii', 303, '5947361886142'); INSERT INTO ksiazki(autor, tytul, wydawnictwo, dzial, isbn) VALUES ('Freud S.', 'Psychoterapia uzaleznien', 'PWN', 613, '5412459865214'), ('Pajolek M.', 'Zarzadzanie stresem', 'UwP', 5, '8456217845100'); INSERT INTO egzemplarze(ksiazka) VALUES (1), (2), (3), (3), (4), (4); INSERT INTO egzemplarze(ksiazka, uwagi) VALUES (1, 'lekko zniszczony grzbiet'), (3, 'brak strony tytulowej'); 10. Przykładowe wypożyczenia Dokonano też kilku przykładowych wypożyczeń książek. SELECT wypozycz(1,4); SELECT wypozycz(1,7); SELECT wypozycz(2,3); SELECT wypozycz(5,8); SELECT wypozycz(1,1); SELECT zwroc(1,1); 8

Rozdział 4 Elementy interfejsu graficznego Interfejs graficzny bazy danych wykonano w oparciu programu OpenOffice Base, który uzyskał połączenie z lokalną bazą danych, a więc również dostęp do tabel, więzów integralności, wyzwalaczy czy też wprowadzonych danych. Widok tabel w OpenOffice Base: W tabeli czytelnicy widać uprzednio wprowadzone dane. Zgodnie z ustalonymi więzami wprowadzenie np. zbyt długiego numeru PESEL kończy się błędem: Poprawnie wprowadzony czytelnik: 9

Poniżej zaprezentowano wprowadzenie poprawnego wypożyczenia czytelnikowi 4 książki 1, oraz nieudaną próbę wypożyczenia czytelnikowi 3 książki 3 ponieważ ta jest już wypożyczona przez czytelnika 2: 10