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>