Projekt-bazy danych Poczta

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

Projekt bazy danych. Schemat bazy danych. Opis bazy danych

BAZA DANYCH SIECI HOTELI

Monika Sychla Daniel Smolarek Projekt bazy danych

Bartosz Jachnik - Kino

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

Baza danych hotel Maciej Gerus

SQL :: Data Definition Language

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

PODSTAWY BAZ DANYCH 13. PL/SQL

Język SQL, zajęcia nr 1

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Muzyczna Baza Danych

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

Aspekty aktywne baz danych

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

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

Tabele wykorzystywane w przykładach

Wykład 05 Bazy danych

Bazy Danych i Usługi Sieciowe

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Zaawansowane bazy danych i hurtownie danych semestr I

Bazy danych programowanie Wykład dla studentów matematyk

Wykład 8. SQL praca z tabelami 5

Bloki anonimowe w PL/SQL

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

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

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

Bazy danych i usługi sieciowe

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

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

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

SQL 4 Structured Query Lenguage

Pakiety podprogramów Dynamiczny SQL

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

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

Systemowe aspekty baz

Wyzwalacze (triggery) Przykład

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

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

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

Struktura bazy danych

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

Systemowe aspekty baz danych

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Bazy danych - Materiały do laboratoriów VIII

Bazy danych 8. Procedury składowane i kursory. P. F. Góra

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

Bazy danych. Dr inż. Paweł Kasprowski

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

PL/SQL. Zaawansowane tematy PL/SQL

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

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Bazy danych 10. SQL Widoki

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

Cele. Definiowanie wyzwalaczy

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

Baza danych Ogrodu Zoologicznego

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

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

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

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

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

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

System zarządzania treścią.

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

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Procedury i funkcje składowane

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

Wykład 5. SQL praca z tabelami 2

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

Bazy danych, 4. wiczenia

Bazy danych Język SQL część 1 Wykład dla studentów matem

Modelowanie wymiarów

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

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

Aplikacje WWW - laboratorium

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

Indeksy. Indeks typu B drzewo

Autor: Joanna Karwowska

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

Bazy danych. dr Radosław Matusik. radmat

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Język SQL, zajęcia nr 2

Transkrypt:

Autorzy: Aleksandra Bąk numer indeksu: 233142 Maksym Leś numer indeksu: 233283 Projekt-bazy danych Poczta 1.Opis Nasz projekt dotyczy poczty. Nasza baza danych zawiera informacje odnośnie: listów przechodzących przez naszą pocztę (pełny adres, informacje o odbiorze i zwrotach); listonoszy (informacje personalne, numer kontaktowy, informacje dotyczące obsługiwanych rejonów); opłat (waga przesyłki, wysokość należności, czy zapłacono ); Głównym celem naszej bazy jest umożliwienie dostępu do informacji związanych z listami i paczkami, którymi obracała nasza poczta. Założenia naszej bazy danych: 1. Waga listu poleconego i zwykłego ma wartość NULL. 2. Paczka i list polecony muszą zostać odebrane osobiście. 3. Do zwrotu trafiają przesyłki posiadające luki (np. niepełny adres,który nie jest jednoznaczny) lub gdy list polecony lub paczka nie została odebrana. 4. Każdy list jest przydzielony tylko do jednego listonosza. Baza składa się z 7 tabel. Tabela "list" zawiera informacje dotyczące adresu, czyli między innymi miasto, kod pocztowy nazwę ulicy, rodzaj listu, dzięki któremu wiemy jaką opłatę należy uiścić (szczegóły w tabeli "opłata" ). Następna tabela to "listonosz", w której możemy znaleźć jego dane, tj. numer kontaktowy oraz id rejonu, dzięki któremu wiemy, w jakim rejonie pracuje(szczegółowe dane znajdują się w tabeli "rejon" ). Tabela "potwierdzenie odbioru" zawiera id listu, rodzaj, adresata oraz informację dotyczącą dostarczenia przesyłki. W wypadku niezastania klienta zostaje wystawione awizo (szczegóły znajdują się w tabeli "awizo" ). Wówczas list trafia do tabeli zwroty, w której możemy również znaleźć listy, których adres i dane nie są wyznaczone jednoznacznie. Nasza baza umożliwia dowiedzenie się m.in.: który listonosz jest odpowiedzialny za dany list czy list polecony lub paczka została dostarczona czy została uiszczona zapłata za przesyłkę.

