Semestrální práce z DAS2 a WWW



Podobné dokumenty
Rezervační systém Tvorba WWW stránek

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

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

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

Použití databází na Webu

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

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

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

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

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

Univerzita Pardubice. Fakulta elektrotechniky a informatiky

Databázové systémy I

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

IS Veřejná databáze filmů

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

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

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

Databázové systémy. Cvičení 6: SQL

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

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

Virtual private database. Antonín Steinhauser

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

Architektury databázových

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á:

4. lekce Přístup k databázi z vyššího programovacího jazyka

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

Internetová filmová databáze IFDB

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

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

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

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

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

PG 9.5 novinky ve vývoji aplikací

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

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

5. POČÍTAČOVÉ CVIČENÍ

SQL injection princip a ochrana

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

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

MySQL sežere vaše data

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

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

Tabulka fotbalové ligy

Oracle XML DB. Tomáš Nykodým

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

Databázové systémy I

PHP a Large Objecty v PostgreSQL

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

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

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

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

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Michal Krátký, Miroslav Beneš

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

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Měřící systém se vzdáleným přístupem. Databáze

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

Databázové systémy a SQL

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

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

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

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

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

Informační systém webhostingu

4IT218 Databáze. 4IT218 Databáze

17. července :51 z moravec@yahoo.com

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

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

Maturitní projekt do IVT Pavel Doleček

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

8.2 Používání a tvorba databází

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

Databázové a informační systémy Informační systém prodejny nábytku. Jakub Kamrla, KAM087

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

Databázové a informační systémy

Zabezpečení proti SQL injection

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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

Univerzita Pardubice. Centrální správa dokumentů

Virtual Private Database (VPD) Jaroslav Kotrč

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

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

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

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

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

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Materiál ke cvičením - SQL

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

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

1 Webový server, instalace PHP a MySQL 13

Tvorba informačních systémů

UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky. Databázová aplikace pro evidenci mechatronických stavebnic Michal Grof

Zápisování dat do databáze

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

Transkript:

Univerzita Pardubice Fakulta elektrotechniky a informatiky Semestrální práce z DAS2 a WWW Databázová část Matěj Trakal 8.12.2009

Kapitola 1: Obsah KAPITOLA 1: OBSAH 2 KAPITOLA 2: ZÁKLADNÍ CHARAKTERISTIKA 4 PODKAPITOLA 1: ZVOLENÉ TÉMA 4 PODKAPITOLA 2: URČENÍ FUNKCE DATABÁZE 4 PODKAPITOLA 3: UML USE CASE DIAGRAM 4 KAPITOLA 3: ZÁKLADNÍ VLASTNOSTI DATABÁZE 5 PODKAPITOLA 1: OŠETŘENÍ VSTUPNÍCH DAT SQL INJECTION 5 PODKAPITOLA 2: INTEGRITNÍ OMEZENÍ 5 PODKAPITOLA 3: PROPOJENÍ DATABÁZE S WEBOVOU ČÁSTÍ 5 NAVÁZÁNÍ SPOJENÍ S DATABÁZÍ 6 VYKONÁNÍ VYBRANÝCH SQL DOTAZŮ POMOCÍ PHP 6 ODPOJENÍ OD DATABÁZE 7 KAPITOLA 4: E-R DIAGRAM 8 KAPITOLA 5: POPIS TABULEK A JEJICH ATRIBUTŮ 10 TZANR 10 TTITULZANR 10 TFORMAT_FILMU 10 TFORMAT_TITULKU 10 TJAZYK 10 TTITULKY 10 TJAZYK_FILMU 10 TROLE 10 TUZIVATEL 10 TTITUL 11 TADRESA 11 TPUJCUJICI 11 TVYPUJCKA 11 TFILMOTEKA 11 KAPITOLA 6: POPIS A SYNTAXE POUŽITÝCH DATABÁZOVÝCH OBJEKTŮ 12 PODKAPITOLA 1: FUNKCE 12 PODKAPITOLA 2: TRIGERY 12 PODKAPITOLA 3: INDEXY 13 PODKAPITOLA 4: SEKVENCE 13 Matěj Trakal S t r a n a 2 20092010 R e v i z e 011

PODKAPITOLA 5: POHLEDY 13 PODKAPITOLA 6: DEFAULTNÍ PŘEDPŘIPRAVENÁ DATA PRO FUNGOVÁNÍ WEBOVÉ ČÁSTI 13 PODKAPITOLA 7: DALŠÍ OPERACE NAD DATABÁZÍ 14 KAPITOLA 7: ZÁVĚR 15 KAPITOLA 8: SEZNAM OBRÁZKŮ 16 Matěj Trakal S t r a n a 3 20092010 R e v i z e 011

