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

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

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

BAZA DANYCH SIECI HOTELI

Wykład 05 Bazy danych

Monika Sychla Daniel Smolarek Projekt bazy danych

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

Bartosz Jachnik - Kino

Projekt-bazy danych Poczta

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

Baza danych hotel Maciej Gerus

PODSTAWY BAZ DANYCH 13. PL/SQL

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

SQL :: Data Definition Language

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

Projekt bazy danych. Schemat bazy danych. Opis bazy danych

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Przykładowa baza danych BIBLIOTEKA

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

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

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

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

SQL 4 Structured Query Lenguage

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

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Muzyczna Baza Danych

Tabele wykorzystywane w przykładach

Język SQL, zajęcia nr 1

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

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

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

Bloki anonimowe w PL/SQL

Struktura bazy danych

Bazy danych, 4. wiczenia

Wykład 5. SQL praca z tabelami 2

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

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

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

Wykład 8. SQL praca z tabelami 5

Zaawansowane bazy danych i hurtownie danych semestr I

Wyzwalacze (triggery) Przykład

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

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

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

Bazy danych. dr inż. Arkadiusz Mirakowski

Oracle PL/SQL. Paweł Rajba.

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Pakiety podprogramów Dynamiczny SQL

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

Bazy Danych i Usługi Sieciowe

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

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

Składowane procedury i funkcje

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

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

Relacyjne bazy danych. Podstawy SQL

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

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

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

Bazy danych i usługi sieciowe

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

Aspekty aktywne baz danych

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

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

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

Relacyjne bazy danych. Podstawy SQL

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

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

PL/SQL. Zaawansowane tematy PL/SQL

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

Procedury i funkcje składowane

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Język SQL, zajęcia nr 2

Paweł Rajba

Systemowe aspekty baz

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 6. Klucze obce. P. F. Góra

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Bazy danych 10. SQL Widoki

BAZY DANYCH Cz III. Transakcje, Triggery

Wykład 6. SQL praca z tabelami 3

Systemowe aspekty baz danych

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Bazy danych programowanie Wykład dla studentów matematyk

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

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

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Oracle Label Security

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

LAB 3 (część 1 Projektu)

Ćwiczenia 2 IBM DB2 Data Studio

System zarządzania treścią.

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

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

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

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

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

Transkrypt:

Projekt ilustruje przykładową bazę domowej biblioteczki. Baza ma za zadanie ułatwić skatalogowanie posiadanych książek wraz z podstawowymi informacjami na ich temat. Opis bazy: Książka może mieć wielu autorów oraz autor mógł napisać wiele książek (to oczywiste), więc pomiędzy tabelami ksiazki oraz autorzy występuje powiązanie n-n. Umożliwia to tabela autor_ksiazki. Każda książka posiada jakiś opis_fizyczny, który można odpowiednio dostosować po dodaniu konkretnego egzemplarza do bazy danych. Tabele uwagi i tagi mają służyć do dalszego rozwoju projektu, w obecnej chwili można w nich jedynie umieszczać dodatkowe informacje o danym egzemplarzu. Tabela tagi posiada dynamicznie generowaną listę możliwych wartości. Zdefiniowany jest jedynie jeden widok wszystkie_bez_tagow który ma służyć pomocą przy wypełnianiu informacji o gatunkach książki. Dodane wyzwalacze umożliwiają wykrycie podstawowych błędów przy wprowadzaniu danych: automatyczne zamienianie imion i nazwisk na właściwy format, sprawdzanie poprawności ISBN, Funkcja dodaj_eg umożliwia dodanie wszystkich podstawowych informacji o książce w krótkim czasie. Funkcja tagi_ksiazki wyświetla wszystkie tagi przypisane do konkretnej książki w postaci pojedynczego łańcucha. Obecna praca jest zaledwie częścią projektu i dlatego może nie posiadać pełnej funkcjonalności rzeczywistej bazy bibliotecznej. Poniżej zamieszczam kod źródłowy bazy. Tryb graficzny będzie dostępny na: http://www.math.uni.wroc.pl/~s245528/ -- USUWANIE TABEL - DROP TABLE autor_ksiazki, autorzy, gatunki, ksiazki, opis_fizyczny, uwagi, tagi, wydawnictwo CASCADE; -- DODANIE TABEL - CREATE TABLE ksiazki ( id_ksiazki SERIAL PRIMARY KEY, tytul VARCHAR(100) NOT NULL, podtytul TEXT DEFAULT(''), rok_wydania INTEGER DEFAULT(NULL), ISBN_10 VARCHAR(10) DEFAULT('brak') NOT NULL, ISBN_13 VARCHAR(13) DEFAULT('brak') NOT NULL CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT CREATE TABLE autor_ksiazki( id_ksiazki INTEGER REFERENCES ksiazki(id_ksiazki)on UPDATE CASCADE ON DELETE CASCADE, id_autora INTEGER REFERENCES autorzy(id_autora)on UPDATE CASCADE ON DELETE CASCADE CREATE TABLE wydawnictwo( CASCADE,