2.Schemat bazy danych 3.Kod SQL. DROP TABLE list CASCADE; CREATE TABLE list( id_listu VARCHAR(100) NOT NULL PRIMARY KEY, rodzaj_listu TEXT NOT NULL CHECK(rodzaj_listu IN ('list_polecony','list_zwykly','paczka')), miasto TEXT NOT NULL DEFAULT 'Olawa', kod_pocztowy VARCHAR(6) NOT NULL CHECK (kod_pocztowy ~ '^[0-9]{2}-[0-9]{3}$'), ulica VARCHAR(40) NOT NULL, numer_budynku VARCHAR(40) NOT NULL, numer_lokalu INTEGER, kierunek_listu TEXT NOT NULL CHECK(kierunek_listu IN ('przychodzacy','wychodzacy')) ); DROP TABLE zwrot CASCADE; CREATE TABLE zwrot( id_listu VARCHAR(100) NOT NULL PRIMARY KEY, miasto TEXT, kod_pocztowy VARCHAR(6) NOT NULL CHECK (kod_pocztowy ~ '^[0-9]{2}-[0-9]{3}$'), ulica VARCHAR(40), numer_budynku VARCHAR(40), numer_lokalu INTEGER, rodzaj_listu TEXT, oplata DECIMAL(10,2) );

DROP TABLE rejon CASCADE; CREATE TABLE rejon( id_rejonu VARCHAR(100) NOT NULL PRIMARY KEY, rejon VARCHAR(1) NOT NULL CHECK (rejon ~ '^[0-3]{1}$'), id_listu VARCHAR(100) NOT NULL, ulica VARCHAR(40) NOT NULL, numer_budynku VARCHAR(40) NOT NULL, numer_lokalu INTEGER ); DROP TABLE listonosz CASCADE; CREATE TABLE listonosz( id_listonosza VARCHAR(100) NOT NULL PRIMARY KEY, id_rejonu VARCHAR(100) NOT NULL, rejon VARCHAR(1) NOT NULL CHECK (rejon ~ '^[0-3]{1}$'), imie TEXT NOT NULL, nazwisko TEXT NOT NULL, tel_kontaktowy VARCHAR(9) NOT NULL CHECK (tel_kontaktowy ~ '^[0-9]{9}$') ); DROP TABLE oplata CASCADE; CREATE TABLE oplata( id_listu VARCHAR(100) NOT NULL PRIMARY KEY, rodzaj_listu TEXT NOT NULL CHECK(rodzaj_listu IN ('list_polecony',' list_zwykly','paczka')), waga_w_kg DECIMAL(5,3) CHECK(waga_w_kg>0 AND waga_w_kg<99.999), oplata DECIMAL(10,2) NOT NULL CHECK(oplata>0), czy_zaplacono BOOLEAN DEFAULT(true) NOT NULL, czy_oplata_jest_prawidlowa BOOLEAN DEFAULT(true) NOT NULL ); DROP TABLE potwierdzenie_odbioru CASCADE; CREATE TABLE potwierdzenie_odbioru( id_listu VARCHAR(100) NOT NULL PRIMARY KEY, rodzaj_listu TEXT NOT NULL CHECK(rodzaj_listu IN ('list_polecony','paczka')), adresat TEXT NOT NULL, czy_dostarczony BOOLEAN DEFAULT(true) NOT NULL ); DROP TABLE awizo CASCADE; CREATE TABLE awizo( id_listu VARCHAR(100) NOT NULL PRIMARY KEY, data_dostarczenia_awiza DATE NOT NULL, data_koncowa DATE NOT NULL CHECK (data_koncowa>data_dostarczenia_awiza), gdzie_sie_znajduje TEXT NOT NULL CHECK (gdzie_sie_znajduje IN('zwrot','odeslany')) );