Kapitola 2: Základní charakteristika Podkapitola 1: Zvolené téma Pro semestrální práci jsem si zvolil tvorbu filmové databáze v plánovaném rozsahu asi 5 tabulek. Bohužel rozsah se výrazně zvětšil postupným zjišťováním návazností a potřeb dělení a zachování základních norem. Podkapitola 2: Určení funkce databáze Databáze má sloužit pro jednoho uživatele vlastnícího domácí filmotéku. Vlastník je hodný a tedy umožňuje svým známým výpůjčku jeho filmů, Je tedy do jisté míry implementována i půjčovna. Jelikož vlastník využívá více fyzických úložišť filmů a filmy má často i vícekrát v různém formátu a jazycích, musí databáze pojmout i tyto požadavky. Z tohoto hlediska byla ve výsledku databáze navržena jako robustnější a odděluje od sebe jednotlivé tituly a nadále pak jednotlivé filmy umístěné na nějakém médiu. Podkapitola 3: UML use case diagram Obrázek 1 UML Use case diagram Matěj Trakal S t r a n a 4 20092010 R e v i z e 011

Kapitola 3: Základní vlastnosti databáze Podkapitola 1: Ošetření vstupních dat SQL Injection Díky využití kvalitního databázového layeru (frameworku) Dibi (http:dibiphp.comcs) je zajištěno, že provádění sql příkazů nemůže už z principu fungování Dibi být napadeno pomocí SQL Injection. Jediná nevýhoda z jejího nasazení je nutnost mít na serveru PHP ve verzi novější, než 5.2.0 (optimálně 5.3 a vyšší), jelikož využívá pokročilých funkcí PHP pro svůj chod. Podkapitola 2: Integritní omezení ALTER TABLE TFILMOTEKA ADD FOREIGN KEY (FILM_ID) REFERENCES TTITUL (FILM_ID) ALTER TABLE TTITULZANR ADD FOREIGN KEY (FILM_ID) REFERENCES TTITUL (FILM_ID) ALTER TABLE TFILMOTEKA ADD FOREIGN KEY (FORMATFILMU_ID) REFERENCES TFORMAT_FILMU (FORMATFILMU_ID) ALTER TABLE TVYPUJCKA ADD FOREIGN KEY (KATALOGOVE_CISLO) REFERENCES TFILMOTEKA (KATALOGOVE_CISLO) ALTER TABLE TTITULKY ADD FOREIGN KEY (KATALOGOVE_CISLO) REFERENCES TFILMOTEKA (KATALOGOVE_CISLO) ALTER TABLE TJAZYK_FILMU ADD FOREIGN KEY (KATALOGOVE_CISLO) REFERENCES TFILMOTEKA (KATALOGOVE_CISLO) ALTER TABLE TVYPUJCKA ADD FOREIGN KEY (NICK) REFERENCES TPUJCUJICI (NICK) ALTER TABLE TPUJCUJICI ADD FOREIGN KEY (ADRESA_ID) REFERENCES TADRESA (ADRESA_ID) ALTER TABLE TJAZYK_FILMU ADD FOREIGN KEY (JAZYK_ID) REFERENCES TJAZYK (JAZYK_ID) ALTER TABLE TTITULKY ADD FOREIGN KEY (JAZYK_ID) REFERENCES TJAZYK (JAZYK_ID) ALTER TABLE TTITULKY ADD FOREIGN KEY (FORMATTITULKU_ID) REFERENCES TFORMAT_TITULKU (FORMATTITULKU_ID) ALTER TABLE TUZIVATEL ADD FOREIGN KEY (ROLE_ID) REFERENCES TROLE (ROLE_ID) ALTER TABLE TPUJCUJICI ADD FOREIGN KEY (NICK) REFERENCES TUZIVATEL (NICK) Podkapitola 3: Propojení databáze s webovou částí Díky tomu, že jsem využil do jisté míry výhod OOP a databázového layeru Dibi se mi práce s databází značně ztížila, ač přinesla i spoustu výhod. Hlavní nevýhodou je nutnost zapouzdření, dále striktní oddělení datové, aplikační a prezentační vrstvy. Jako výhodu jsem naproti tomu získal bezpečnost a modifikovatelnost aplikace. Matěj Trakal S t r a n a 5 20092010 R e v i z e 011

