Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce



Podobné dokumenty
Tabulka fotbalové ligy

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Verzování a publikace dat na webu za pomoci PostgreSQL

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Univerzita Pardubice. Fakulta elektrotechniky a informatiky SEMESTRÁLNÍ PRÁCE PRO PŘEDMĚT IDAS2

Databáze I. Přednáška 7

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

6. SQL složitější dotazy, QBE

Databázové systémy I

Databáze I. Přednáška 4

SQL - trigger, Databázové modelování

Kapitola 6: Omezení integrity. Omezení domény

Jazyk SQL slajdy k přednášce NDBI001

Databázové systémy Cvičení 5.2

Zápisování dat do databáze

Databázové systémy. Dotazovací jazyk SQL - III

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

Semestrální práce z DAS2 a WWW

Návrh a tvorba WWW stránek 1/14. PHP a databáze

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

Kód v databázi. RNDr. Ondřej Zýka

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Dotazovací jazyk SQL I

10. Architektura klient/server a třívrstvá architektura

10. Architektura klient/server a třívrstvá architektura

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Databázové systémy a SQL

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

MySQL sežere vaše data

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

FAKULTA STAVEBNÍ STUDIJNÍ PROGRAM: GEODÉZIE A KARTOGRAFIE TYP PROGRAMU: MAGISTERSKÝ STUDIJNÍ OBOR: GEOMATIKA ÚVOD DO ZPRACOVÁNÍ PROSTOROVÝCH DAT

Vkládání, aktualizace, mazání

Jazyk SQL 3 - DML, DDL, TCL, DCL

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

PG 9.5 novinky ve vývoji aplikací

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Použití databází na Webu

Úvod do databázových systémů

Object-relational mapping (JPA, Hibernate)

1. Relační databázový model

SQL. Pohledy, ochrana dat,... Pavel Tyl

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Virtual private database. Antonín Steinhauser

Databázové systémy a SQL

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Popis souboru pro generování reportů *.report

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Deklarativní IO shrnutí minulé přednášky

Konceptuální modelování a SQL

Michal Krátký, Miroslav Beneš

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Sada 1 - PHP. 14. Úvod do jazyka SQL

Databáze II. 1. přednáška. Helena Palovská

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

PL/pgSQL. Pavel

- sloupcové integritní omezení

Jazyk SQL databáze SQLite. připravil ing. petr polách

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

U koly na procvic ení jazyka T-SQL

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Transformace konceptuálního modelu na relační

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Databáze I. Přednáška 9

Databázové a informační systémy Jana Šarmanová

Dotazování v relačním modelu a SQL

Structured Query Language SQL

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Databáze II. 2. přednáška. Helena Palovská

Text úlohy. Systémový katalog (DICTIONARY):

Materiál ke cvičením - SQL

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

2-3 hodiny. Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen s jazykem SQL a zná základy jazyka PL/SQL.

Oracle XML DB. Tomáš Nykodým

VŠB FEI - Technická Univerzita Ostrava. DAIS - Projekt. Dopravní podnik. Jméno: Matěj Kotyz (KOT0177)

Virtual Private Database (VPD) Jaroslav Kotrč

Základní přehled SQL příkazů

SQL. relační databázový systém. v úvodní kurz jazyka SQL

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Univerzita Pardubice. Fakulta elektrotechniky a informatiky

KIV/ZIS cvičení 5. Tomáš Potužák

A5M33IZS Informační a znalostní systémy. Relační databázová technologie

Tvorba informačních systémů

Transkript:

Databázové systémy 2 Jméno a příjmení: Jan Tichava Osobní číslo: Studijní skupina: čtvrtek, 4 5 Obor: ININ SWIN E-mail: jtichava@students.zcu.cz

Databázové systémy II. KIV/DB2 LS 2007/2008 Zadání semestrální práce Jméno a příjmení: Jan Tichava Osobní číslo: E-mail: jtichava@students.zcu.cz Název práce: Popis programu: Databáze obsahuje řidiče ve firmě, kteří mohou řídit určitá vozidla. Ke každému řidiči bude přiřazeno bydliště, u vozidel bude uvedeno, kde byla koupena a u řidičů i vozidel bude pobočka firmy, ke které patří. Vyznačte software, který použijete: SŘBD: PostgreSQL Klient: JSP 1. Výčet SQL dotazů alespoň 3, jeden agregovaný Seznam řidičů vybrané pobočky, včetně adres a vozidel, která mohou řídit pс Vypíše pobočky a autosalony, které sídlí ve stejném městě Průměrný věk řidiče AVG 2. Uložené PL/SQL procedury nebo funkce alespoň dvě, volány v triggerech Počet vozidel patřící jedné pobočce Test na jedinečnost adresy 3. Triggery alespoň dva Kontrola překročení maximálního počtu vozidel Zabrání přidání duplicitní adresy 1