Klucze obce. ALTER TABLE oplata ADD FOREIGN KEY (id_listu) REFERENCES list (id_listu); ALTER TABLE zwrot ADD FOREIGN KEY (id_listu) REFERENCES list(id_listu); ALTER TABLE potwierdzenie_odbioru ADD FOREIGN KEY (id_listu) REFERENCES list(id_listu); ALTER TABLE rejon ADD FOREIGN KEY (id_listu) REFERENCES list(id_listu); ALTER TABLE listonosz ADD FOREIGN KEY (id_rejonu) REFERENCES rejon(id_rejonu); ALTER TABLE awizo ADD FOREIGN KEY (id_listu) REFERENCES potwierdzenie_odbioru(id_listu); Dane. INSERT INTO list VALUES('AH-54321', 'list_zwykly','olawa','55-200', 'Balonowa',86,10,'przychodzacy'); INSERT INTO list VALUES('AH-43310', 'list_zwykly','olawa','55-200', 'Krotka',1,1,'przychodzacy'); INSERT INTO list VALUES('AH-43210', 'list_polecony','olawa','55-200', 'Spacerniakowa',99,7,'przychodzacy'); INSERT INTO list VALUES('AH-43211','list_polecony', 'Olawa','55-200','Brzeska',33,3,'przychodzacy'); INSERT INTO list VALUES('AH-43212','list_polecony', 'Olawa', '55-200','Krotka',2,7,'przychodzacy'); INSERT INTO list VALUES('AH-43213','paczka', 'Olawa', '55-200','Tęczowa',14,3,'przychodzacy'); INSERT INTO list VALUES('AH-43214','paczka','Olawa', '55-200','Krotka',6,9,'przychodzacy'); INSERT INTO list VALUES('AH-54322','paczka','Olawa','55-200', 'Balonowa',80,6,'przychodzacy'); INSERT INTO list VALUES('AH-54323','list_zwykly','Gaj','55-201', 'Ksiezycowa',2,5,'wychodzacy'); INSERT INTO list VALUES('AH-54324','list_zwykly','Stanowice','55-202','Wroclawska',66,6,'wychodzacy'); INSERT INTO list VALUES('AH-54325','paczka','Stanowice','55-202', 'Sloneczna',99,1,'wychodzacy'); INSERT INTO list VALUES('AH-54326','list_polecony','Gaj','55-201', 'Ksiezycowa',33,9,'wychodzacy'); INSERT INTO list VALUES('AH-54327','list_zwykly','Górnik','55-203', 'Zupowa',7,3,'wychodzacy'); INSERT INTO list VALUES('AH-54328','list_polecony','Olawa','55-200', 'Balonowa',60,9,'przychodzacy'); INSERT INTO list VALUES('AH-54329','list_polecony','Olawa','55-200', 'Brzeska',27,3,'przychodzacy'); INSERT INTO list VALUES('AH-54330','list_polecony','Olawa','55-200', 'Tęczowa',23,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54331','list_polecony','Olawa','55-200', 'Spacerniakowa',22,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54321', 'list_zwykly','olawa','55-200', 'Brzeska',6,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54400', 'list_polecony','olawa','55-200', 'Brzeska',7,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54401', 'list_zwykly','olawa','55-200',

'Brzeska',8,2,'przychodzacy'); INSERT INTO list VALUES('AH-54402', 'list_zwykly','olawa','55-200', 'Brzeska',8,3,'przychodzacy'); INSERT INTO list VALUES('AH-54403', 'list_zwykly','olawa','55-200', 'Brzeska',9,2,'przychodzacy'); INSERT INTO list VALUES('AH-54404', 'list_zwykly','olawa','55-200', 'Brzeska',15,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54405', 'list_polecony','olawa','55-200', 'Brzeska',17,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54406', 'list_zwykly','lubin','51-200', 'Legnicka',12,NULL,'wychodzacy'); INSERT INTO list VALUES('AH-54407', 'list_zwykly','warszawa','01-153', 'Wspolna',1,1,'wychodzacy'); INSERT INTO list VALUES('AH-54408', 'list_zwykly','olawa','55-200', 'Balonowa',7,1,'wychodzacy'); INSERT INTO list VALUES('AH-54409', 'list_polecony','zgorzelec','59-900', 'Orzechowa',1,NULL,'wychodzacy'); INSERT INTO list VALUES('AH-54410', 'list_polecony','polkowice','55-300', 'Rajska',13,NULL,'wychodzacy'); INSERT INTO list VALUES('AH-54411', 'list_zwykly','olawa','55-200', 'Krotka',56,13,'przychodzacy'); INSERT INTO list VALUES('AH-54412', 'list_zwykly','olawa','55-200', 'Krotka',56,17,'przychodzacy'); INSERT INTO list VALUES('AH-54413', 'list_polecony','olawa','55-200', 'Krotka',57,3,'przychodzacy'); INSERT INTO list VALUES('AH-54414', 'paczka','olawa','55-200', 'Krotka',60,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54415', 'paczka','olawa','55-200', 'Balonowa',10,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54417', 'paczka','olawa','55-200', 'Balonowa',23,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54416', 'list_zwykly','olawa','55-200', 'Spacernikowa',2,3,'przychodzacy'); INSERT INTO list VALUES('AH-54418', 'list_polecony','olawa','55-200', 'Spacernikowa',10,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54419', 'list_zwykly','olawa','55-200', 'Spacernikowa',12,NULL,'przychodzacy'); INSERT INTO list VALUES('AH-54420', 'list_zwykly','olawa','55-200', 'Tęczowa',88,17,'przychodzacy'); INSERT INTO list VALUES('AH-54421', 'list_zwykly','olawa','55-200', 'Tęczowa',101,1,'przychodzacy'); INSERT INTO zwrot VALUES('AH-54404','Olawa','55-200', 'Brzeska',15,NULL,'list_zwykly',1.0); INSERT INTO zwrot VALUES('AH-54417','Olawa','55-200', 'Balonowa',23,NULL,'paczka',13); INSERT INTO zwrot VALUES('AH-54412','Olawa','55-200', 'Krotka',56,17,'list_zwykly',NULL); INSERT INTO zwrot VALUES('AH-54111','Olawa','55-200', NULL,NULL,NULL,'list_zwykly',3.0); INSERT INTO zwrot VALUES('AH-54115','Olawa','55-200', NULL,NULL,NULL,'list_zwykly',3.0); INSERT INTO rejon VALUES('Bw-1',1,'AH-54321', 'Balonowa',86,10); INSERT INTO rejon VALUES('Bw-2',2,'AH-43310', 'Krotka',1,1);