Navázání spojení s databází public function construct() { try { dibi::connect(array( 'driver' => 'oracle', 'database' => 'sql101.upceucebny.cz:1521oracle10', 'username' => 'st22312', 'password' => HESLO, * globální proměnná načítaná z externího souboru ve složce nepřístupné z webového prohlížeče * 'charset' => 'UTF8' )); catch (DibiException $e) { echo get_class($e), ': ', $e->getmessage(), "\n"; Vykonání vybraných SQL dotazů pomocí PHP ** * Ověření uživatele skrz databázi * @param <string> $username * @param <string> $password * @return <string> Array[][] * public function UserAuth($username, $password) { $result = null; if(dibi::isconnected()) { $result= dibi::query("select role as ROLE, nick as USERNAME, password as PASSWORD from TUZIVATEL left join TROLE on TROLE.ROLE_ID=TUZIVATEL.ROLE_ID where NICK='".$username."' and PASSWORD='".$password."'"); return $result->fetchall(); ** * Vrací informace o titulech - parsované jako XML * @return <Array['XML']> parsované XML * public function MovieParseXML() { $result = null; $row = array(); if(dibi::isconnected()) { $result= dibi::query("select xmlelement(`titul`, xmlforest(film_id as `id-filmu`,cz as `nazev-cesky`,en as `nazevanglicky`,original as `nazev-originalni`,delka as `delka`,rok_vydani as `datum-vydani`,csfd as `odkaz-csfd`,imdb as `odkaz-imdb`,popis as `popisfilmu`)) as xml from ttitul order by cz"); $row = $result->fetchall(); return $row; ** * Doplňování názvu filmů * @param <string> $var * @return <Array[][]> vícerozměrné pole * public function Autocomplete($var) { $result = null; $row = array(); if(dibi::isconnected()) { $result= dibi::query("select film_id as IDFILMU, cz as CZ, en as EN, original as ORIGINAL, to_char(substr(popis,0,50)) as POPIS from Matěj Trakal S t r a n a 6 20092010 R e v i z e 011

ttitul where lower(ttitul.cz) like lower('%".$var."%') or lower(ttitul.en) like lower('%".$var."%') or lower(ttitul.original) like lower('%".$var."%')"); $row = $result->fetchall(); return $row; Odpojení od databáze public function destruct() { try { dibi::disconnect(); catch (DibiException $e) { echo get_class($e), ': ', $e->getmessage(), "\n"; Matěj Trakal S t r a n a 7 20092010 R e v i z e 011

Kapitola 4: E-R Diagram Základní návrh databáze Oracle se postupně vyvinul do značně většího modelu, než se kterým se podle zadání a návrhu počítalo. Obrázek 2 Předpokládaný rozsah databáze Obrázek 3 Postup vývoje databázové struktury Matěj Trakal S t r a n a 8 20092010 R e v i z e 011

Obrázek 4 Téměř finální podoba struktury tabulek Obrázek 5 Finální podoba databáze Matěj Trakal S t r a n a 9 20092010 R e v i z e 011

Kapitola 5: Popis tabulek a jejich atributů TZanr zanr_id Number [PK] ID žánru filmu Zanr Number Textový popis žánru TTitulZanr film_id Number [PFK] ID žánru filmu zanr_id Number [PFK] ID titulu filmu TFormat_filmu formatfilmu_id Number [PK] ID formátu filmu format Varchar(30) [NN] Textový popis formátu filmu TFormat_titulku formattitulku_id Number [PK] ID formátu titulků format Varchar(30) [NN] Textový popis formátu titulků TJazyk jazyk_id Number [PK] ID jazyku filmu a titulků jazyk Varchar(20) [NN] Textový popis jazyku TTitulky titulky_id Number [PK] ID titulků filmu katalogove_cislo Number [FK] Katalogové číslo filmu titulky Varchar2(150) Název souboru titulků formattitulku_id Number [FK] ID formátu titulků jazyk_id Number [FK] ID jazyku titulků TJazyk_filmu katalogove_cislo Number [PFK] Katalogové číslo filmu jazyk_id Number [PFK] ID jazyku filmu TRole role_id Number [PK] ID role uživatelů Role Varchar(20) [NN] Textový popis role uživatelů TUzivatel Nick Varchar(30) [PK] Přezdívka uživatele password Varchar(260) [NN] Heslo uživatele (šifrované pomocí SHA1 + MD5) role_id Number [FK] ID role uživatelů Matěj Trakal S t r a n a 10 20092010 R e v i z e 011

TTitul film_id Number [PK] ID titulu filmu CZ Varchar2(50) Český název titulu EN Varchar2(50) Anglický název titulu Original Varchar2(50) [NN] Originální název titulu Csfd Varchar2(500) Odkaz na filmovou databázi ČSFD.cz Imdb Varchar2(500) Odkaz na filmovou databázi imdb.com rok_vydani Number(4,0) [NN] Rok vydání titulu Delka Number(3,0) [NN] Délka titulu Popis Varchar2(4000) Krátký popis titulu TAdresa adresa_id Number [PK] ID adresy půjčujícího Ulice Varchar2(3 [NN] Název ulice půjčujícího Cislo Number [NN] Číslo popisné PSC Number(5,0) [NN] PSČ Město Varchar2(30) Město půjčujícího (duplicitní údaj díky PSČ) TPujcujici adresa_id Number [FK] ID adresy půjčujícího Jmeno Varchar2(30) [NN] Jméno půjčujícího Prijmeni Varchar2(30) [NN] Příjmení půjčujícího email Varchar2(250) [NN] Email půjčujícího telefon Number Telefon půjčujícího Nick Varchar2(30) [PFK] Přezdívka uživatele, který patří k půjčujícímu TVypujcka vypujcka_id Number [PK] ID výpůjčky katalogove_cislo Number [FK] Katalogové číslo filmu datum_pujceni Date [NN] Datum vypůjčení filmu datum_vraceni Date Datum vrácení filmu Nick Varchar2(30) [FK] Přezdívka uživatele, který patří k půjčujícímu TFilmoteka katalagove_cislo Number [PK] Katalogové číslo filmu film_id Number [FK] ID titulu filmu formatfilmu_id Number [FK] ID formátu filmu hodnoceni Number Hodnocení filmu majitelem (hvězdičky) datum_pridani Date [NN] Datum přidání do filmotéky velikost Number Velikost filmu na disku [MB] umisteni Varchar(255) Volitelný údaj o tom, kde se film nachází Matěj Trakal S t r a n a 11 20092010 R e v i z e 011

Kapitola 6: Popis a syntaxe použitých databázových objektů Podkapitola 1: Funkce Funkce vracející celkový počet nevrácených filmů. create or replace function f_pocetnevracenychfilmu return number as pocet_pujcenych number; begin select count(*) into pocet_pujcenych from tpujcujici left join tvypujcka on tvypujcka.datum_vraceni is null where tvypujcka.nick = tpujcujici.nick order by tpujcujici.prijmeni; return pocet_pujcenych; end f_pocetnevracenychfilmu; -- select f_pocetnevracenychfilmu as NEVRACENYCH from dual; Vypíše celkový počet filmů v databázi. create or replace function f_pocettitulu return number as v_pocet number; begin select count(*) into v_pocet from ttitul; return v_pocet; end; -- select f_pocettitulu as POCETTITULU from dual; Podkapitola 2: Trigery Spouštěče pro automatické číslování primárních klíčů v tabulkách. create or replace trigger tformattitulku_id before insert on tformat_titulku for each row begin select sformattitulku_id.nextval into :new.formattitulku_id from dual; end; create or replace trigger ttitulky_id before insert on ttitulky for each row begin select stitulky_id.nextval into :new.titulky_id from dual; end; create or replace trigger tjazyk_id before insert on tjazyk for each row begin select sjazyk_id.nextval into :new.jazyk_id from dual; end; create or replace trigger trole_id before insert on trole for each row begin select srole_id.nextval into :new.role_id from dual; end; create or replace trigger tadresa_id before insert on tadresa for each row begin select sadresa_id.nextval into :new.adresa_id from dual; end; create or replace trigger tvypujcka_id before insert on tvypujcka for each row begin select svypujcka_id.nextval into :new.vypujcka_id from dual; end; create or replace trigger tfilm_id before insert on ttitul for each row begin select sfilm_id.nextval into :new.film_id from dual; end; create or replace trigger tzanr_id before insert on tzanr for each row begin select szanr_id.nextval into :new.zanr_id from dual; end; Matěj Trakal S t r a n a 12 20092010 R e v i z e 011

create or replace trigger tkatalogove_cislo before insert on tfilmoteka for each row begin select skatalogove_cislo.nextval into :new.katalogove_cislo from dual; end; create or replace trigger tformatfilmu_id before insert on tformat_filmu for each row begin select sformatfilmu_id.nextval into :new.formatfilmu_id from dual; end; Podkapitola 3: Indexy CREATE INDEX I_FILM_ID ON TTITUL (FILM_ID) CREATE INDEX I_KATALOGOVE_CISLO ON TFILMOTEKA (KATALOGOVE_CISLO) CREATE INDEX I_VYPUJCKA_ID ON TVYPUJCKA (VYPUJCKA_ID) CREATE INDEX I_TITULKY_ID ON TTITULKY (TITULKY_ID) Podkapitola 4: Sekvence Sekvence pro indexování tabulek autoincrement. CREATE SEQUENCE sformattitulku_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE stitulky_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE sjazyk_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE srole_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE sadresa_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE svypujcka_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE sfilm_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE szanr_id INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE skatalogove_cislo INCREMENT BY 1 START WITH 1 nomaxvalue; CREATE SEQUENCE sformatfilmu_id INCREMENT BY 1 START WITH 1 nomaxvalue; Podkapitola 5: Pohledy Pohled pro zobrazení počtu titulů v databázi. Vhodnější by bylo použití funkce. CREATE OR REPLACE FORCE VIEW movie_count ("POCET_FILMU") AS SELECT count(film_id) as pocet_filmu FROM ttitul; Pohled pro zobrazení počtu uživatelů v databázi. Vhodnější by bylo použití funkce, CREATE OR REPLACE FORCE VIEW users_count ("POCET_UZIVATELU") AS SELECT count(nick) as pocet_uzivatelu FROM tuzivatel; Podkapitola 6: Defaultní předpřipravená data pro fungování webové části * Přístupové role * INSERT INTO "ST22312"."TROLE" (ROLE) VALUES ('Visitor'); INSERT INTO "ST22312"."TROLE" (ROLE) VALUES ('Borrower'); INSERT INTO "ST22312"."TROLE" (ROLE) VALUES ('Administrator'); Pro získání hesla je třeba použít skriptu: Matěj Trakal S t r a n a 13 20092010 R e v i z e 011

<?php $password = nekriptované heslo ; echo sha1($password). md5(strlen($password));?> * Vytvoření základního administrátora s přístupem do administrace * INSERT INTO TUZIVATEL (NICK,PASSWORD,ROLE_ID) VALUES ('Admin','kriptované heslo',3); Podkapitola 7: Další operace nad databází * zjištění nevrácených výpůjček * select tpujcujici.jmeno as JMENO, tpujcujici.prijmeni as PRIJMENI, to_date(tvypujcka.datum_pujceni, 'DD.MM.RR') as DATUM_PUJCENI, ttitul.cz as CZ, ttitul.original as ORIGINAL from tpujcujici, tfilmoteka, ttitul left join tvypujcka on tvypujcka.datum_vraceni is null where tvypujcka.nick = tpujcujici.nick and tvypujcka.katalogove_cislo= tfilmoteka.katalogove_cislo and tfilmoteka.film_id=ttitul.film_id order by tpujcujici.prijmeni; * přidání uživatele * insert into tuzivatel (nick, password, role_id) values ('".$username."','".$password."','".$role."') * Automatické doplňování hledaného textu v databázi * select film_id as IDFILMU, cz as CZ, en as EN, original as ORIGINAL, to_char(substr(popis,0,50)) as POPIS from ttitul where lower(ttitul.cz) like lower('%".$var."%') or lower(ttitul.en) like lower('%".$var."%') or lower(ttitul.original) like lower('%".$var."%') * počet nevrácených filmů * select count(*) from tpujcujici left join tvypujcka on tvypujcka.datum_vraceni is null where tvypujcka.nick = tpujcujici.nick order by tpujcujici.prijmeni; * Ověření uživatele proti databázi * select role as ROLE, nick as USERNAME, password as PASSWORD from TUZIVATEL left join TROLE on TROLE.ROLE_ID=TUZIVATEL.ROLE_ID where NICK='".$username."' and PASSWORD='".$password."' Matěj Trakal S t r a n a 14 20092010 R e v i z e 011

Kapitola 7: Závěr Na této semestrální práci jsem si procvičil, oživil a naučil lépe využívat možnosti databázového serveru. Asi největší problém bylo navrhnout tabulky, zajistit konzistenci a propojení dat. Další problém nastal, při propojování databáze s PHP, jelikož jsem využil služeb Dibi se kterou jsem doposud nikdy nepracoval. Semestrální práce mi dala bohaté nově nabité znalosti pro další vývoj aplikací. Matěj Trakal S t r a n a 15 20092010 R e v i z e 011

Kapitola 8: Seznam obrázků OBRÁZEK 1 UML USE CASE DIAGRAM... 4 OBRÁZEK 2 PŘEDPOKLÁDANÝ ROZSAH DATABÁZE... 8 OBRÁZEK 3 POSTUP VÝVOJE DATABÁZOVÉ STRUKTURY... 8 OBRÁZEK 4 TÉMĚŘ FINÁLNÍ PODOBA STRUKTURY TABULEK... 9 OBRÁZEK 5 FINÁLNÍ PODOBA DATABÁZE... 9 Matěj Trakal S t r a n a 16 20092010 R e v i z e 011