ERA model sídlí Adresa id_adresa ulice cislo_popisne mesto kraj id_autosalonu nazev Autosalon má stat koupě Řidič řídí Vozidlo id_ridice jmeno pс id_vozidla spz prijmeni rodne_cislo skupina pracuje patří typ_vozidla sídlí Pobočka cena id_pobocky 2

Datová analýza Tabulka adresa Tabulka uchovává kompletní údaje o adresách. Pokud bude konkrétní adresa někde použita, nepůjde smazat. Každá adresa bude unikátní. CREATE TABLE db.adresa id_adresa integer NOT NULL DEFAULT nextval'db.adresa_adresa_seq'::regclass, ulice character varying50 NOT NULL, cislo_popisne character varying10 NOT NULL, mesto character varying50 NOT NULL, kraj character varying50 NOT NULL, stat character varying50 NOT NULL, CONSTRAINT adresa_pkey PRIMARY KEY id_adresa Tabulka autosalon Tabulka obsahuje údaje o každém autosalonu, odkazuje na konkrétní existující adresu. pс CREATE TABLE db.autosalon id_autosalonu serial NOT NULL, nazev text NOT NULL, id_adresa integer NOT NULL, CONSTRAINT autosalon_pkey PRIMARY KEY id_autosalonu, CONSTRAINT autosalon_id_adresa_fkey FOREIGN KEY id_adresa REFERENCES db.adresa id_adresa MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION Tabulka pobocka Informace o pobočce jsou uloženy v této tabulce. Podobně jako autosalon, tak také tato tabulka odkazuje na adresu. CREATE TABLE db.pobocka id_pobocky serial NOT NULL, max_vozidel numeric5 NOT NULL, id_adresa integer NOT NULL, CONSTRAINT pobocka_pkey PRIMARY KEY id_pobocky, CONSTRAINT pobocka_id_adresa_fkey FOREIGN KEY id_adresa REFERENCES db.adresa id_adresa MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION 3

Tabulka ridic Každý řidič zde musí mít záznam. Odkazuje na adresu, kde bydlí a na pobočku ve které pracuje. Rodné číslo musí být unikání. CREATE TABLE db.ridic id_ridice serial NOT NULL, jmeno text NOT NULL, prijmeni text NOT NULL, rodne_cislo text NOT NULL, skupina text NOT NULL, id_adresa integer NOT NULL, id_pobocky integer NOT NULL, rok_narozeni integer NOT NULL, plat integer NOT NULL, CONSTRAINT ridic_pkey PRIMARY KEY id_ridice, CONSTRAINT ridic_id_adresa_fkey FOREIGN KEY id_adresa REFERENCES db.adresa id_adresa MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT ridic_id_pobocky_fkey FOREIGN KEY id_pobocky REFERENCES db.pobocka id_pobocky MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT ridic_rodne_cislo_key UNIQUE rodne_cislo Tabulka vazba pс Slouží pouze k rozložení M:N relace. Uchovává jednotlivé řidiče a jejich vozidla. CREATE TABLE db.vazba id serial NOT NULL, id_ridice integer NOT NULL, id_vozidla integer NOT NULL, CONSTRAINT vazba_pkey PRIMARY KEY id, CONSTRAINT vazba_id_ridice_fkey FOREIGN KEY id_ridice REFERENCES db.ridic id_ridice MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT vazba_id_vozidla_fkey FOREIGN KEY id_vozidla REFERENCES db.vozidlo id_vozidla MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION 4