INSERT INTO rejon VALUES('Bw-3',2,'AH-43210','Spacerniakowa',99,7); INSERT INTO rejon VALUES('Bw-4',1,'AH-43211','Brzeska',33,3); INSERT INTO rejon VALUES('Bw-5',2,'AH-43212','Krotka',2,7); INSERT INTO rejon VALUES('Bw-6',3,'AH-43213','Tęczowa',14,3); INSERT INTO rejon VALUES('Bw-7',2,'AH-43214','Krotka',6,9); INSERT INTO rejon VALUES('Bw-8',1,'AH-54322','Balonowa',80,6); INSERT INTO rejon VALUES('Bw-9',1,'AH-54328','Balonowa',60,9); INSERT INTO rejon VALUES('Bw-10',1,'AH-54329','Brzeska',27,3); INSERT INTO rejon VALUES('Bw-11',3,'AH-54330', 'Tęczowa',23,NULL); INSERT INTO rejon VALUES('Bw-12',3,'AH-54331','Spacerniakowa',22,NULL); INSERT INTO rejon VALUES('Bw-13',1,'AH-54321','Brzeska',6,NULL); INSERT INTO rejon VALUES('Bw-14',1,'AH-54400','Brzeska',7,NULL); INSERT INTO rejon VALUES('Bw-15',1,'AH-54401','Brzeska',8,2); INSERT INTO rejon VALUES('Bw-16',1,'AH-54402','Brzeska',8,3); INSERT INTO rejon VALUES('Bw-17',1,'AH-54403','Brzeska',9,2); INSERT INTO rejon VALUES('Bw-18',1,'AH-54404','Brzeska',15,NULL); INSERT INTO rejon VALUES('Bw-19',1,'AH-54405','Brzeska',17,NULL); INSERT INTO rejon VALUES('Bw-20',2,'AH-54411','Krotka',56,13); INSERT INTO rejon VALUES('Bw-21',2,'AH-54412','Krotka',56,17); INSERT INTO rejon VALUES('Bw-22',2,'AH-54413','Krotka',57,3); INSERT INTO rejon VALUES('Bw-23',2,'AH-54414','Krotka',60,NULL); INSERT INTO rejon VALUES('Bw-24',1,'AH-54415','Balonowa',10,NULL); INSERT INTO rejon VALUES('Bw-25',1,'AH-54417','Balonowa',23,NULL); INSERT INTO rejon VALUES('Bw-26',2,'AH-54416','Spacernikowa',2,3); INSERT INTO rejon VALUES('Bw-27',2,'AH-54418','Spacernikowa',10,NULL); INSERT INTO rejon VALUES('Bw-28',2,'AH-54419','Spacernikowa',12,NULL); INSERT INTO rejon VALUES('Bw-29',3,'AH-54420','Tęczowa',88,17); INSERT INTO rejon VALUES('Bw-30',3,'AH-54421','Tęczowa',101,1); INSERT INTO listonosz VALUES('JP-099','Bw-1','1', 'Mieczyslaw','Zawada','123456789'); INSERT INTO listonosz VALUES('JP-100','Bw-4','1', 'Mieczyslaw','Zawada','123456789'); INSERT INTO listonosz VALUES('JP-101','Bw-8','1', 'Mieczyslaw','Zawada','123456789'); INSERT INTO listonosz VALUES('JP-102','Bw-9','1', 'Mieczyslaw','Zawada','123456789'); INSERT INTO listonosz VALUES('JP-103','Bw-10','1', 'Mieczyslaw','Zawada','123456789'); INSERT INTO listonosz VALUES('JP-104','Bw-2','2', 'Waclaw','Brodaty','122256789'); INSERT INTO listonosz VALUES('JP-105','Bw-3','2', 'Waclaw','Brodaty','122256789'); INSERT INTO listonosz VALUES('JP-106','Bw-5','2', 'Waclaw','Brodaty','122256789'); INSERT INTO listonosz VALUES('JP-107','Bw-7','2', 'Waclaw','Brodaty','122256789'); INSERT INTO listonosz VALUES('JP-108','Bw-6','3', 'Mariusz','Dusigrosz','124356700'); INSERT INTO listonosz VALUES('JP-109','Bw-11','3', 'Mariusz','Dusigrosz','124356700'); INSERT INTO listonosz VALUES('JP-110','Bw-12','3', 'Mariusz','Dusigrosz','124356700'); INSERT INTO oplata VALUES('AH-54321', 'list_zwykly',null,3); INSERT INTO oplata VALUES('AH-43210', 'list_zwykly',null,3); INSERT INTO oplata VALUES('AH-43310', 'list_zwykly',null,3); INSERT INTO oplata VALUES('AH-43211','list_polecony', NULL,3); INSERT INTO oplata VALUES('AH-43212','list_polecony', NULL,5); INSERT INTO oplata VALUES('AH-43213','paczka',1.34,10); INSERT INTO oplata VALUES('AH-43214','paczka', 99,100); INSERT INTO oplata VALUES('AH-54322','paczka',7.23,20); INSERT INTO oplata VALUES('AH-54323','list_zwykly',NULL,3);

