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

Podobne dokumenty
Hurtownia Świętego Mikołaja projekt bazy danych

BAZA DANYCH SIECI HOTELI

Bartosz Jachnik - Kino

Baza danych hotel Maciej Gerus

Projekt-bazy danych Poczta

Monika Sychla Daniel Smolarek Projekt bazy danych

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

Projekt bazy danych. Schemat bazy danych. Opis bazy danych

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

SQL :: Data Definition Language

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

Język SQL, zajęcia nr 1

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

Aspekty aktywne baz danych

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

Wykład 8. SQL praca z tabelami 5

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

Muzyczna Baza Danych

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

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

Wykład 05 Bazy danych

Tabele wykorzystywane w przykładach

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

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

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

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

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

Bazy Danych i Usługi Sieciowe

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

SQL 4 Structured Query Lenguage

Bazy danych programowanie Wykład dla studentów matematyk

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

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Bazy danych i usługi sieciowe

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

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

Bazy danych 10. SQL Widoki

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Zaawansowane bazy danych i hurtownie danych semestr I

Pakiety podprogramów Dynamiczny SQL

Przykładowa baza danych BIBLIOTEKA

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

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

Wykład 5. SQL praca z tabelami 2

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

Systemowe aspekty baz

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

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

Baza danych Ogrodu Zoologicznego

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.

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

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

Bazy danych - Materiały do laboratoriów VIII

Język PL/SQL Procedury i funkcje składowane

Bazy danych. dr inż. Arkadiusz Mirakowski

Widok Connections po utworzeniu połączenia. Obszar roboczy

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Systemowe aspekty baz danych

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

Oracle PL/SQL. Paweł Rajba.

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Wyzwalacze (triggery) Przykład

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

Cele. Definiowanie wyzwalaczy

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

Projekt dziennika lekcyjnego

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

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

PL/SQL. Zaawansowane tematy PL/SQL

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Język SQL, zajęcia nr 2

Paweł Rajba

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

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Wykład 6. SQL praca z tabelami 3

Struktura bazy danych

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Bloki anonimowe w PL/SQL

Projektowanie systemów baz danych

Bazy danych, 4. wiczenia

Język PL/SQL Pakiety podprogramów

Oracle PL/SQL. Paweł Rajba.

Procedury i funkcje składowane

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

Składowane procedury i funkcje

Relacyjne bazy danych. Podstawy SQL

LAB 3 (część 1 Projektu)

1. Wyzwalacze BD (ang. triggers)

Transkrypt:

Mój projekt przedstawia bazę danych noclegów składającą się z 10 tabel. W projekcie wykorzystuje program LibreOffice Base do połączenia psql z graficznym interfejsem ( kilka formularzy przedstawiających zasadę działania bazy). Przy pomocy mojej bazy można znaleźć podstawowe informacje: nazwę, adres, informacje o właścicielu i o dostępie do rezerwacji, baza powyższa nie zakłada możliwości rezerwacji tylko informuje o tym czy dany pokój jest wolny czy też nie, w przypadku kiedy nie jest wolny można poznać dokładną datę zwolnienia. W dodatkowych tabelach można dowiedzieć się jaka jest odległość od środków komunikacji takich jak: lotnisko, pkp, pks dla uproszczenia podajemy wartość w metrach jeśli istnieje podany punkt w danym miejscu jeśli nie to żadna wartość się nie pojawia. W poniżej zamieszczonych kodach sql znajduje się cała baza oraz przykładowe dane oraz zastosowanie znajdujących się w bazie funkcji, wyzwalaczy i widoków. Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL, kod_wlasciciela INTEGER NOT NULL, nazwa TEXT NOT NULL, rodzaj TEXT NOT NULL