Tabulka vozidlo Zde jsou vedeny záznamy o tom, kde bylo vozidlo zakoupeno a k jaké pobočce patrí. CREATE TABLE db.vozidlo id_vozidla serial NOT NULL, spz text NOT NULL, typ_vozidla text NOT NULL, id_pobocky integer NOT NULL, id_autosalonu integer NOT NULL, CONSTRAINT vozidlo_pkey PRIMARY KEY id_vozidla, CONSTRAINT vozidlo_id_autosalonu_fkey FOREIGN KEY id_autosalonu REFERENCES db.autosalon id_autosalonu MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT vozidlo_id_pobocky_fkey FOREIGN KEY id_pobocky REFERENCES db.pobocka id_pobocky MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT vozidlo_spz_key UNIQUE spz Funkční analýza SQL dotazy SELECT pс SELECT * FROM db.adresa ORDER BY id_adresa; SELECT * FROM db.adresa WHERE id_adresa = 'ID'; SELECT * FROM db.adresa ORDER BY id_adresaů; SELECT * FROM db.adresa WHERE id_adresa = 'ID'; SELECT * FROM db.autosalon ORDER BY id_autosalonu; SELECT * FROM db.autosalon WHERE id_autosalonu = 'ID'; SELECT * FROM db.autosalon ORDER BY id_autosalonu; SELECT * FROM db.autosalon WHERE id_autosalonu = 'ID'; SELECT * FROM db.pobocka ORDER BY id_pobocky; SELECT * FROM db.pobocka WHERE id_pobocky = 'ID'; SELECT * FROM db.pobocka ORDER BY id_pobocky; SELECT * FROM db.vozidlo ORDER BY id_vozidla; SELECT * FROM db.vozidlo WHERE id_vozidla = 'ID'; SELECT * FROM db.vozidlo ORDER BY id_vozidla; SELECT * FROM db.vozidlo WHERE id_vozidla = 'ID'; SELECT * FROM db.ridic ORDER BY id_ridice; SELECT * FROM db.ridic WHERE id_ridice = 'ID'; SELECT * FROM db.ridic ORDER BY prijmeni; SELECT * FROM db.ridic WHERE id_ridice = 'ID'; SELECT * FROM db.vazba ORDER BY id; SELECT * FROM db.vazba WHERE id = 'ID' SELECT mesto FROM db.adresa GROUP BY mesto; Průměrný plat: SELECT AVGplat FROM db.ridic; 5

Průměrný věk řidiče: SELECT SELECT EXTRACTYEAR FROM TIMESTAMP 'now'-avgrok_narozeni FROM db.ridic; Všichni řidiči z konkrétní kanceláře: SELECT db.ridic.id_ridice, db.vazba.id_vozidla FROM db.ridic, db.vazba WHERE db.ridic.id_pobocky = 'ID' AND db.ridic.id_ridice = db.vazba.id_ridice; Všechny autosalony/pobočky v konkrétním městě: SELECT id_autosalonu FROM db.adresa, db.autosalon WHERE db.adresa.mesto = 'MESTO' AND db.adresa.id_adresa = db.autosalon.id_adresa; SELECT id_pobocky FROM db.adresa, db.pobocka WHERE db.adresa.mesto = 'MESTO' AND db.adresa.id_adresa = db.pobocka.id_adresa; SQL dotazy INSERT INSERT INTO db.adresa VALUES nextval'db.adresa_adresa_seq'::regclass, 'street', 'number', 'city', 'area', 'country'; INSERT INTO db.autosalon VALUES nextval'db.autosalon_id_autosalonu_seq'::regclass, name', 'id_address'; INSERT INTO db.pobocka VALUES nextval'db.pobocka_id_pobocky_seq'::regclass, 'maxcars', 'id_address'"; 䈀 ц INSERT INTO db.vozidlo VALUES nextval'db.vozidlo_id_vozidla_seq'::regclass, 'numberplate', 'type', 'office', 'motorshow'"; INSERT INTO db.ridic VALUES nextval'db.ridic_id_ridice_seq'::regclass, 'name', 'lastname', 'boringnumber', 'group', 'address', 'office', 'birthyear', 'pay'; INSERT INTO db.vazba VALUES nextval'db.vazba_id_seq'::regclass, 'id_driver', 'id_car'; SQL dotazy DELETE DELETE FROM db.adresa WHERE id_adresa = 'ID'; DELETE FROM db.autosalon WHERE id_autosalonu = 'ID'; DELETE FROM db.pobocka WHERE id_pobocky = 'ID'; DELETE FROM db.vozidlo WHERE id_vozidla = 'ID'; DELETE FROM db.ridic WHERE id_ridice = 'ID'; DELETE FROM db.vazba WHERE id = 'ID'; 6