INSERT INTO oplata VALUES('AH-54324','list_zwykly',NULL,3); INSERT INTO oplata VALUES('AH-54325','paczka',20,100); INSERT INTO oplata VALUES('AH-54326','list_polecony',NULL,5); INSERT INTO oplata VALUES('AH-54327','list_zwykly',NULL,3); INSERT INTO oplata VALUES('AH-54328','list_polecony',NULL,5); INSERT INTO oplata VALUES('AH-54329','list_polecony',NULL,5); INSERT INTO potwierdzenie_odbioru VALUES('AH-43211','list_polecony','Maciej Maciejewicz'); INSERT INTO potwierdzenie_odbioru VALUES('AH-43212','list_polecony', 'Elżbieta Struś',false); INSERT INTO potwierdzenie_odbioru VALUES('AH-43213','paczka','Michał Zając'); INSERT INTO potwierdzenie_odbioru VALUES('AH-43214','paczka','Racław Borkowski' ); INSERT INTO potwierdzenie_odbioru VALUES('AH-54322','paczka','Blanka Nowakowska'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54325','paczka','Ignacy Chmielewski',false); INSERT INTO potwierdzenie_odbioru VALUES('AH-54326','list_polecony','Zachariasz Kozłowski',false); INSERT INTO potwierdzenie_odbioru VALUES('AH-54328','list_polecony','Bartosz Woźniak'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54329','list_polecony','Karina Kozłowska'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54330','list_polecony','Urjasz Wieczorek'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54331','list_polecony','Antoni Jabłoński',false); INSERT INTO potwierdzenie_odbioru VALUES('AH-54400', 'list_polecony','danuta Lis'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54405', 'list_polecony','kazimierz Rogowski'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54409', 'list_polecony','anna Kulczyk'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54410', 'list_polecony','florentyna Bujnarowska'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54413', 'list_polecony','martyna Wojak'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54414', 'paczka','grzegorz Michalski'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54415', 'paczka','joanna Krupicka'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54417', 'paczka','sylwia Pawlik'); INSERT INTO potwierdzenie_odbioru VALUES('AH-54418', 'list_polecony','ewa Szpak'); Widoki. --1-- DROP VIEW ilosc_listow_na_stanie; CREATE VIEW ilosc_listow_na_stanie AS SELECT count(id_listu) AS ilosc_listow_na_stanie FROM list; SELECT * FROM ilosc_listow_na_stanie; --2-- DROP VIEW ilosc_zwrotow; CREATE VIEW ilosc_zwrotow AS SELECT count(id_listu) AS ilosc_zwrotow FROM zwrot; SELECT * FROM ilosc_zwrotow;

--3-- DROP VIEW suma_oplat; CREATE VIEW suma_oplat AS SELECT sum(oplata) FROM oplata; SELECT * FROM suma_oplat; Funkcje. --1-- DROP FUNCTION listonosz_odpowiedzialny_za_list (VARCHAR(100)); CREATE OR REPLACE FUNCTION listonosz_odpowiedzialny_za_list(n VARCHAR(100)) RETURNS TEXT AS $$ DECLARE txt TEXT; BEGIN SELECT (listonosz.id_listonosza,listonosz.imie,listonosz.nazwisko) INTO txt FROM rejon, listonosz WHERE rejon.id_listu=n; RETURN txt; END; $$ LANGUAGE 'plpgsql'; --2-- DROP FUNCTION czy_istnieje_taki_list (VARCHAR(40),VARCHAR(40),c INTEGER); CREATE OR REPLACE FUNCTION czy_istnieje_taki_list(a VARCHAR(40),b VARCHAR(40),c INTEGER) RETURNS VARCHAR(40) AS $$ DECLARE txt TEXT; BEGIN SELECT list.id_listu INTO txt FROM list WHERE ulica=a AND numer_budynku=b AND numer_lokalu=c; IF(NOT FOUND) THEN RAISE EXCEPTION 'Taki list nie jest w naszej bazie!'; RETURN txt; END; $$ LANGUAGE 'plpgsql'; --3-- DROP FUNCTION czy_oplata (VARCHAR(100));

CREATE OR REPLACE FUNCTION czy_oplata(a VARCHAR(100)) RETURNS VARCHAR(40) AS $$ DECLARE krotka RECORD; BEGIN SELECT * INTO krotka FROM oplata WHERE oplata.id_listu=a; IF(NOT FOUND) THEN RAISE EXCEPTION 'Taki list nie jest w naszej bazie!'; IF(krotka.id_listu=a AND krotka.czy_zaplacono='t' AND krotka.czy_oplata_jest_prawidlowa='t' ) THEN RETURN 'Oplata zaiszczona prawidlowo'; ELSE RETURN 'Oplata zaiszczona nieprawidlowo'; END; $$ LANGUAGE 'plpgsql'; Wyzwalacze. --1-- DROP FUNCTION waga_przesylki() CASCADE; CREATE OR REPLACE FUNCTION waga_przesylki() RETURNS TRIGGER AS $$ BEGIN IF (NEW.waga_w_kg IS NULL) AND (NEW.rodzaj_listu IN ('list_polecony')) AND (NEW.oplata! =5.00) THEN RAISE EXCEPTION 'List polecony powinien kosztowac 5 pln! '; IF (NEW.waga_w_kg IS NULL) AND (NEW.rodzaj_listu IN ('list_zwykly')) AND (NEW.oplata! =3.00) THEN RAISE EXCEPTION 'List zwykly powinien kosztowac 3 pln! '; IF (NEW.waga_w_kg IS NOT NULL) AND (NEW.rodzaj_listu IN ('paczka')) AND (NEW.waga_w_kg>0 AND NEW.waga_w_kg<2.000) AND (NEW.oplata!=10.00) THEN RAISE EXCEPTION 'Paczka do dwoch kilgramow powinna kosztowac 10 pln! '; IF (NEW.waga_w_kg IS NOT NULL) AND (NEW.rodzaj_listu IN ('paczka')) AND (NEW.waga_w_kg>=2.000 AND NEW.waga_w_kg<8.000) AND (NEW.oplata!=20.00) THEN RAISE EXCEPTION 'Paczka od dwoch do osmiu kilgramow powinna kosztowac 20 pln! '; IF (NEW.waga_w_kg IS NOT NULL) AND (NEW.rodzaj_listu IN ('paczka')) AND (NEW.waga_w_kg>=8.000 AND NEW.waga_w_kg<99.999) AND (NEW.oplata!=100.00) THEN

RAISE EXCEPTION 'Paczka powyzej osmiu kilgramow powinna kosztowac 100 pln! '; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; DROP TRIGGER waga_przesylki_trigger ON oplata CASCADE; CREATE TRIGGER waga_przesylki_trigger BEFORE INSERT OR UPDATE ON oplata FOR EACH ROW EXECUTE PROCEDURE waga_przesylki(); --2-- DROP FUNCTION waga_listu() CASCADE; CREATE OR REPLACE FUNCTION waga_listu() RETURNS TRIGGER AS $$ BEGIN IF (NEW.waga_w_kg IS NOT NULL) AND (NEW.rodzaj_listu IN ('list_polecony','list_zwykly')) THEN RAISE EXCEPTION 'Jezeli waga ma konkretna wartosc to jest paczka!'; IF (NEW.waga_w_kg IS NULL) AND (NEW.rodzaj_listu IN ('paczka')) THEN RAISE EXCEPTION 'Kazda paczka musi miec wage!'; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; DROP TRIGGER waga_listu_trigger ON oplata CASCADE; CREATE TRIGGER waga_listu_trigger BEFORE INSERT OR UPDATE ON oplata FOR EACH ROW EXECUTE PROCEDURE waga_listu(); --3-- DROP FUNCTION czy_dobra_ulica() CASCADE; CREATE OR REPLACE FUNCTION czy_dobra_ulica() RETURNS TRIGGER AS $$ BEGIN IF (NEW.ulica NOT IN ('Brzeska','Balonowa','Krotka','Spacerniakowa','Tęczowa')) AND (NEW.miasto IN ('Olawa')) THEN RAISE EXCEPTION 'W Olawie nie ma takiej ulicy!';

RETURN NEW; END; $$ LANGUAGE 'plpgsql'; DROP TRIGGER czy_dobra_ulica_trigger ON oplata CASCADE; CREATE TRIGGER czy_dobra_ulica_trigger BEFORE INSERT OR UPDATE ON list FOR EACH ROW EXECUTE PROCEDURE czy_dobra_ulica(); --4-- DROP FUNCTION czy_dobry_rejon() CASCADE; CREATE OR REPLACE FUNCTION czy_dobry_rejon() RETURNS TRIGGER AS $$ BEGIN IF (NEW.ulica IN ('Balonowa')) AND (NEW.rejon!= 1) THEN RAISE EXCEPTION 'Ulica Balonowa nalezy do rejonu 1!'; IF (NEW.ulica IN ('Brzeska')) AND (NEW.rejon!=1) THEN RAISE EXCEPTION 'Ulica Brzeska nalezy do rejonu 1!'; IF (NEW.ulica IN ('Krotka')) AND (NEW.rejon!=2) THEN RAISE EXCEPTION 'Ulica Krotka nalezy do rejonu 2!'; IF (NEW.ulica IN ('Spacerniakowa')) AND (NEW.rejon!=2) THEN RAISE EXCEPTION 'Ulica Spacerniakowa nalezy do rejonu 2!'; IF (NEW.ulica IN ('Tęczowa')) AND (NEW.rejon!=3) THEN RAISE EXCEPTION 'Ulica Tęczowa nalezy do rejonu 3!'; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; DROP TRIGGER czy_dobry_rejon_trigger ON rejon CASCADE; CREATE TRIGGER czy_dobry_rejon_trigger BEFORE INSERT OR UPDATE ON rejon FOR EACH ROW EXECUTE PROCEDURE czy_dobry_rejon();

4.Interfejs graficzny bazy danych. nasz_html.html <html> <center><h2>poczta</h2></center><br> <body bgcolor="#eaeaae"> <form action=pierwszy.php> Wyswietl relacje by zorientowac sie jak ona wyglada <input type="text" name="r"/> <br> <i>mozliwe do wyboru: { list, zwrot, rejon, listonosz, oplata, potwierdzenie_odbioru, awizo }</i> <br> </form> <hr> <form action=funkcja_pierwsza.php> Wyswietlenie danych listonosza odpowiedzialnego za dostarczenie listu <input type="text" name="s"/>. <br> <i> Wpisujemy id_listu Np.AH-54413, AH-43212, AH-54417 </i> <br> </form> <hr> <form action=funkcja_druga.php> Sprawdzenie czy uiszczona jest oplata konkretnego listu <input type="text" name="s"/>. <br> <i> Przyklady: { AH-43212,AH-54411,AH-54412 } </i> <br> </form> <hr> <form action=wyzwalacz_pierwszy.php> Proba wstawienia ceny, roznej od tej w cenniku <input type="text" name="r"/>.

<br> <i> Przyklad: list polecony, ktory nie bedzie kosztowac 5 pln, lecz 17 </i> <br> </form> <hr> <form action=wyzwalacz_drugi.php> Proba wprowadzenia do bazy jakiegos listu o pewnej wadze (ustalilismy ze listow nie wazymy - gdy cos wazy to staje sie paczka) <input type="text" name="r"/>. <br> <i> Przyklad: Chcemy wstawic do bazy list o pewnej wadze. W tym celu jako rodzaj naszej kilogramowej wysylki wpiszemy list_zwykly zamiast paczki. </i> <br> </form> <hr> <form action=wyzwalacz_trzeci.php> Proba wprowadzenia do bazy jakiegos listu, na ktorym widnieje ulica, ktorej nie ma w Olawie <input type="text" name="r"/>. <br> <i> Przyklad: Orzechowa, Babska </i> <br> </form> <hr> </body> </html> pierwszy.php <html> <head> <title>laczenie z baza</title> </head> <body> <?php $uchwyt = pg_connect("host='192.168.12.108' port=7654 user=s233142 password=bak dbname=bazy_danych"); if (!$uchwyt) { echo "<p><b>wystapil blad podczas laczenia z baza!!!</b></p>"; exit(); } $wynik = pg_query($uchwyt, " SELECT * FROM ".$_GET['r']." "); if (!$wynik) { echo "<p><b>". pg_last_error($uchwyt). "</b></p>"; } while ($wiersz = pg_fetch_row($wynik)) { echo " $wiersz[0] $wiersz[2] $wiersz[3] $wiersz[4] $wiersz[5] $wiersz[6] $wiersz[7] ";

echo "<br />\n"; } pg_close($uchwyt);?> </body> </html> funkcja_pierwsza.php <html> <head> <title>laczenie z baza</title> </head> <body> <?php $uchwyt = pg_connect("host='192.168.12.108' port=7654 user=s233142 password=bak dbname=bazy_danych"); if (!$uchwyt) { echo "<p><b>wystapil blad podczas laczenia z baza!!!</b></p>"; exit(); } $wynik = pg_query($uchwyt, " SELECT * FROM listonosz_odpowiedzialny_za_list('". $_GET['s']."'); "); if (!$wynik) { echo "<p><b>". pg_last_error($uchwyt). "</b></p>"; } while ($wiersz = pg_fetch_row($wynik)) { echo " $wiersz[0] $wiersz[1] $wiersz[2] $wiersz[3] $wiersz[4] $wiersz[5] "; echo "<br />\n"; } pg_close($uchwyt);?> </body> </html> funkcja_druga.php <html> <head> <title>laczenie z baza</title>

</head> <body> <?php $uchwyt = pg_connect("host='192.168.12.108' port=7654 user=s233142 password=bak dbname=bazy_danych"); if (!$uchwyt) { echo "<p><b>wystapil blad podczas laczenia z baza!!!</b></p>"; exit(); } $wynik = pg_query($uchwyt, " SELECT czy_oplata('".$_get['s']."'); "); if (!$wynik) { echo "<p><b>". pg_last_error($uchwyt). "</b></p>"; } while ($wiersz = pg_fetch_row($wynik)) { echo " $wiersz[0] "; echo "<br />\n"; } pg_close($uchwyt);?> </body> </html> wyzwalacz_pierwszy.php <html> <head> <title>laczenie z baza</title> </head> <body> <?php $uchwyt = pg_connect("host='192.168.12.108' port=7654 user=s233142 password=bak dbname=bazy_danych"); if (!$uchwyt) { echo "<p><b>wystapil blad podczas laczenia z baza!!!</b></p>"; exit(); } $wynik = pg_query($uchwyt, " INSERT INTO oplata (id_listu, rodzaj_listu,waga_w_kg,oplata, czy_oplata_jest_prawidlowa) VALUES ('AH-131313', 'list_polecony',null, '".$_GET['r']."', true); " );

if (!$wynik) { echo "<p><b>". pg_last_error($uchwyt). "</b></p>"; } while ($wiersz = pg_fetch_row($wynik)) { echo "$wiersz[0]"; echo "<br />\n"; } pg_close($uchwyt);?> </body> </html> wyzwalacz_drugi.php <html> <head> <title>laczenie z baza</title> </head> <body> <?php $uchwyt = pg_connect("host='192.168.12.108' port=7654 user=s233142 password=bak dbname=bazy_danych"); if (!$uchwyt) { echo "<p><b>wystapil blad podczas laczenia z baza!!!</b></p>"; exit(); } $wynik = pg_query($uchwyt, " INSERT INTO oplata (id_listu, rodzaj_listu,waga_w_kg,oplata, czy_oplata_jest_prawidlowa) VALUES ('AH-131515', '".$_GET['r']."',1.0, 6, false); " ); if (!$wynik) { echo "<p><b>". pg_last_error($uchwyt). "</b></p>"; } while ($wiersz = pg_fetch_row($wynik)) { echo "$wiersz[0]"; echo "<br />\n"; } pg_close($uchwyt);?> </body> </html>

wyzwalacz_trzeci.php <html> <head> <title>laczenie z baza</title> </head> <body> <?php $uchwyt = pg_connect("host='192.168.12.108' port=7654 user=s233142 password=bak dbname=bazy_danych"); if (!$uchwyt) { echo "<p><b>wystapil blad podczas laczenia z baza!!!</b></p>"; exit(); } $wynik = pg_query($uchwyt, " INSERT INTO list VALUES ('AW-155265', 'list_zwykly','olawa','55-200', '".$_GET['r']."', 5,6,'przychodzacy'); " ); if (!$wynik) { echo "<p><b>". pg_last_error($uchwyt). "</b></p>"; } while ($wiersz = pg_fetch_row($wynik)) { echo "$wiersz[0]"; echo "<br />\n"; } pg_close($uchwyt);?> </body> </html>