DROP TABLE info CASCADE; CREATE TABLE info( id_noclegu INTEGER NOT NULL, ile_gwiazdek INTEGER, preferencje TEXT DROP TABLE rezerwacje CASCADE; CREATE TABLE rezerwacje( id_noclegu INTEGER NOT NULL, kod_pokoju INTEGER NOT NULL, nr_pokoju INTEGER NOT NULL, ile_osobowy INTEGER NOT NULL, lazienka VARCHAR(3) NOT NULL DROP TABLE szcz_rezerwacje CASCADE; CREATE TABLE szcz_rezerwacje( kod_pokoju INTEGER NOT NULL, zajety VARCHAR(3), do_kiedy DATE DROP TABLE cennik_rezerwacji CASCADE; CREATE TABLE cennik_rezerwacji ( kod_pokoju INTEGER NOT NULL, cena REAL NOT NULL

DROP TABLE wlasciciel CASCADE; CREATE TABLE wlasciciel( kod_wlasciciela INTEGER NOT NULL, id_noclegu INTEGER NOT NULL, imie TEXT NOT NULL, nazwisko TEXT NOT NULL, PESEL VARCHAR(11) NOT NULL DROP TABLE posilki CASCADE; --TAK/NIE-- CREATE TABLE posilki( id_noclegu INTEGER NOT NULL, id_posilku INTEGER NOT NULL, rodzaj TEXT NOT NULL, dostepnosc VARCHAR(3) NOT NULL DROP TABLE lokalizacja CASCADE; --odległość-- CREATE TABLE lokalizacja( id_noclegu INTEGER NOT NULL, pkp VARCHAR(12), pks VARCHAR(12), lotnisko VARCHAR(12) DROP TABLE adresy CASCADE; CREATE TABLE adresy( id_noclegu INTEGER NOT NULL,

wojewodztwo TEXT NOT NULL, miejscowosc TEXT NOT NULL, ulica nr TEXT NOT NULL, VARCHAR(5) NOT NULL, kod_pocztowy VARCHAR(6) NOT NULL DROP TABLE telefony CASCADE; CREATE TABLE telefony( kod_wlasciciela INTEGER NOT NULL, numer INTEGER NOT NULL ALTER TABLE noclegi ADD PRIMARY KEY (id_noclegu ALTER TABLE info ADD PRIMARY KEY (id_noclegu ALTER TABLE rezerwacje ADD PRIMARY KEY (id_noclegu, kod_pokoju ALTER TABLE cennik_rezerwacji ADD PRIMARY KEY (kod_pokoju ALTER TABLE wlasciciel ADD PRIMARY KEY (kod_wlasciciela ALTER TABLE posilki ADD PRIMARY KEY (id_posilku ALTER TABLE lokalizacja ADD PRIMARY KEY(id_noclegu ALTER TABLE adresy ADD PRIMARY KEY (id_noclegu ALTER TABLE telefony ADD PRIMARY KEY (kod_wlasciciela

ALTER TABLE szcz_rezerwacje ADD PRIMARY KEY (kod_pokoju ALTER TABLE wlasciciel ADD FOREIGN KEY (id_noclegu) REFERENCES noclegi(id_noclegu) ON UPDATE CASCADE; ALTER TABLE info ADD FOREIGN KEY (id_noclegu) REFERENCES noclegi(id_noclegu) ON UPDATE CASCADE; ALTER TABLE rezerwacje ADD FOREIGN KEY (kod_pokoju) REFERENCES cennik_rezerwacji(kod_pokoju) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE rezerwacje ADD FOREIGN KEY (id_noclegu) REFERENCES noclegi(id_noclegu) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE telefony ADD FOREIGN KEY (kod_wlasciciela) REFERENCES wlasciciel(kod_wlasciciela) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE lokalizacja ADD FOREIGN KEY (id_noclegu) REFERENCES noclegi(id_noclegu) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE adresy ADD FOREIGN KEY (id_noclegu) REFERENCES noclegi(id_noclegu) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE posilki ADD FOREIGN KEY (id_noclegu) REFERENCES noclegi(id_noclegu)

ON UPDATE CASCADE; ALTER TABLE rezerwacje ADD FOREIGN KEY (kod_pokoju) REFERENCES szcz_rezerwacje(kod_pokoju) ON UPDATE CASCADE; ALTER TABLE posilki ADD CHECK (dostepnosc IN ('TAK','NIE') ALTER TABLE rezerwacje ADD CHECK (lazienka IN ('TAK','NIE') ALTER TABLE cennik_rezerwacji ADD CHECK (cena>0 DROP FUNCTION czy_posilek(integer,varchar(10) CREATE OR REPLACE FUNCTION czy_posilek(a INTEGER,s VARCHAR(10)) RETURNS TEXT AS ' DECLARE w RECORD; BEGIN SELECT INTO w dostepnosc FROM posilki WHERE rodzaj=s AND id_noclegu=a; RETURN w; END; ' LANGUAGE 'plpgsql'; DROP FUNCTION sprawdz_dostepnosc( CREATE OR REPLACE FUNCTION sprawdz_dostepnosc() RETURNS TRIGGER AS ' BEGIN IF (NEW.dostepnosc IS NOT NULL) AND (NEW.dostepnosc NOT IN (''TAK'', ''NIE'')) THEN RAISE EXCEPTION ''Musi być TAK/NIE!''; END IF; RETURN NEW;

END; ' LANGUAGE 'plpgsql'; DROP TRIGGER sprawdz_dostepnosc_trigger ON posilki CASCADE; CREATE TRIGGER sprawdz_dostepnosc_trigger BEFORE INSERT OR UPDATE ON posilki FOR EACH ROW EXECUTE PROCEDURE sprawdz_dostepnosc( DROP FUNCTION wielka( CREATE OR REPLACE FUNCTION wielka() RETURNS TRIGGER AS ' BEGIN NEW.imie = initcap(new.imie NEW.nazwisko= initcap(new.nazwisko RETURN NEW; END; ' LANGUAGE 'plpgsql'; DROP TRIGGER wielka_trigger ON wlasciciel CASCADE; CREATE TRIGGER wielka_trigger BEFORE INSERT OR UPDATE ON wlasciciel FOR EACH ROW EXECUTE PROCEDURE wielka( DROP VIEW wlasciciele_hoteli CASCADE; CREATE VIEW wlasciciele_hoteli AS( SELECT noclegi.id_noclegu,wlasciciel.imie,wlasciciel.nazwisko,wlasciciel.pesel FROM noclegi,wlasciciel WHERE noclegi.id_noclegu=wlasciciel.id_noclegu AND rodzaj='hotel' DROP VIEW rezerwacje_info CASCADE; CREATE VIEW rezerwacje_info AS( SELECT noclegi.id_noclegu, noclegi.nazwa,noclegi.rodzaj,rezerwacje.nr_pokoju,rezerwacje.ile_osobowy,rezerwacje.lazienka,

cennik_rezerwacji.cena FROM noclegi,rezerwacje,cennik_rezerwacji WHERE noclegi.id_noclegu=rezerwacje.id_noclegu AND rezerwacje.kod_pokoju=cennik_rezerwacji.kod_pokoju ORDER BY noclegi.id_noclegu DROP FUNCTION dodaj_nocleg(kod_w INTEGER, nazw TEXT, rodz TEXT CREATE OR REPLACE FUNCTION dodaj_nocleg(kod_w INTEGER, nazw TEXT, rodz TEXT) RETURNS INTEGER AS ' BEGIN INSERT INTO noclegi(kod_wlasciciela, nazwa, rodzaj) VALUES(kod_w, nazw, rodz RETURN 0; END; ' LANGUAGE 'plpgsql'; INSERT INTO noclegi (kod_wlasciciela,nazwa,rodzaj) VALUES (1,'MAria', 'Hotel' INSERT INTO noclegi (kod_wlasciciela,nazwa,rodzaj) VALUES (2,'Jozef', 'Hotel' INSERT INTO noclegi (kod_wlasciciela,nazwa,rodzaj) VALUES (3,'Podroza', 'Pensjonat' INSERT INTO noclegi (kod_wlasciciela,nazwa,rodzaj) VALUES (4,'Mis', 'Schronisko' INSERT INTO wlasciciel (kod_wlasciciela,id_noclegu,imie,nazwisko,pesel) VALUES (1,1,'Michal','Lalik','91121110132' INSERT INTO wlasciciel (kod_wlasciciela,id_noclegu,imie,nazwisko,pesel) VALUES (2,2,'Roman','Kowalski','91121144556' INSERT INTO wlasciciel (kod_wlasciciela,id_noclegu,imie,nazwisko,pesel) VALUES (3,3,'Maria','Bonk','91121132112' INSERT INTO wlasciciel (kod_wlasciciela,id_noclegu,imie,nazwisko,pesel) VALUES (4,4,'Zygmunt','Korol','91121112233'

INSERT INTO info (id_noclegu,ile_gwiazdek,preferencje) VALUES (1, 3, 'Wygoda' INSERT INTO info (id_noclegu,ile_gwiazdek,preferencje) VALUES (2, 3, 'Cena' INSERT INTO info (id_noclegu,ile_gwiazdek,preferencje) VALUES (3, 3, 'WypoczynekGorski' INSERT INTO info (id_noclegu,ile_gwiazdek,preferencje) VALUES (4, 3, 'Wygoda' INSERT INTO szcz_rezerwacje (kod_pokoju,zajety,do_kiedy) VALUES (1,'TAK','2007-06-02' INSERT INTO szcz_rezerwacje (kod_pokoju,zajety,do_kiedy) VALUES (2,'TAK','2007-06-04' INSERT INTO szcz_rezerwacje (kod_pokoju,zajety,do_kiedy) VALUES (3,'TAK','2007-06-01' INSERT INTO szcz_rezerwacje (kod_pokoju,zajety,do_kiedy) VALUES (4,'NIE',NULL INSERT INTO cennik_rezerwacji (kod_pokoju,cena) VALUES (1,100 INSERT INTO cennik_rezerwacji (kod_pokoju,cena) VALUES (2,200 INSERT INTO cennik_rezerwacji (kod_pokoju,cena) VALUES (3,150 INSERT INTO cennik_rezerwacji (kod_pokoju,cena) VALUES (4,75.60 INSERT INTO rezerwacje (id_noclegu,nr_pokoju,kod_pokoju,ile_osobowy,lazienka) VALUES (1,12,1,4,'TAK' INSERT INTO rezerwacje (id_noclegu,nr_pokoju,kod_pokoju,ile_osobowy,lazienka) VALUES (2,10,2,3,'TAK' INSERT INTO rezerwacje (id_noclegu,nr_pokoju,kod_pokoju,ile_osobowy,lazienka) VALUES (3,11,3,2,'NIE' INSERT INTO rezerwacje (id_noclegu,nr_pokoju,kod_pokoju,ile_osobowy,lazienka) VALUES (4,13,4,5,'NIE' INSERT INTO posilki (id_noclegu,id_posilku,rodzaj,dostepnosc) VALUES (1,1,'sniadanie','TAK' INSERT INTO posilki (id_noclegu,id_posilku,rodzaj,dostepnosc) VALUES (1,2,'obiad','NIE' INSERT INTO posilki (id_noclegu,id_posilku,rodzaj,dostepnosc) VALUES (2,3,'kolacja','TAK' INSERT INTO posilki (id_noclegu,id_posilku,rodzaj,dostepnosc) VALUES (3,4,'sniadanie','NIE' INSERT INTO lokalizacja (id_noclegu,pkp,pks,lotnisko) VALUES (1,1000,3000,5000 INSERT INTO lokalizacja (id_noclegu,pkp,pks,lotnisko) VALUES (2,2000,NULL,3000 INSERT INTO lokalizacja (id_noclegu,pkp,pks,lotnisko) VALUES (3,NULL,NULL,NULL INSERT INTO lokalizacja (id_noclegu,pkp,pks,lotnisko) VALUES (4,1000,2000,NULL

INSERT INTO adresy (id_noclegu,wojewodztwo,miejscowosc,ulica,nr,kod_pocztowy) VALUES (1,'dolnoslaskie','Trata','gladka',32,'59-700' INSERT INTO adresy (id_noclegu,wojewodztwo,miejscowosc,ulica,nr,kod_pocztowy) VALUES (2,'slaskie','Boleslawiec','krzywa',43,'58-500' INSERT INTO adresy (id_noclegu,wojewodztwo,miejscowosc,ulica,nr,kod_pocztowy) VALUES (3,'pomorskie','Warszawa', 'prosta',45,'53-000' INSERT INTO adresy (id_noclegu,wojewodztwo,miejscowosc,ulica,nr,kod_pocztowy) VALUES (4,'lodzkie','Wroclaw','ladna',12,'12-500' INSERT INTO telefony (kod_wlasciciela,numer) VALUES (1,6440944 INSERT INTO telefony (kod_wlasciciela,numer) VALUES (2,1233213 INSERT INTO telefony (kod_wlasciciela,numer) VALUES (3,6132323 INSERT INTO telefony (kod_wlasciciela,numer) VALUES (4,6323223 Koniec kodu. Jak to działa: Narusza ograniczenie check, które wymusza cena>0 INSERT INTO cennik_rezerwacji (kod_pokoju,cena) VALUES (6,-10 Narusza check, który wymusza dostępność (TAK/NIE). INSERT INTO cennik_rezerwacji (kod_pokoju,cena) VALUES (6,10 INSERT INTO szcz_rezerwacje (kod_pokoju,zajety,do_kiedy) VALUES (6,'NIE',NULL INSERT INTO rezerwacje (id_noclegu,nr_pokoju,kod_pokoju,ile_osobowy,lazienka) VALUES (2,13,6,5,'Nas' Narusza check, który wymusza dostępność (TAK/NIE) oraz wyświetla komunikat ostrzegawczy(wyzwalacz). INSERT INTO posilki (id_noclegu,id_posilku,rodzaj,dostepnosc) VALUES (3,5,'sniadanie','NIW' Widok pokazujący właścicieli hoteli: SELECT * FROM wlasciciele_hoteli; Widok pokazujący zestawienie informacji o rezerwacjach: SELECT * FROM rezerwacje_info;

Funkcja zwracająca dostępność konkretnego posiłku w odpowiednim noclegu: SELECT czy_posilek(1,'sniadanie' SELECT czy_posilek(1,'obiad' Wyzwalacz zmieniający pierwsze litery imienia i nazwiska na wielkie. INSERT INTO wlasciciel(kod_wlasciciela,id_noclegu,imie,nazwisko,pesel) VALUES (12,4,'zygmunt','borek','91121112231' SELECT * FROM wlasciciel; Funkcja dodająca krotkę do tabeli noclegi: SELECT dodaj_nocleg(1,'dobry','hotel' SELECT * FROM noclegi; Poniżej przedstawiona kwerenda pokazuje dostępność posiłków w różnych noclegach.

Przykładowy widok napisany w psql, dostępny w Libreoffice. Zestawia dane dotyczące rezerwacji.

Poniżej mamy przykładowy formularz.