SQL dotazy UPDATE UPDATE db.adresa SET ulice = 'street', cislo_popisne = 'number', mesto = 'city', kraj = 'area', stat = 'country' WHERE id_adresa = id; UPDATE db.autosalon SET nazev = 'name', id_adresa = 'id_address' WHERE id_autosalonu = id; UPDATE db.pobocka SET max_vozidel = 'maxcars', id_adresa = 'id_address' WHERE id_pobocky = id; UPDATE db.vozidlo SET spz = 'numberplate', typ_vozidla = 'type', id_pobocky = 'office', id_autosalonu = 'motorshow' WHERE id_vozidla = id; UPDATE db.ridic SET jmeno = 'name', prijmeni = 'lastname', rodne_cislo = 'boringnumber', skupina = 'group', id_adresa = 'address', id_pobocky = 'office', plat = 'pay', rok_narozeni = 'birthyear' WHERE id_ridice = id; UPDATE db.vazba SET id_ridice = 'id_driver', id_vozidla = 'id_car' WHERE id = id; Funkce freespace Funkce nejprve zjistí, jaký je maximální počet vozidel pro danou pobočku, pak zjistí aktuální počet vozidel, který má takto pobočka přiděleno. Na základě porovnání těchto dvou čísel se rozhodne, jestli povolí nebo zabrání vložení. с CREATE OR REPLACE FUNCTION db.freespace RETURNS "trigger" AS $BODY$ DECLARE maxcars INTEGER; currentcars INTEGER; BEGIN SELECT max_vozidel INTO maxcars FROM db.pobocka WHERE id_pobocky = NEW.id_pobocky; SELECT count* INTO currentcars FROM db.vozidlo WHERE id_pobocky = NEW.id_pobocky; IF currentcars >= maxcars THEN RAISE EXCEPTION 'Maximum vozidel'; END IF; RETURN NEW; END; 7

Funkce existsaddress Fukce vyhledá v databázi stejnou adresu, jako je zadaná, pokud existuje, zabrání vložení. CREATE OR REPLACE FUNCTION db. existsaddress RETURNS "trigger" AS $BODY$ DECLARE addresscount INTEGER; BEGIN SELECT count* INTO addresscount FROM db.adresa WHERE ulice = NEW.ulice AND cislo_popisne = NEW.cislo_popisne AND mesto = NEW.mesto AND kraj = NEW.kraj AND stat = NEW.stat; IF addresscount > 0 THEN RAISE EXCEPTION 'Adresa existuje'; END IF; RETURN NEW; END; Tabulka vozidlo, trigger beforeaddnewcar Trigger zavolá funkci freespace před vložení nového řádku do tabulky. CREATE TRIGGER "beforeaddnewcar" BEFORE INSERT ON db.vozidlo FOR EACH ROW EXECUTE PROCEDURE db.freespace; ц Tabulka adresa, trigger nodupliciteaddress Trigger zavolá funkci existsaddress před vložení nového řádku do tabulky. CREATE TRIGGER "nodupliciteaddress" BEFORE INSERT ON db.adresa FOR EACH ROW EXECUTE PROCEDURE db."existsaddress"; 8

Uživatelský manuál Program je realizovaný jako webová aplikace, která je přístupná na adrese: http://db2.tichava.cz/ Ovládání je intuitivní, v každém formuláři je nutné vyplnit všechna textová pole příslušnou hodnotou, pokud je některé pole prázdné nebo obsahuje zjevně chybnou hodnotu, pak nedojde k přidání do databáze poznámka: rodné číslo musí mít minimálně 9 číslic, není kontrolované na validitu. V zadání byl navíc agregovaný dotaz, který není uvedený v hlavním menu. Výsledek daného dotazu byl umístěn na stránku s řidiči vedle rodného čísla. Zhodnocení a závěr Webovou aplikaci jsem naprogramoval v Javě a v PostgresSQL. Javu jsem si zvolil proto, že je mým oblíbeným jazykem pro webové aplikace. PostgresSQL jsem si zvolil proto, že jsem se chtěl naučit něco nového, což se splnilo jen částečně. Kvůli JDBC je přístup do databáze stejný jako pro MySQL nebo jinou databázi, ale na druhou stranu jsem se naučil pracovat s pgadmin, který považuji za výborný nástroj. 䛠 с Velice se mi líbí triggery a funkce, které zjednoduší a zautomatizují některé věci, které by jinak bylo nutné řešit programově. 9