nazwa TEXT CREATE TABLE opis_fizyczny( format_ksiazki VARCHAR(2), rodzaj_okladki TEXT DEFAULT ('MIĘKKA') NOT NULL CHECK(rodzaj_okladki='TWARDA' OR rodzaj_okladki='miękka'), obwoluta BOOLEAN DEFAULT (false) NOT NULL, stan TEXT, CASCADE CREATE TABLE uwagi( uwagi TEXT, CASCADE CREATE TABLE gatunki( gatunek VARCHAR(30) PRIMARY KEY INSERT INTO gatunki VALUES ('brak' CREATE TABLE tagi( CASCADE, gatunek VARCHAR(30) DEFAULT ('brak') REFERENCES gatunki(gatunek) ON UPDATE CASCADE ON DELETE RESTRICT -- Funkcje i wyzwalacze - -- FUNCKCJE--- -- DODANIE EGZEMPLARZA KSIĄŻKI-- DROP FUNCTION dodaj_eg(text,text,int,varchar(10),varchar(13),text,text,text, INT CREATE OR REPLACE FUNCTION dodaj_eg(tytul_ TEXT, podtytul_ TEXT, rok_wydania_ INT, ISBN_10_ VARCHAR(10), ISBN_13_ VARCHAR(13), imie_ TEXT, nazwisko_ TEXT, wydawnictwo_ TEXT, do_zmian INT DEFAULT(0)) RETURNS INTEGER AS $$ DECLARE rec RECORD; id_k INTEGER; id_a INTEGER; INSERT INTO ksiazki (tytul, podtytul, rok_wydania, ISBN_10, ISBN_13) VALUES (tytul_,podtytul_, rok_wydania_, ISBN_10_,ISBN_13_ IF do_zmian=0 THEN SELECT INTO id_k max(id_ksiazki) FROM ksiazki WHERE tytul=tytul_ AND podtytul=podtytul_ AND rok_wydania=rok_wydania_ AND ISBN_10=ISBN_10_ AND ISBN_13=ISBN_13_; ELSE id_k=do_zmian; END if; SELECT INTO id_a min(id_autora) FROM autorzy WHERE imie=imie_ AND nazwisko=nazwisko_; IF id_a IS NULL OR id_a=0 THEN INSERT INTO autorzy (imie, nazwisko) VALUES (imie_, nazwisko_

ELSE SELECT INTO id_a min(id_autora) FROM autorzy WHERE imie=imie_ AND nazwisko=nazwisko_; SELECT INTO id_a min(id_autora) FROM autorzy WHERE imie=imie_ AND nazwisko=nazwisko_; INSERT INTO autor_ksiazki (id_ksiazki,id_autora) VALUES (id_k, id_a INSERT INTO wydawnictwo (id_ksiazki, nazwa) VALUES (id_k,wydawnictwo_ INSERT INTO opis_fizyczny (id_ksiazki) VALUES (id_k INSERT INTO uwagi (id_ksiazki) VALUES (id_k INSERT INTO tagi (id_ksiazki) VALUES (id_k RETURN 0; $$ LANGUAGE'plpgsql'; -- WYLICZENIE CYFRY KONTROLNEJ -- DROP FUNCTION cyfra_kontr(text CREATE OR REPLACE FUNCTION cyfra_kontr(isbn TEXT) RETURNS TEXT AS $$ DECLARE i INTEGER DEFAULT (1 x INTEGER DEFAULT (0 ch TEXT DEFAULT ('' IF char_length(isbn)=10 THEN WHILE char_length(isbn)>i LOOP x := x + i * CAST(substring(isbn from i for 1) AS INT i := i + 1; END LOOP; x := x%11; ELSIF char_length(isbn)=13 THEN WHILE char_length(isbn)>i LOOP x := x + (2+(-1)^i) * CAST(substring(isbn from i for 1) AS INT i := i + 1; END LOOP; x := x%10; ch:=cast(x AS TEXT IF x=10 THEN ch:='x'; RETURN ch; --- WSZYSTKIE TAGI KSIĄŻKI --- CREATE OR REPLACE FUNCTION tagi_ksiazki(id INTEGER) RETURNS TEXT AS $$ --- zrobić wersję z tytułami --- DECLARE rec RECORD; tag TEXT; tag := ''; FOR rec IN SELECT * FROM tagi WHERE tagi.id_ksiazki=id LOOP tag := tag ' ' rec.gatunek; END LOOP; IF tag='' THEN RAISE EXCEPTION 'Podane ID książki jest nieprawidłowe lub nie ma przypisanych tagów'; RETURN tag; --- WYZWALACZE----

--- IMIE I NAZWISKO AUTORA TYLKO Z WIELKIEJ LITERY ---- CREATE OR REPLACE FUNCTION wielka_litera_autor() RETURNS TRIGGER AS $$ NEW.imie:=initcap(NEW.imie NEW.nazwisko:=initcap(NEW.nazwisko--- nie działa na polskie znaki --- RETURN NEW; DROP TRIGGER wielka_litera_autor_wyzwalacz ON autorzy; CREATE TRIGGER wielka_litera_autor_trigger BEFORE INSERT OR UPDATE ON autorzy FOR EACH ROW EXECUTE PROCEDURE wielka_litera_autor( --- WŁAŚCIWY ISBN --- CREATE OR REPLACE FUNCTION poprawny_isbn() RETURNS TRIGGER AS $$ IF (NEW.ISBN_10<>'brak') AND (char_length(new.isbn_10)<>10) AND (NEW.ISBN_10 IS NOT NULL) THEN RAISE EXCEPTION 'Jako ISBN wprowadź tylko same cyfry, bez myślników, albo pozostaw puste pole'; ELSIF (NEW.ISBN_10<>'brak') AND (cyfra_kontr(new.isbn_10)<>substring(new.isbn_10 from char_length(new.isbn_10)for 1) ) THEN RAISE EXCEPTION 'Błąd we wprowadzonym ISBN 10'; IF (NEW.ISBN_13<>'brak') AND (char_length(new.isbn_13)<>13) AND (NEW.ISBN_13 IS NOT NULL) THEN RAISE EXCEPTION 'Jako ISBN wprowadź tylko same cyfry, bez myślników, albo pozostaw puste pole'; ELSIF (NEW.ISBN_13<>'brak') AND (cyfra_kontr(new.isbn_13)<>substring(new.isbn_13 from char_length(new.isbn_13)for 1) ) THEN RAISE EXCEPTION 'Błąd we wprowadzonym ISBN 13'; RETURN NEW; DROP TRIGGER poprawny_isbn_trigger ON ksiazki; CREATE TRIGGER poprawny_isbn_trigger BEFORE INSERT OR UPDATE ON ksiazki FOR EACH ROW EXECUTE PROCEDURE poprawny_isbn( - WIDOKI - DROP VIEW wszystkie_bez_tagow; CREATE VIEW wszystkie_bez_tagow AS SELECT ksiazki.id_ksiazki, ksiazki.tytul, autorzy.imie, autorzy.nazwisko FROM ksiazki JOIN autor_ksiazki USING (id_ksiazki) JOIN autorzy USING (id_autora) JOIN tagi USING (id_ksiazki) WHERE tagi.gatunek='brak'; Przykładowy interfejs graficzny: