Databázový manager pro IDE CodeLite Database manager for CodeLite IDE
Bc. Peter Janků
Diplomová práce 2011
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
4
ABSTRAKT Cílem této diplomové práce je vytvořit multiplatformní aplikaci pro práci se serverovými a souborovými databázemi. Aplikace umoţní manipulovat s daty a strukturou databází na základě SQL dotazů a umoţní vizualizaci databázové struktury pomocí ERD diagramů. Práce je rozdělena do dvou částí. Teoretická část uvádí popis základních výrazů a obsahuje úvod do problematiky. Další kapitoly obsahují přehled existujících nástrojů a základní popis pouţitých komponent a databázových serverů včetně vývojového nástroje CodeLite. V praktické části je uveden kompletní programový a uţivatelský manuál.
Klíčová slova: Databázový server, tabulka, pohled, ERD diagram, SQL, SQL skript
ABSTRACT The main aim of this thesis is to create cross-platform application for working with server base and file base databases. The application allows data manipulation and database structure manipulation on SQL commands base and it allows database structure visualization with ERD diagrams. The thesis consists of two parts. The theoretical part provides basic terms description and basic problem introduction. The next paragraphs include an overview of existing tools, basic description of the components and database servers including a description of the development tool CodeLite. The practical part the complete program and the user manual.
Keywords: Database server, table, view, ERD diagram, SQL, SQL script
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
5
Na tomto místě bych rád poděkoval vedoucímu mé diplomové práce panu Ing. Michalu Bliţňákovi, Ph.D. za vedení při práci a pomoc při vytváření výsledné aplikace. Dále děkuji celé své rodině, svým rodičům a přítelkyni a v neposlední řadě všem přátelům za pomoc a podporu v průběhu celého studia.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
6
Prohlašuji, ţe
beru na vědomí, ţe odevzdáním diplomové/bakalářské práce souhlasím se zveřejněním své práce podle zákona č. 111/1998 Sb. o vysokých školách a o změně a doplnění dalších zákonů (zákon o vysokých školách), ve znění pozdějších právních předpisů, bez ohledu na výsledek obhajoby; beru na vědomí, ţe diplomová/bakalářská práce bude uloţena v elektronické podobě v univerzitním informačním systému dostupná k prezenčnímu nahlédnutí, ţe jeden výtisk diplomové/bakalářské práce bude uloţen v příruční knihovně Fakulty aplikované informatiky Univerzity Tomáše Bati ve Zlíně a jeden výtisk bude uloţen u vedoucího práce; byl/a jsem seznámen/a s tím, ţe na moji diplomovou/bakalářskou práci se plně vztahuje zákon č. 121/2000 Sb. o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon) ve znění pozdějších právních předpisů, zejm. § 35 odst. 3; beru na vědomí, ţe podle § 60 odst. 1 autorského zákona má UTB ve Zlíně právo na uzavření licenční smlouvy o uţití školního díla v rozsahu § 12 odst. 4 autorského zákona; beru na vědomí, ţe podle § 60 odst. 2 a 3 autorského zákona mohu uţít své dílo – diplomovou/bakalářskou práci nebo poskytnout licenci k jejímu vyuţití jen s předchozím písemným souhlasem Univerzity Tomáše Bati ve Zlíně, která je oprávněna v takovém případě ode mne poţadovat přiměřený příspěvek na úhradu nákladů, které byly Univerzitou Tomáše Bati ve Zlíně na vytvoření díla vynaloţeny (aţ do jejich skutečné výše); beru na vědomí, ţe pokud bylo k vypracování diplomové/bakalářské práce vyuţito softwaru poskytnutého Univerzitou Tomáše Bati ve Zlíně nebo jinými subjekty pouze ke studijním a výzkumným účelům (tedy pouze k nekomerčnímu vyuţití), nelze výsledky diplomové/bakalářské práce vyuţít ke komerčním účelům; beru na vědomí, ţe pokud je výstupem diplomové/bakalářské práce jakýkoliv softwarový produkt, povaţují se za součást práce rovněţ i zdrojové kódy, popř. soubory, ze kterých se projekt skládá. Neodevzdání této součásti můţe být důvodem k neobhájení práce.
Prohlašuji,
ţe jsem na diplomové práci pracoval samostatně a pouţitou literaturu jsem citoval. V případě publikace výsledků budu uveden jako spoluautor. ţe odevzdaná verze diplomové práce a verze elektronická nahraná do IS/STAG jsou totoţné.
Ve Zlíně
……………………. podpis diplomanta
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
7
OBSAH ÚVOD ................................................................................................................................................ 8 I TEORETICKÁ ČÁST ........................................................................................................... 9 1 ÚVOD DO PROBLEMATIKY .......................................................................................... 10 1.1 ZÁKLADNÍ POJMY ........................................................................................................... 10 1.2 ROZDÍLY JEDNOTLIVÝCH DATABÁZÍ .............................................................................. 11 2 STÁVAJÍCÍ SOFTWAROVÁ ŘEŠENÍ ............................................................................ 12 2.1 MYSQL WORKBENCH ................................................................................................... 12 2.2 PGADMIN III................................................................................................................... 14 2.3 MS SQL SERVER MANAGEMENT STUDIO...................................................................... 16 3 POUŢITÉ DATABÁZOVE ENGINY ............................................................................... 19 3.1 MYSQL .......................................................................................................................... 19 3.2 POSTGRESQL ................................................................................................................. 20 3.3 SQLITE ........................................................................................................................... 22 4 POPIS POUŢITÝCH KOMPONENT A TECHNOLOGIÍ ............................................. 24 4.1 WXWIDGETS ................................................................................................................... 24 4.2 WXSHAPEFRAMEWORK .................................................................................................. 25 4.3 DATABASELAYER .......................................................................................................... 27 4.4 CODELITE ....................................................................................................................... 27 II PRAKTICKÁ ČÁST ........................................................................................................... 29 5 SOFTWAROVÁ DOKUMENTACE ................................................................................. 30 5.1 PŘEHLED ARCHITEKTURY .............................................................................................. 30 5.2 POPIS INTERNÍ DATABÁZOVÉ STRUKTURY ..................................................................... 32 5.3 POPIS A FUNKCE DATABÁZOVÉHO ROZHRANÍ APLIKACE ............................................... 35 5.4 TŘÍDA A ŠABLONY PRO GENEROVÁNÍ PŘÍSTUPOVÝCH TŘÍD........................................... 36 5.5 PŘEHLED TŘÍD GRAFICKÉHO ROZHRANÍ......................................................................... 37 6 UŢIVATELSKÁ DOKUMENTACE ................................................................................. 39 6.1 ÚVODNÍ OBRAZOVKA ..................................................................................................... 39 6.2 DBVIEWERPANEL .......................................................................................................... 40 6.3 PŘIPOJENÍ NA DATABÁZOVÝ SERVER ............................................................................. 41 6.4 ÚVOD DO ERD DIAGRAMŮ............................................................................................. 43 6.5 PRÁCE S ERD DIAGRAMEM ............................................................................................ 44 6.6 ZÁPIS STRUKTURY Z ERD DIAGRAMU DO DATABÁZE ................................................... 46 6.7 EDITOR SQL DOTAZŮ ..................................................................................................... 48 6.8 VYTVOŘENÍ PŘÍSTUPOVÝCH TŘÍD .................................................................................. 50 6.9 DALŠÍ DOPLŇKOVÉ FUNKCE ........................................................................................... 51 ZÁVĚR............................................................................................................................................ 52 ZÁVĚR V ANGLIČTINĚ ............................................................................................................. 54 SEZNAM POUŢITÉ LITERATURY .......................................................................................... 56 SEZNAM POUŢITÝCH SYMBOLŮ A ZKRATEK ................................................................. 58 SEZNAM OBRÁZKŮ ................................................................................................................... 59 SEZNAM PŘÍLOH ........................................................................................................................ 60
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
8
ÚVOD Jiţ od počátků počítačové techniky byl základním cílem vývoj zařízení, které by umoţnilo jednodušší, rychlejší a efektivnější zpracování informací – dat. První zařízení samozřejmě nebraly v úvahu moţnost ukládání těchto dat, ale zabývaly se pouze aktuálními vstupy a výstupy. Postupem času s vývojem a zjednodušováním technologií potřeba ukládání začala narůstat. Společně s touto tendencí stoupala potřeba pevné struktury uloţených dat a zjednodušení přístupu k datům z pohledu uţivatele. Pokud se na ukládání dat budeme dívat z pohledu programátora – uţivatele a zanedbáme technické aspekty datových úloţišť, můţeme jednoznačně pozorovat tendenci přiblíţit práci s databázemi reálnému ţivotu, jazyku a technikám známým z klasického softwarového programování. Data v rámci databází se začaly formovat do jednoduchých objektů – tabulek a vzájemně spojovat do logických struktur – relací. Jako jeden z milníků „zjednodušujícího“ směru můţeme vzpomenout vznik jazyka SEQUEL. Tento umoţňoval práci s relačními databázemi s vyuţitím angličtiny a strukturovaných dotazů. Právě z tohoto jazyka se postupem času vyvinul jazyk SQL, který se v několika modifikacích pouţívá dodnes. Dalším výrazným okamţikem bylo zformování softwarového inţenýrství společně s jazykem UML. Pomocí UML je moţné jednoduše modelovat programové struktury a jednoduše tak komunikovat s ostatními programátory a ostatními profesemi. I kdyţ UML nemá přímo definované objekty pro modelování datových struktur, lze pro vytváření ERD(entitně relačních diagramů) bez větších problémů vyuţít objekty a asociace Ve světě databází a databázového programování byla mimo výše uvedené podstatné okamţiky velká spousta jiných. Tato práce se snaţí pokračovat v tendenci zjednodušování a pokouší se vytvořit další kvalitní open-source aplikaci ulehčující správu databázových struktur, vizualizaci databází a přístup k nim. Za pomoci ERD diagramů, SQL dotazů a generování tříd pro jazyk C++, a to včetně reverse a forward engineeringu, se snaţí zjednodušit práci programátorům. Snaţí se umoţnit těmto lidem vytvářet databáze a pracovat s nimi za pomoci GUI a bez potřeby hlubších databázových znalostí.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
I. TEORETICKÁ ČÁST
9
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
1
10
ÚVOD DO PROBLEMATIKY
Tato kapitola obsahuje uvedení do problematiky relačních databází a vysvětlení základních pojmů týkajících se databází a databázových serverů. Uvedené definice jsou pouze stručným popisem významu v míře potřebné pro další části této práce.
1.1 Základní pojmy Databáze – úloţiště údajů, které jsou uloţeny a zpracovávány bez závislosti na aplikačních programech. Databáze zapouzdřují vlastní údaje a jednotlivé relační vztahy mezi databázovými prvky a objekty a také schémata popisující struktury údajů a integritní omezení.[1] Systém řízení báze dat (SŘBD) - jedná se o speciální software pro přístup k údajům v databázi. Uţivatel popřípadě aplikační program nemusí znát přesnou fyzickou strukturu dat, protoţe k údajům v databázi přistupují pomocí SŘBD. Komunikace klienta a SŘBD probíhá na základě jazyka SQL. [1] Databázový systém- je tvořen systémem pro řízení báze dat a databází Jazyk SQL – jazyk pro komunikaci s SŘBD. Jak jiţ bylo uvedeno v úvodu, vychází z jazyka SEQUEL. Snaţí se přiblíţit přirozenému jazyku (angličtině). SQL obsahuje dvě hlavní skupiny příkazů. Skupina DDL (Data Definition Langure) zahrnuje příkazy pro definování struktury databáze, vytváření databázových objektů, jejich změnu a rušení. Druhá skupina DML (Data Manipulation Language) obsahuje příkazy pro manipulaci s údaji, jejich výběr, vkládání a modifikaci. Mimo tyto hlavní skupiny lze některé speciální příkazy pro řízení provozu a údrţbu databáze zařadit do podmnoţiny řídících příkazů DCL. Specielní příkazy pro řízení transakcí je moţné také zařadit do skupiny TCC. [1] Databázová tabulka
(table) –
je základním databázovým objektem. Definuje
dvojrozměrnou matici dat uloţených v databázi. Obsahuje sloupce (atributy) – mnoţiny údajů stejného datového typu a řádky (záznamy) – kombinace sloupcových hodnot v tabulce. Údaje se nacházejí v jednotlivých průsečících řádků a sloupců. [1] Primární klíč – jednoznačný identifikátor kaţdého záznamu. Definuje se jako jeden atribut nebo kombinace atributů, které jednoznačně identifikují kaţdý řádek. Často se vyuţívá automaticky inkrementovaného celočíselného sloupce s názvem ID. [1]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
11
Cizí klíč – je sloupec, popřípadě kombinace sloupců, které jsou propojeny s primárním klíčem jiné tabulky. Slouţí k definici vztahů jednotlivých záznamů tabulek. [1] Databázový pohled (view) – lze definovat jako předpis pro vytvoření podmnoţiny dat z jedné nebo více tabulek. Pohled obsahuje vţdy jen předpis, ne samotné údaje. Údaje zůstávají v jednotlivých tabulkách. K pohledům lze přistupovat podobným způsobem jako k tabulkám, ale bez moţnosti editace dat v pohledu. [1] ERD diagram – reprezentuje grafické znázornění jednotlivých databázových objektů (entit) a jejich vztahů (relací). Vychází z UML ale nemá v něm přímou podporu. Lze však vyuţít objektů a asociací mezi objekty. [1]
1.2 Rozdíly jednotlivých databází Jazyk SQL byl v průběhu svého vývoje definován v několika standardech a s pokračujícím vývojem jazyka pokračuje i jeho standardizace. I přes to, ţe se jedná o velmi oblíbený jazyk a většina dodavatelů databázových systému vyuţívá jeho implementaci, ţádný z dostupných produktů přesně nedodrţuje definované standardy. Téměř kaţdý databázový systém vyuţívá základní jádro dialektu SQL jazyka a doplňuje jej o drobné modifikace. Výsledkem je určitá úroveň nekompatibility přístupu k jednotlivým databázím. [2] Nekompatibilita se projevuje především ve dvou místech. Prvním místem jsou sloupce (atributy) databázových tabulek. Jednotlivé databázové systémy vyuţívají vlastní sady datových typů. Do těchto sad jsou mnohdy zařazovány kromě typů odvozených od běţných programovacích jazyků (celá čísla, desetinná čísla, text, atd.) také speciální typy např. pro ukládání datových struktur, síťových adres či grafických objektů. Kromě rozdílů v typech sloupců vznikají i rozdíly v dalších upřesňujících vlastnostech. Pro příklad lze uvést rozdílnou implementaci automaticky inkrementovaných čísel. [2] Druhým místem znatelných rozdílů mezi jednotlivými databázovými systémy jsou systémové katalogy a manipulace s databázovou strukturou. Především při zpětném načítání parametrů databázových objektů vyuţívá kaţdý systém specifickou reprezentaci atributů a specifické modifikace dialektu jazyka SQL. [2] Většina rozdílů mezi databázovými systémy je dobře zdokumentována a pro běţného uţivatele přechod nepředstavuje velké obtíţe. Opačná situace je mezi aplikacemi pro správu databázových struktur, které v případě podpory více databázových systémů musí implementovat velkou sadu specifických změn. [2]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
2
12
STÁVAJÍCÍ SOFTWAROVÁ ŘEŠENÍ
V následujících kapitolách bude představeno několik málo nástrojů pro práci s databázemi a návrh databázové struktury. U kaţdého nástroje je uveden základní popis softwaru, popis prostředí nástroje a přehled jeho základních funkcí.
2.1 MySQL WorkBench Jedná se o software vyvíjený firmou Oracle zaměřený výhradně na práci s databázemi MySQL. WorkBench je očekávaným nástupcem projektu DBDesigner4 a je aktuálně dostupný ve verzi 5.2.33. Od verze 5.1 je MySQL WorkBench multiplatformní aplikací a je tudíţ dostupný nejen pro MS Windows, ale také pro Mac OS a různé distribuce linuxu. [4], [5] Aplikace existuje ve dvou edicích a to „Community Edition“ a „Standard Edition“. Komunitní verze je distribuována zdarma pod licencí GPL a zpřístupňuje základní moţnosti softwaru. Oproti tomu edice Standard je komerční verzí softwaru, která rozšiřuje a doplňuje paletu základních funkcí např. o validaci schémat, podporu bezpečnostních modelů, synchronizaci z a do existující databáze, nebo podporu pro vytváření HTML a textové dokumentace. [4], [5] Nástroj MySQL WorkBench je rozdělen do tří základních částí. První část je pro SQL vývoj, druhá pro datové modelování a další část pro administraci MySQL serveru. Při spuštění aplikace se jednotlivé části přidávají ve formě záloţek do hlavního okna. Kaţdá část můţe být spuštěna bez ohledu na zbývající součásti a to několikrát, např. pro různé projekty či databázové připojení. To umoţňuje uţivateli pracovat i na více částech projektu, popř. na více serverech, současně. Tato skutečnost můţe být výhodná např. při migraci databáze nebo dohledu nad databázovými servery. [4], [5] V části pro SQL vývoj jsou implementovány funkce, které byly dříve dostupné v MySQL Query Browseru. Tato část aplikace umoţňuje manipulovat s daty v databázi, analyzovat, testovat, spouštět a ladit SQL skripty nad existující databází. Další funkcí je moţnost zobrazení výsledku konkrétního SQL dotazu nad databází. Umoţňuje také zasahovat do struktury existující databáze. Tato část aplikace však pro svou funkci vyţaduje otevřené připojení na existující databázový server. [4], [5] Druhou částí programu je modul pro modelování databázových struktur. Tato část aplikace umoţňuje vytvářet modely a entitně relační diagramy (ERD) a to na základě stávající
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
13
databáze, SQL skriptů nebo plně manuálně bez jakéhokoliv základu. Základem ERD diagramu je plátno velikosti listu A4, na které lze umisťovat tabulky, pohledy a stored procedury. Jednotlivé prvky lze také provazovat pomocí cizích klíčů. Pro editaci parametrů jednotlivých prvků se otevře sada záloţek v dolní části ERD diagramu. Rozpracovaný ERD diagram lze synchronizovat se stávající databází, nebo vytvořenou strukturu kompletně zapsat na databázový server. [4], [5]
Obrázek 1 Prostředí aplikace MySQL WorkBench 5.2 Poslední část programu implementuje grafické rozhraní pro správu jednotlivých serverových instancí. V rámci tohoto modulu lze analyzovat zatíţení serveru, provádět jeho spouštění, zastavování a kompletní nastavení. Nedílnou součástí je také moţnost sledovat systémové logy a systémové proměnné databázového serveru. Dalším implementovaným prvkem je moţnost měnit na základě grafických dialogů obsah konfiguračního souboru serveru. Některé výše zmíněné funkce jsou však dostupné pouze při připojení na lokální instanci serveru, nebo jsou odvislé od oprávnění daného uţivatele. Část administrace také umoţňuje změnu oprávnění uţivatelů, kteří přistupují k serveru. V neposlední řadě lze v této části také nalézt funkci pro import a export databáze. V rámci této funkce lze vygenerovat SQL soubor obsahující veškerá data ve vybrané databázi v podobě SQL INSERT statementů, nebo takový soubor zpětně importovat do databáze. Import a export dat je doplněn o mnoţství nastavení definující výslednou podobu SQL statementů. [4], [5]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
14
Obrázek 2 Okno aplikace MySQL Workbench pro editaci ERD diagramů MySQL Workbench je obsáhlým databázovým nástrojem pro správu databází MySQL. Obsahuje velké mnoţství funkcí, které za pomoci obsáhlého grafického prostředí umoţní veškeré základní i pokročilé činnosti nad databází. Grafické prostředí je velmi příjemné, v některých okamţicích však ztrácí přehlednost, coţ společně s malou moţností modifikace rozloţení jednotlivých oken můţe vést k dezorientaci uţivatele. Nevýhodou softwaru také můţe být samostatný vývoj GUI na jednotlivých platformách, který způsobuje drobné rozdíly v rozloţení a funkci jednotlivých dialogů. Aplikace v průběhu testování také v některých případech vykazovala nestabilitu, která se projevovala jejími pády.
2.2 PgAdmin III PgAdmin III je administrační software určený pro správu databází PostgreSQL a jejich derivací. Software je vyvíjen a spravován teamem vývojářů databáze PosgreSQL a je šířen pod stejnojmennou licencí. Aktuálně poslední dostupná verze aplikace je v1.12.2. PgAdmin III je přímým následníkem pgAdmin II, který jiţ dále nebylo moţné vyvíjet kvůli omezením plynoucím z jeho architektury. Aplikace je vyvíjena v jazyce C++ za pomoci multiplatformních nástrojů wxWidgets. Je tedy dostupná pro MS Windows, Linux a také Mac OS. Díky jednotnému návrhu a vývoji, kdy existuje pouze jedna verze aplikace,
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
15
která se nativně překládá pro dané platformy, vyniká pgAdmin vysokou rychlostí a téměř totoţným uţivatelským rozhraním pod všemi zmíněnými platformami. [6]
Obrázek 3 Grafické rozhraní aplikace pgAdmin III, vlevo v prostředí Linux, vpravo v prostředí Windows
Aplikace je poněkud jednodušší a s menším mnoţstvím funkcí neţ MySQL Workbench popsaný v předchozí kapitole. Vzhledem k tomu, ţe neumoţňuje ţádnou offline činnost nad databází, je potřebné před započetím jakékoliv práce připojit aplikaci na databázový server. Je moţné souběţně udrţovat libovolný počet připojení. Pro kaţdé z nich se zobrazí v levé části hlavního okna stromová struktura s prvky obsaţenými na serveru. [6] Struktura konkrétního databázového stromu vytvořeného pro dané připojení přímo koresponduje se modelem závislostí a objektů v databázích PostgreSQL. Na základě jednotlivých databázových objektů můţe uţivatel jednoduše spouštět sadu nástrojů pro práci s databází, z nichţ některé jsou popsány v dalších odstavcích. Pomocí kontextových nabídek a následných dialogů lze také editovat a měnit strukturu jednotlivých databází a databázových objektů. [6] Prvním podstatným nástrojem, který lze uvést, je „Dotazovací nástroj“. Pomocí tohoto nástroje lze jednoduchým způsobem zasílat SQL dotazy do databáze a získávat jejich výsledky. Tuto funkci dále rozšiřuje o moţnost formátování SQL skriptu, jeho následné uloţení nebo moţnost grafického vytváření skriptu. Zajímavou funkcí je i vysvětlení dotazu, kdy aplikace analyzuje zadaný SQL dotaz a grafickým, nebo částečně textovým popisem znázorní způsob jeho vykonávání krok po kroku. Díky tomu lze SQL dotazy výkonově optimalizovat.[6]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
16
Obrázek 4 Okno aplikace pgAdmin III pro vysvětlení průběhu SQL dotazu Dalším zajímavým nástrojem je „Ladící nástroj“. Tento nástroj umoţňuje ladit pl/pgsql funkce v PostgreSQL, nebo také EDB-SPL funkce, uloţené procedury a balíky v EnterpriseDB. Ladění probíhá spouštěním a zastavováním skriptů a procedur v poţadovaných místech, analýzou stavu proměnných v těchto místech a krokováním, za účelem zjištění směru průchodu programu procedurou. Z dalších nástrojů lze ještě zmínit mříţku, která umoţňuje jednoduše měnit data ve vybrané tabulce, nebo také exportní nástroj, zálohovací nástroj, a jiné. [6] Lze říci, ţe pgAdmin III je plnohodnotným a praktickým nástrojem pro vývoj aplikací s databází typu PostgeresSQL, popř. jejich derivátů. Nástroj obsahuje veškeré moţnosti editace, kromě vytváření grafické reprezentace struktury databáze např. pomocí ERD diagramů. Nástroj také vyniká jednoduchým a přehledným rozloţením ovládacích prvků a funkcí. Jedinou nevýhodou mohou být sloţitější dialogy, které většinou obsahují mnoţství voleb v několika záloţkách, a proto můţe být obtíţné se v nich orientovat.
2.3 MS SQL Server Management Studio Dalším databázovým nástrojem je Microsoft SQL Management Studio. Tato aplikace, vyvíjená společností Microsoft, je nyní dostupná ve verzi 10.50.1600.1. Jejím primárním cílem je umoţnit efektivní správu databází MS SQL serveru a to v jednoduché a intuitivní formě, včetně všech dostupných moţností, nastavení rolí, oprávnění a editaci veškerých
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
17
databázových objektů. MS SQL Server Management Studio je dostupné pouze ve verzi pro MS Windows a to buď ve verzi Express, kterou je moţné stáhnout a instalovat samostatně, nebo v plné verzi instalované společně s instalací MS SQL serveru. Verze Express neobsahuje některé podrobnější nástroje a funkce pro správu serveru, analýzu výkonu apod. [12]
Obrázek 5 Uživatelské rozhraní aplikace MS SQL Server Management Studio Aplikace z pohledu uţivatelského rozhraní je rozdělena do několika základních panelů, nástrojových lišt a prostoru pro záloţky, ve kterém se otevírají jednotlivé editory. Rozloţení panelů lze libovolně měnit, včetně jejich velikosti nebo moţnosti automatického skrývání. Hlavním panelem aplikace je „Objekt Explorer“, v tomto panelu se zobrazují stromy databázových objektů pro jednotlivé připojení k serverům. Těchto připojení je moţné mít v jeden okamţik otevřeno několik. V rámci stromu se přehledně a strukturovaně zobrazují veškeré databázové objekty, které je moţné přímo editovat, modifikovat, popř. nad nimi otevírat potřebné editory. Druhým základním panelem je panel „Properties“, který přehledně v tabulce zobrazuje parametry aktuálně editovaného objektu. Parametry jsou rozloţeny dle kategorií, nebo abecedně a lze je přímo editovat. Pro editaci nabízí také moţnost vyuţití dalších dialogů, je-li to potřeba.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
18
Jak bylo zmíněno výše, v prostřední části okna aplikace je prostor pro záloţky, ve kterých se otevírají jednotlivé editory. Jedním z editorů je okno pro provádění SQL příkazů, obsahující prostor pro vkládání SQL skriptů a tabulku s výsledky. Dalším editorem je okno pro editaci tabulky, ve kterém je moţné měnit parametry tabulky, její sloupce a cizí klíče. Dále lze zmínit editory pro vytváření databázových diagramů (ERD diagramů), grafické skládání dotazů, modifikaci views a další. MS SQL Server Management Studio obsahuje také několik zajímavých funkcí, např. moţnost krokování SQL skriptů, nebo jejich podrobnou analýzu. V rámci analýzy SQL skriptu umoţňuje aplikace grafické zobrazení jednotlivých fází provádění skriptu, a to včetně podílu časové náročnosti dané části v rámci celého skriptu. [12] Aplikace je celkově velmi robustní a přehledná. Umoţňuje uţivateli efektivně pracovat s databázemi a to ve všech fázích návrhu cílového softwaru, včetně následné údrţby databáze. Jedinou nevýhodou můţe být občasný problém se synchronizací či zápisem ERD diagramů do databázové struktury. Aplikace v některých případech odmítne tuto akci provést z důvodů sloţitější struktury databáze, různých vazeb a samotné editace.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
3
19
POUŢITÉ DATABÁZOVE ENGINY
Tato část obsahuje základní přehled a charakteristiku databázových serverů, vyuţívaných v praktické části práce.
3.1 MySQL MySQL patří mezi řadu velmi populárních serverových databází. Je šířena na základě dvou licencí, a to buď speciální komerční licencí ve třech variantách produktu, nebo volná komunitní verze pod licencí GPL. Hlavním rozdílem mezi komerční a komunitní verzí je podpora 24/7 a některé pokročilejší nástroje pro správu dostupné v rámci komerční verze. Aktuálně poslední stabilní verze databáze je 5.5.11. MySQL je multiplatformní a lze ji nainstalovat na systémy MS Windows, Linux, Mac OS, Solaris a další. Databáze MySQL je především rozšířená mezi webovými vývojáři, lze ji však efektivně nasadit i pro desktopové aplikace s velkým zatíţením, popř. jako embedded databázi pro jiné programy. Vzhledem k tomu, ţe MySQL bylo od počátku vyvíjeno především s důrazem na rychlost, některé pokročilejší funkce a techniky, známé z jiných databázových serverů, byly implementovány poměrně nedávno v posledních verzích. Jedná se např. o views, triggers nebo stored procedures. [7], [8]
Obrázek 6 Architektura MySQL Serveru [8]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
20
Zajímavým prvkem MySQL je její architektura. Server je rozdělen do tří základních vrstev, které spolu navzájem komunikují a umoţňují velkou modularitu celého systému. Grafické znázornění struktury je zobrazeno na obrázku 6. V první vrstvě se nachází „Connection pool“, coţ je část serveru zabývající se kontrolou a spravováním připojení na databázi. Tento blok obsahuje části pro autentizaci, kontrolu, limitování připojení a další potřebné funkce pro komunikaci. V prostřední vrstvě serveru vystupuje samotné jádro databázového systému, které obsahuje mimo jiné SQL interface, parser, optimizer, cache a další části, potřebné pro chod serveru. V rámci prvních dvou vrstev také funguje část serveru umoţňující ovládání a kontrolu celého systému, včetně jeho zálohování, obnovení a dalších funkcí. Ve spodní vrstvě systému se nachází jednotlivé „Stored engines“, coţ jsou komponenty, zabývající se ukládáním dat na fyzickou vrstvu serveru, tedy do souborového systému. Jádro serveru s komponentami komunikuje pomocí jednoduché sady API funkcí, čímţ se skrývají rozdíly v ukládání dat. [7], [8] Díky této architektuře a oddělení Stored enginů lze kaţdou databázi přizpůsobit konkrétní aplikaci a konkrétním poţadavkům. Pro příklad, ne kaţdá aplikace pouţívá a poţaduje transakce nebo jednotlivé aplikace mohou vyuţívat jiný systém indexace a podobně. Pouţití různých Stored enginů a optimalizací poţadavků aplikace lze dosáhnout vyššího výkonu celého systému. [7], [8] Mezi nejpouţívanější Stored enginy v MySQL patří především MyISAM. Tato komponenta kaţdou tabulku ukládá do dvou souborů - souboru datového, obsahujícího veškeré řádky tabulky a souboru indexového. Jak jiţ z předchozího vyplývá, MyISAM podporuje indexaci, uzamykání záznamů a další funkce. Jako další lze zmínit např. InnoDB, coţ je stored engine navrhnutý především pro zpracování velkého mnoţství malých transakcí. InnoDB podporuje také cizí klíče, uzamykání na úrovni databázových řádků a jiné. Kromě dvou výše uvedených Stored enginů je moţné pouţít další specifické komponenty, jejichţ přesný popis lze nalézt v dokumentaci MySQL serveru.[7]
3.2 PostgreSQL PostgreSQL je další velmi rozšířenou open-source serverovou databází. Její vývoj začal jiţ v roce 1986 ještě jako Postgres. Postgres byl nástupcem systému Ingres a jeho vývoj probíhal převáţně za pomoci profesorů a studentů vysokých škol. V průběhu svého vývoje prošel PostgresSQL značnými změnami a vyvinul se v robustní databázový systém,
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
21
vyznačující se velkou stabilitou. Aktuálně nejnovější dostupná verze nese označení 9.0.3. [9]
Obrázek 7 Logo databázového systému PostgreSQL [9] Databáze PostgresSQL je šířena pod speciální licencí „PostgreSQL License“, která umoţňuje bezplatné neomezené pouţívání, modifikaci a šíření tohoto software, a to jako open-source nebo clouse-source aplikaci. Server PosgreSQL je multiplatformní a lze jej instalovat na Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) a Windows. Implementace SQL v tomto databázovém serveru striktně odpovídá standardu ANSISQL:2008. PostgreSQL plně podporuje poddotazy (SQL dotazy v rámci klauzule FROM), nebo také transakce. Integritu dat lze zajistit primárními klíč, cizími klíči a dalšími omezeními. Databázový server také obsahuje plně relační systémový katalog, který podporuje vytváření vícenásobných schémat v rámci jedné databáze. Tento SQL server také podporuje velké mnoţství indexačních a ukládacích metod včetně B-tree, R-gree a GiST. GiST (Generalized Search Tree) indexování je systém přinášející velké mnoţství řadících a vyhledávacích algoritmů. GiST zprostředkovává interface, pomocí kterého lze vytvářet libovolné uţivatelské datové typy společně s novými metodami pro rozšíření dotazovacích metod. Tím lze umoţnit efektivní vyhledávání a řazení uţivatelsky definovaných typů a to i za pouţití klasických metod. (B-tree, R-tree, …) [9] Jako další uţitečné funkce lze uvést podporu pro zasílání událostí a vyuţívání triggerů. PostgreSQL také podporuje interní „Stored Procedures“, které lze psát v různých jazycích. Podporovány jsou např. Java, Perl, Python, Ruby, Tcl, C/C++, nebo vlastní jazyk PL/pgSQL. Stored procedury a triggery lze také psát v jazyce C a ve formě knihoven je
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
22
načítat přímo do PostgreSQL databáze. Lze tak jednoduše rozšířit velkou sadu jiţ připravených knihoven pro matematické, agregační a další funkce. Díky všem výše zmíněným funkcím můţe PostgreSQL také nabídnout řadu speciálních datových typů, umoţňujících ukládání geometrických dat a tvarů, síťových adres nebo také např. ISBN/ISSN údajů. [9] Na závěr lze říci, ţe PostgreSQL je silným relačním databázovým systémem, vyuţívajícím mnoho moderních funkcí. Drobnou nevýhodou můţe však být občasná nestabilita verze pro MS Windows, o níţ se lze často dočíst na uţivatelských fórech.
3.3 SQLite Na rozdíl od obou předchozích serverových databází pracujících stylem klient-server, SQLite je databázová knihovna implementující samostatný transakční SQL databázový engine. Tento engine nevyţaduje ţádné servery ani další nastavení. Díky tomu je SQLite ideálním klientem na vestavěný databázový systém, zprostředkovávající výhody transakčních databází jednoduchým aplikacím bez nutnosti práce v síti.[10]
Obrázek
8
Logo
databázové
knihovny SQLite [10] SQLite je kompletně multiplatformní, lze ji přeloţit jak pod MS Windows, tak pod Linux či Unix systémy. Je moţné ji stáhnou i v předkompilovaných knihovnách a to mimo jiné i pro .NET. Aktuálně poslední verzí dostupnou na oficiálních internetových stránkách je verze 3.7.6.1. Zdrojové kódy dle slov autorů nejsou ţádným způsobem licencované a jsou volně dostupné. [10] Jak bylo psáno výše, SQLite je vestavný databázový engine, který neobsahuje ţádnou serverovou část. Veškeré data čte a zapisuje přímo ze souborového systému. Kompletní databáze je pak včetně tabulek, views, triggerů a dalších uloţena pouze v jednom databázovém souboru. Tento soubor je navíc bez omezení plně přenositelný mezi platformami. Základní myšlenkou vývoje SQLite tedy není nahradit velké databázové
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
23
systémy např. Oracle apod., ale nahradit klasické zápisy dat do souboru metodou „fopen()“. Další nespornou výhodou je malá velikost této databázové knihovny. Při vhodném nastavení překladače lze dosáhnout velikosti niţší neţ 300kB a to při podpoře všech databázových funkcí. Knihovna také můţe fungovat s minimálním zásobníkem (4kB) a minimálním mnoţstvím paměti (100kB). Díky tomu lze SQLite vyuţít i v malých embedded systémech jako jsou MP3 přehrávače nebo inteligentní mobilní telefony. I přes tyto minimální nároky podporuje SQLite kompletní sadu databázových nástrojů, včetně indexů, cizích a primárních klíčů, transakcí, atd. SQLite je vyvíjen mezinárodní skupinou programátorů, kteří se zabývají vývojem na plný úvazek. Vzhledem k tomu, ţe projekt SQLite je podporován velikými společnostmi a projekty, je kladen i velký důraz na jeho testování. Před kaţdým vydáním nové verze projde knihovna kompletním testováním, které se snaţí ověřit a otestovat veškeré její funkce. [10] Na závěr lze říci, ţe SQLite je velmi zajímavým způsobem vyuţití relačních databází a také velmi ţivotaschopným projektem. Tento fakt potvrzuje i zájem takových společností, jako je např. Adobe, Nokia, Oracle a další.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
4
24
POPIS POUŢITÝCH KOMPONENT A TECHNOLOGIÍ
V dalších kapitolách je uveden přehled komponent a nástrojů, které byly pouţity pro vytvoření praktické části. Jedná se především o multiplatformní knihovnu wxWidgets, komponenty wxShapeFramework a DatabaseLayer, a vývojový nástroj CodeLite.
4.1 wxWidgets wxWidgets je multiplatformní knihovna umoţňující programátorům vytvářet aplikace pro MS Windows, Linux, MacOS a některé mobilní platformy jako např. Windows Mobile, IPhone SDK a další. Projekt této multiplatformní knihovny začal Julian Smart na University of Edinburgh v roce 1992, a byl původně určen pouze pro vyvíjení aplikací přenositelných mezi Windows a Unix. Postupem času se mnoţství programátorů pracujících na projektu znásobilo a vznikly verze pro další platformy zmíněné výše. Aktuální verze wxWidgets je ve stabilní verzi 2.8.12 a v testovací verzi 2.9.1. wxWidgets je šířena pod speciální licencí „wxWidgets Licence“, coţ je v podstatě licence L-GPL s výjimkou toho, ţe odvozené díla v binární formě mohou být distribuována libovolně dle autorova uváţení. Díky tomu lze pomocí wxWidgets vytvářet jak aplikace šířené pod licencí GPL, tak komerční aplikace. Knihovna wxWidgets zpřístupňuje programátorovi sadu API funkcí, pomocí kterých lze vytvořit atraktivní GUI, kdy na kaţdé platformě jsou vyuţívány nativní prvky. Díky tomu lze nalinkováním příslušné knihovny a vyuţitím příslušného kompilátoru jednoduše přizpůsobit aplikaci danému prostředí. Mezi hlavní výhody wxWidgets mimo jiné patří velké mnoţství grafických prvků, které obsahují pokročilé grafické kontroly. Lze zmínit např. wxTreeCtrl zobrazující kořenovou strukturu textu s bitmapovými obrázky, wxNotebook pro umisťování panelů do záloţek, komponenty pro podporu MIDI, dynamickou změnu rozloţení panelů, a jiné.[11] Další výhodou je velmi silný systém událostí, kdy události lze přiřazovat buď staticky při kompilaci, nebo dynamicky v průběhu běhu aplikace. Lze také vytvářet vlastní, uţivatelsky definované události. Zajímavostí je také soustava UI událostí, které vznikají při aktualizaci uţivatelských prvků a pomocí kterých lze adaptivně měnit obsah a stav jednotlivých grafických prvků. Zajímavá je také podpora konfiguračních souborů, kdy lze pomocí stejné sady funkcí vyuţívat .ini soubory, registry Windows, nebo klasické soubory pro uloţení nastavení
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
25
aplikace. Další uţitečná součást je podpora síťového programování nebo podpora HTML. Pomocí wxWidget lze také psát aplikace vyuţívající OpenGL nebo např. databáze. [11] wxWidgets je velmi silným nástrojem nejen pro programátory C++, pro které byla primárně určena, ale také pro programátory vyuţívající Python (wxPython). Také díky propracované dokumentaci a podpoře lze říct, ţe wxWidgets je velmi silným nástrojem pro vytváření GUI při zachování maximální moţné jednoduchosti a přístupnosti.
4.2 wxShapeFramework wxShapeFramework (wxSF) je softwarová knihovna rozšiřující moţnosti wxWidgets o schopnost vytvářet a manipulovat s grafickými objekty. Je vyvíjena pod licencí „wxWidgets licence“ a je tedy dostupná pro tvorbu aplikací šířených pod licencí GPL i pro tvorbu komerčních aplikací. Poslední aktuálně dostupná verze je 1.11.[12]
Obrázek 9 Ukázková aplikace využívající wxShapeFramework [12] Základní myšlenkou knihovny je zpřístupnit grafické plátno, na které bude moţné umisťovat předdefinované grafické objekty (shapes) a umoţnit jednoduchou základní manipulaci s těmito objekty a jejich správu. Příkladem pouţití můţou být aplikace modelující technologické procesy, CASE nástroje a jiné. [12]
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
26
Obrázek 10 Logická struktura komponenty wxShapeFramework [12] Jak bylo naznačeno výše, základem frameworku je třída wxSFShapeCanvas, která reprezentuje grafické plátno, na které lze vkládat grafické objekty. S třídou wxSFShapeCanvas spolupracuje třída wxSFShapeManager, zajišťující správu grafických objektů umístěných na plátně. Grafické objekty lze vyuţít základní, jiţ obsaţené ve frameworku a jejich kombinace. Je moţné také vytvořit vlastní objekty. Různé grafické prvky umístěné na plátně je moţné spojovat za pomoci čar s různou geometrií a zakončením. Základní výhodou tohoto frameworku je zapouzdření velkého mnoţství funkcí, které velmi zjednodušují práci s daným nástrojem. Framework sám o sobě implementuje širokou řadu událostí a umoţňuje mimo jiné pohyb a změnu velikosti grafických objektů, změnu měřítka plátna, ukládání vytvořeného obrazce ve formě obrázku, nebo serializovaných dat. V nabízených moţnostech je i přímý tisk obsahu plátna. V posledních verzích přibyla i funkce autorouting, která je schopná přeskupit grafické objekty dle předem definovaných pravidel. [12] Vzhledem k tomu, ţe většinu funkcí wxSF se lze modifikovat dle potřeby uţivatele, je tento framework výborný nástroj doplňující základní funkce wxWidgets. Výhodou tohoto nástroje je také neustálý vývoj, kdy jsou průběţně opravovány nalezené bugy a přibývají různé funkce.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
27
4.3 DatabaseLayer Pro přístup k databázím ve wxWidgets byl dříve vyuţíván objekt wxODBC. Jeho podpora však byla ukončena a od verze 2.9 jiţ není zařazen v klasické distribuci wxWidgets. Místo něj lze vyuţít knihovnu Debea, která byla naportována do wxWidgets jako wxDebea. Další moţností je vyuţít komponentu DatabaseLayer. Jedná se o komponentu, která byla vyvíjena dříve pro verze wxWidgets 2.5 a 2.6. Lze ji však vyuţít i pro tvorbu aplikací ve verzi 2.8. DatabaseLayer zprostředkovává databázový adaptér podobný JDBC (ale pouze se základními funkcemi). Pomocí tohoto adaptéru lze jednoduše komunikovat s databází, zasílat dotazy do databáze a získávat výsledky těchto dotazů. Lze také získávat základní informace o struktuře databáze. Jednotlivé činnosti mohou být prováděny nad databázemi SQLite3, Firebird, MySQL, Postgresql, a to prostřednictvím jednotného C++ rozhraní. Řada podporovaných databází můţe být libovolně doplněna odprogramováním příslušného adaptéru. [14] I přes to, ţe vývoj této komponenty nepokračuje, je plnohodnotným doplňkem wxWidgets a lze ji bez problémů vyuţít pro vytváření aplikací přistupujících k databázi.
4.4 CodeLite CodeLite je vývojovým nástrojem pro vytváření programů v jazyce C++. Umoţňuje jednoduché vytváření programů, jejich kompilaci a debutování. Je šířen pod licencí GPLv2 s výjimkou pro paginy, které mohou být doplňovány v rámci libovolné licence. Aplikace je aktuálně dostupná ve stabilní verzi 2.10.0.4778. Pro vytváření uţivatelského prostředí aplikace CodeLite bylo vyuţito multiplatformní knihovny wxWidgets. Tento vývojový nástroj je tedy moţné provozovat na MS Windows, Linux i Unix. I přesto, ţe je CodeLite vyvíjen jako open-source, nabízí velkou řadu pokročilých funkcí. Mimo téměř samozřejmého zvýrazňování syntaxe lze například jednotlivé projekty spojovat do rozsáhlejších bloků (workspace), při překladu se dá vyuţít propracované grafické rozhraní debuggru. Editor zdrojových kódů také obsahuje kvalitní a rychlý systém doplňování kódu a mnoho dalších uţitečných funkcí. [15] Architektura aplikace je stavěna tak, ţe aplikaci lze jednoduše doplňovat o různé zásuvné moduly (pluginy). Jiţ v základní distribuci je obsaţena řada doplňků usnadňujících práci. Mimo jiné aplikace obsahuje doplněk pro automatické formátování zdrojových kódů nebo
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
28
např. doplněk pro spouštění aplikace wxFormBuilder. Uţitečným pomocníkem je také plugin pro správu SVN repozitářů, díky kterému lze přímo z vývojového nástroje řídit, přidávat, mazat či kontrolovat změny ve zdrojových souborech. Je moţné také přímo provádět update lokální kopie či zasílat změny na SVN server. V posledních verzích CodeLite také přibyl plugin pro správu Git repozitářů a mnoho dalších. [15] CodeLite je vynikajícím vývojovým nástrojem. Jeho velkou výhodou je také aktivní vývoj a poměrně velká podpora odborné veřejnosti zabývající se vývojem aplikací na bází knihovny wxWidgets. V tuto chvíli je také vyvíjeno mnoho dalších doplňků, které nejspíše v brzké době rozšíří jiţ tak bohaté moţnosti tohoto nástroje.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
II. PRAKTICKÁ ČÁST
29
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
5
30
SOFTWAROVÁ DOKUMENTACE
V rámci praktické části práce vznikla aplikace s názvem wxDbExplorer ve dvou formách, a to ve formě samostatné aplikace a ve formě pluginu pro IDE CodeLite. Obě formy aplikace jsou téměř totoţné a obsahují téměř identické uţivatelské rozhraní. Drobné rozdíly jsou patrné pouze v částech, kde bylo nutné integrovat plugin do výše zmíněného nástroje. Následující části práce popisují programovou architekturu aplikace, uvádí popis vnitřní struktury a pouţité postupy a technologie.
5.1 Přehled architektury Architektura aplikace wxDbExplorer byla navrhnuta jako třívrstvá. Jako její základ byla vybrána komponenta DatabaseLayer. Obecný popis této komponenty lze nalézt v teoretické části práce. Základem DatabaseLayeru je stejnojmenná třída, která reprezentuje univerzální rozhraní pro komunikaci s databází, otevření spojení, zasílání SQL dotazů do databáze a získávání jejich výsledků. Toto rozhraní je tvořené převáţně virtuálními třídami. Pro připojení na konkrétní databázi obsahuje DatabaseLayer specifické třídy,
implementující
výše
zmíněné
rozhraní.
Těmito
třídami
jsou
např.
MysqlDatabaseLayer, PostgresDatabaseLayer nebo SqliteDatabaseLayer (mimo tyto třídy vyuţívané v wxDbExploreru obsahuje také třídy pro další servery, které je moţné vyuţít pro případné rozšíření). DatabaseLayer obsahuje i třídy pro správu výjimek a jiné. Tyto však nejsou důleţité pro popis základní architektury. Kompletní popis všech tříd a funkcí obsaţených v DatabaseLayeru můţeme najít v jeho dokumentaci. Nad vrstvou DatabaseLayeru se nachází vrstva „databázového rozhraní“, obsahující dvě základní rozhraní – IDbAdapter a IDbType (abstraktní třídy). Cílem této vrstvy je implementovat a sjednotit rozhraní pro práci s databázovou strukturou. Kaţdá z těchto abstraktních tříd je implementována pro daný typ podporované databáze. Nalezneme zde tedy MysqlDbAdapter a MysqlDbType, PostgresDbAdapter a PostgresDbType, a také SqliteDbAdapter a SqliteDbType. Třídy odvozené z IDbType definují rozdílné vlastnosti a SQL reprezentaci jednotlivých databázových typů v rámci SQL serverů. Třídy odvozené z IDbAdapter zapouzdřují veškerou specifickou práci s databázovými strukturami, jejich načítání nebo také generování specifických změnových SQL dotazů. Pro svou činnost vyuţívají interní schémata a katalogy databázových serverů. Tyto třídy také umoţňují sjednocení vytváření
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
31
připojení na jednotlivé databázové servery (vyuţívají konkrétní třídy DatabaseLayeru). Přesný popis těchto tříd a jejich funkce obsahuje kapitola 4.3.
Obrázek 11 Grafické zobrazení architektury a základních tříd wxDbExploreru V poslední třetí vrstvě aplikace se nachází veškeré další třídy potřebné pro funkci aplikace. Aţ na několik málo výjimek nerozlišují mezi jednotlivými databázovými servery a pracují na základě univerzálních rozhraní z předchozí vrstvy. Výjimku tvoří pouze dialog pro připojení na databázi, který obsahuje záloţku se specifickými údaji pro kaţdý databázový server a dialog pro vytvoření prázdného ERD diagramu, který rovněţ obsahuje samostatnou volbu pro kaţdý databázový server. Specifické jsou také třídy pro ukládání historie databázových připojení v rámci připojovacího dialogu. Jak jiţ bylo naznačeno výše, v této třetí vrstvě aplikace se nachází blok tříd grafického rozhraní společně s komponentami wxScintilla a wxShapeFramework. Pro vykreslování ERD diagramů je zde blok tříd graficky reprezentujících jednotlivé databázové objekty. Tyto
třídy vycházejí
ze
základních
grafických
objektů
(shapes)
komponenty
wxShapeFramework a starají se o vykreslování tabulek, views a spojení mezi nimi v rámci ERD diagramů. Také je zde blok obsahující obecné třídy databázových objektů. Pomocí těchto tříd se vytváří v aplikaci otisk reálné databázové struktury a třídy jsou zároveň
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
32
základními nositeli informací o databázových objektech. Přesný popis tříd se nachází v následující kapitole. Do poslední skupiny tříd v rámci třetí vrstvy wxDbExploreru patří soustava pomocných tříd. Tyto třídy zapouzdřují některé sloţitější činnosti, pomocné nástroje, nebo se také jedná o speciální transportní třídy pro přenos informací v různých částech aplikace. Patří sem například třída DnDTableShape, coţ je transportní třída pro přenášení objektů v rámci Drug and Drop. Pro uchování ukazatelů na objekty v rámci grafického stromu databází se vyuţívá třídy dbItem. Můţeme sem také zařadit třídu dbConnection udrţující informaci o jednom konkrétním spojení v rámci kořenové struktury databází, nebo třídu DumpClass určenou pro export dat z databáze do souboru ve formě SQL statementů. Přesný popis všech tříd naleznete umístěný na přiloţeném cd nebo na oficiálních stránkách projektu.
5.2 Popis interní databázové struktury Pro efektivní práci s databázovou strukturou je ve wxDbExploreru vytvořena soustava tříd, reprezentující tuto databázovou strukturu. Tyto třídy spojené do stromové struktury vytvářejí aplikační otisk reálné databázové struktury. Jsou vyuţívány pro zobrazování a procházení struktury databáze nebo také pro generování ERD diagramů a práci s nimi. Veškeré třídy v této struktuře dědí od objektu xsSerializable, coţ je základní objekt xml serializeru vestavěného v komponentě wxSF (tento lze vyuţít i samostatně jako wxXmlSerializer). Díky tomu je celá databázová struktura serializovatelná. Této vlastnosti vyuţívá funkce pro uloţení ERD diagramu do xml souboru. Makra pouţívaná pro implementaci xsSerializable také zároveň implementují RTTI pro kaţdou třídu a lze tedy v aplikaci vyuţívat moţnosti dynamického přetypování. Kaţdá takto vytvořená třída také získá funkci Clone(), pomocí které lze vytvořit identickou kopii objektu a schopnost být rodičem dalším prvkům typu xsSerializable. Takto lze vytvářet libovolně rozvětvené stromové struktury.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
33
Obrázek 12 Logická struktura komponenty wxXmlSerializer [16] Základním prvkem databázové struktury je třída Database. Tato třída reprezentuje jednu konkrétní databázi umístěnou na serveru. V rámci členských proměnných jsou uloţeny informace o názvu databáze a ukazatel na příslušný IDbAdapter. K třídě Database v rámci wxDbExploreru se připojují objekty typu Table nebo typu View. Třída View reprezentuje stejnojmenný databázový objekt View – pohled. Obsahuje tři základní atributy a to název pohledu, název rodičovského prvku - databáze a SQL dotaz, na základě kterého se získává výsledek pohledu. View také obsahuje ukazatel na příslušný IDbAdapter. Další třídou v databázové struktuře je třída Table. Tato třída představuje jednu konkrétní databázovou tabulku. Mezi základní atributy třídy patří název tabulky, název rodičovského prvku – Database a opět ukazatel na odpovídající IDbAdapter. Na třídu Table se ještě připojují instance třídy Column nebo třídy Constraint. Column je třídou odpovídající jednomu sloupci tabulky. Tato třída mimo obvyklé atributy s názvem sloupce, názvem rodiče – Table a odkazu na IDbAdaptér obsahuje atribut typu IDbType. Přes tento ukazatel se lze dostat ke konkrétnímu databázovému typu sloupce, který mimo názvu typu obsahuje i upřesňující parametry (velikost, parametr not null a další).
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
34
Obrázek 13 Diagram vnitřní databázové struktury Třída Constraint popisuje jednu omezující podmínku platnou pro danou tabulku. V aktuální verzi aplikace můţe být Constraint buď primárním klíčem, nebo cizím klíčem. Constraint obsahuje kromě atributu definujícího typ omezení i atributy pro název lokálního sloupce, název referenčního sloupce, název referenční tabulky a typ akce, která se má provést při provedeni databázových akcí Update a Delete nad referenční tabulkou.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
35
5.3 Popis a funkce databázového rozhraní aplikace
Obrázek 14 Diagram tříd databázového rozhraní Jak jiţ bylo zmíněno v předchozích kapitolách, prostřední vrstva aplikace obsahuje databázové rozhraní, coţ je kolekce dvou abstraktních tříd IDbAdapter a IDbType, a sady odvozených tříd pro jednotlivé pouţívané typy databázových serverů. Tyto třídy implementují veškerou funkcionalitu přístupu k databázové struktuře včetně ošetření specifických vlastností kaţdého databázového serveru. IDbType je jednodušší a menší virtuální třídou z obou zmíněných. Jejím základním cílem je sjednotit rozdíly v jednotlivých databázových typech pouţívaných v rámci jednoho databázového serveru, a to včetně generování různých součástí SQL statementů týkajících se databázových typů. V rámci IDbAdapteru je nutné definovat konkrétní instanci této třídy pro kaţdý typ vyuţívaný v daném databázovém serveru. IDbType obsahuje sadu atributů, kdy je ke kaţdému atributu přiřazena soustava tří metod. Kromě klasických metod Get pro získání hodnoty a Set pro nastavení je zde metoda Have (např. GetSize(), SetSize(), HaveSize()). Metoda Have slouţí k získání informace, zda pro konkrétní databázový typ je atribut platný. Například databázový typ VARCHAR v rámci
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
36
MySQL nemůţe obsahovat atribut AutoIncrement. Nastavení platných atributů probíhá pomocí příznaků PropertyFlags definovaných v rámci třídy IDbType. Posledním zajímavým atributem v rámci IDbType je atribut UniversalType. Značí příslušnost konkrétního databázového typu k sadě obecných databázových typů pouţívaných v wxDbExplorer pro typové konverze mezi různými databázovými servery. Rozsáhlejší virtuální třída IDbAdapter sjednocuje zbylé části práce s databázovou strukturou. Obsahuje procedury pro načítání jednotlivých databázových objektů z databázových serverů. Toto načítání je specifické pro kaţdý typ databáze a vychází přímo z databázových schémat a katalogů daného serveru. V další sadě procedur jsou zahrnuty funkce pro vytvoření specifických SQL dotazů a jejich částí. Tyto funkce vracejí textové řetězce s konkrétními SQL dotazy na základě reálných databázových objektů konstruované správnou syntaxí platnou pro daný typ databázového serveru. Poslední sada funkcí obsahuje metody pro práci s databázovými typy. Mezi těmito funkcemi jsou metody pro získání kompletního seznamu podporovaných databázových typů, pro získání konkrétní třídy databázového typu na základě různých kritérií a také metoda pro parsování typového řetězce. Tato metoda se vyuţívá při načítání sloupečků tabulek v případě, ţe databázový server ukládá datové typy ve formě sloţených řetězců (název typu včetně některých parametrů, jako např. MySQL).
5.4 Třída a šablony pro generování přístupových tříd Generování přístupových tříd je důleţitou a specifickou funkcí aplikace wxDbExplorer. Má za úkol vygenerovat pro vybranou databázi sadu tříd jazyka C++ pro kaţdou tabulku a pohled (view) databáze. Tyto vygenerované třídy musí umoţnit jednoduše získat data z databáze, popřípadě zajistit jejich modifikaci. Základem vygenerovaných tříd je komponenta DatabaseLayer, kterou je nutné přidat k cílové aplikaci. Kompletní
algoritmus
generování
přístupových
tříd
je
vytvořen
v třídě
ClassGenerateDialog. Generování probíhá částečně na základě soustavy šablon, částečně je definované přímo ve zdrojovém kódu. Vytvořeny jsou čtyři šablony – vţdy pro hlavičkový a zdrojový soubor, pro view a tabulku. V průběhu generování se prochází textový soubor šablony, a vyhledávají se speciální řetězce začínající a končící dvěma
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
37
znaky procenta („%%classItemGetters%%“). Tyto řetězce jsou posléze nahrazeny konkrétními jednořádkovými řetězci, nebo soustavou řádků. Před samotným zahájením generování přístupových tříd je nutné obnovit strukturu vybrané databáze se správným příznakem tak, aby se veškeré pohledy (Views) načetly v rámci interní databázové struktury jako tabulky. Tím se zajistí přesné a správné definování typů sloupců návratové tabulky získané z pohledu.
5.5 Přehled tříd grafického rozhraní Grafické rozhraní aplikace je tvořeno soustavou tříd, jejichţ prototypy jsou ve většině případů tvořeny pomocí aplikace wxFormBuilder. Třídy lze rozdělit do dvou skupin, konkrétně skupinu základních panelů a skupinu pomocných dialogů. Základní rozvrţení obrazovky počítá s umístěním postranního panelu tvořícího základ aplikace středového notebooku obsahujícího záloţky jednotlivých editorů. Mezi základní panely patří DbViewerPanel. Jedná se o základní panel aplikace, obsahující hlavní logiku a funkce. Panel zahrnuje tlačítkovou lištu, pomocí které se lze připojit na databázový server, ukončit toto spojení, nebo také vytvořit prázdný ERD diagram. Dále obsahuje databázový strom, ve kterém je zobrazena stromová struktura jednotlivých připojených databází. Ve spodní části se nachází „Thumbnail“ znázorňující náhled otevřeného dialogu. Pomocí kontextové nabídky zobrazené na pravé tlačítko myši nad poloţkami stromu se dá přistoupit ke spoustě dalších funkcí, mezi které patří otevření jednotlivých dalších panelů, vytvoření předvyplněných ERD diagramů a podobně. Dalším důleţitým panelem je ErdPanel. Ten se otevírá jako záloţka do hlavního notebooku, buď jako prázdný, nebo jako předvyplněný vybranou databází či tabulkou. Panel umoţňuje uţivateli provádět kompletní editaci ERD diagramů. Jeho rozvrţení obsahuje hlavní tlačítkovou lištu a grafické plátno. K jednotlivým funkcím lze přistoupit pomocí ovládacích prvků na tlačítkové liště nebo pomocí kontextového menu vyvolaného pravým klikem na plátno. Posledním základním panelem je SqlCommandPanel. Opět se jedná o editační panel otevíraný jako záloţka v hlavním notebooku. Tento panel umoţňuje uţivateli zasílat libovolné SQL dotazy do databáze a zobrazovat jejich výsledky. Panel obsahuje v horní části komponentu wxScintilla pro snadné zvýraznění syntaxe u vkládaných dotazů,
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
38
v prostřední části lištu s několika tlačítky a výpisem případných chyb, a ve spodní části mříţku pro výpis obsahující získané výsledky. Popis zbývajících dialogů a jejich funkce, stejně tak jako popis zbývajících pomocných tříd v aplikaci, můţeme nalézt v uţivatelské dokumentaci, nebo jako součást elektronické dokumentace na přiloţeném CD.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
6
39
UŢIVATELSKÁ DOKUMENTACE
Následující kapitoly obsahují uţivatelskou dokumentaci k programu wxDbExplorer. Tato aplikace existuje ve dvou variantách, a to jak samostatná aplikace, tak jako plugin do IDE CodeLite. Obě varianty aplikace vyuţívají téměř stejné grafické rozhraní. Drobné rozdíly v některých dialozích vychází z potřeb integrace aplikace ve formě pluginu do IDE CodelLite. Veškeré popisy a obrázky vycházejí z formy pluginu (preferovaná forma distribuce), lze je však bez rozdílů aplikovat na samostatnou aplikaci.
6.1 Úvodní obrazovka
Obrázek 15 Hlavní okno aplikace Codelite se spuštěným pluginem wxDbExpolrer Hlavní okno aplikace CodeLite se spuštěným a zobrazeným pluginem wxDbExplorer obsahuje mimo jiné dvě hlavní části. Jak je vidět na obrázku 15., jedná se o prostor pro záloţky editorů a hlavní panel pluginu. Základní ovládání pluginu a jeho funkce jsou obsaţeny v hlavním panelu. Pro editaci ERD diagramů a zasílání dotazů do databáze se po zvolení příslušného tlačítka či poloţky menu otevře daný editor ve formě záloţky v prostoru pro záloţky editorů. Těchto editorů lze mít v jeden okamţik otevřeno několik a dá se mezi nimi bez omezení přepínat.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
40
Pozici hlavního panelu pluginu lze měnit přetaţením tohoto panelu za jeho záhlaví. Velikost panelu není nijak omezena. Pořadí záloţek jednotlivých editorů můţeme měnit taţením za záloţky.
6.2 DbViewerPanel DbViewerPanel je hlavním panelem pluginu wxDbExplorer. Tento panel obsahuje základní funkcionalit. Panel je rozdělen na tři hlavní části. V horní části se nachází lišta s ovládacími tlačítky. Ta obsahuje tlačítko pro otevření nového databázového spojení, pomocí kterého se spouští dialog pro připojení na databázi. Dále tlačítko pro uzavření existujícího spojení, nebo také tlačítko pro obnovení jiţ načtené databázové struktury. Poslední tlačítko umoţní vytvořit uţivateli prázdný ERD diagram nezávislý na databázovém spojení. Funkce a dostupnost některých tlačítek je omezena na základě vybraného databázového objektu v prostřední části panelu.
Obrázek 16 DbViewerPanel V prostřední části panelu se nachází prostor pro databázové stromy. V tomto prostoru se zobrazují stromové struktury jednotlivých databázových spojení. Pro kaţdé otevřené
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
41
spojení se zde vytvoří soubor sloţek obsahující seznam databázových objektů. Mezi tyto objekty patří databáze dostupné na serveru, tabulky a databázové pohledy (views) obsaţené v jednotlivých databázích. Nad kaţdým databázovým objektem je moţné vyvolat kontextovou nabídku pomocí stisku pravého tlačítka myši. Pomocí těchto kontextových nabídek lze manipulovat s databázemi, vytvářet ERD diagramy, zobrazovat data v databázích atd. Pomocí poklikání levým tlačítkem myši na objekt tabulky se otevře editor pro zobrazení dat obsaţených v databázi. Tento editor bude obsahovat vyplněný dotaz pro výběr dat z dané tabulky a výsledek tohoto dotazu. Při poklikání levého tlačítka myši na tabulku se současným drţením klávesy Control se otevře editor pro tvorbu ERD diagramů obsahující grafický objekt odpovídající vybrané tabulce. Spodní část DbViewerPanelu obsahuje náhled (thumbnail) editovaného ERD diagramu. V případě více otevřených ERD diagramů náhled odpovídá aktuálně vybranému diagramu. Pokud není vybrán ţádný ERD, okno náhledu je prázdné. Poměr rozměrů částí panelu pro zobrazení databázových struktur a části pro náhled ERD diagramu lze měnit pomocí taţení myši za dělící linku.
6.3 Připojení na databázový server Pro připojení na databázový server nebo otevření databázového souboru (v případě Sqlite) je nutné zvolit odpovídající tlačítko na hlavním panelu pluginu (DbViewerPanel). Po jeho stisku se zobrazí dialog, pomocí kterého lze definovat parametry připojení. Dialog obsahuje záloţky pro kaţdý typ podporovaného databázového spojení. Dostupnost jednotlivých záloţek a tedy i podporovaných databázových spojení je závislá na platformě, na které je aplikace spouštěna, a současně na instalované verzi aplikace. Záloţka označená MySql slouţí pro připojení na databázový server MySQL. Před samotným připojením je nutné vyplnit parametry spojení. Mezi tyto parametry patří poloţka „Server“, do které je nutné vyplnit adresu daného databázového serveru, dále poloţka „User name“, kde je potřeba vyplnit jméno databázového uţivatele. Pokud je připojení na databázový server zabezpečené heslem, je nutné jej zadat do poloţky „Password“. Po vyplnění údajů se připojení dokončí stiskem tlačítka „OK“. Tlačítko „Zrušit“ slouţí pro uzavření dialogu bez otevření databázového spojení. Vyplněné parametry spojení je moţné uloţit do seznamu pro pozdější pouţití. Název spojení v seznamu je definován poloţkou „Name“ a pro manipulaci se spojením slouţí tlačítka
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
42
„Save“ a „Remove“. Z bezpečnostních důvodů se nedoporučuje ukládání parametrů včetně hesla. Heslo je v tomto případě uloţeno pouze v textové formě v souboru xml.
Obrázek 17 Dialog pro připojení k databázi Další záloţka označená jako Sqlite se pouţívá pro otevření databázových souborů stejnojmenné databáze Sqlite. Záloţka obsahuje pouze pole pro výběr databázového souboru. Do toho je nutné zadat cestu k poţadovanému databázovému souboru. Pokud daný soubor s databází neexistuje, v okamţiku připojení je vytvořen nový soubor. Připojení se realizuje opět pomocí tlačítka „OK“ a celou proceduru lze stornovat tlačítkem „Zrušit“. V aktuální verzi aplikace je další záloţkou dialogu záloţka pro připojení na databázi PostgresSQL. Funkce jednotlivých polí a tlačítek odpovídá záloţce pro připojení na MySQL. Navíc obsahuje pouze poloţku „Default database“. Před samotným připojením je nutné do této poloţky vyplnit výchozí databázi pro spojení, která jiţ musí existovat na databázovém serveru. Ve většině případů lze vyuţít předvyplněné systémové databáze s názvem postgres. Přesto, ţe seznam uloţených připojení je oddělený od seznamu připojení na MySQL, platí zde stejné doporučení o neukládání databázových hesel.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
43
6.4 Úvod do ERD diagramů Entitně relační diagram (dále jen ERD) je grafická reprezentace soustavy objektů včetně jejich vlastností a vzájemných vztahů. Standard pro tvorbu ERD diagramů je definován v rámci jazyka UML. S drobnými modifikacemi lze ERD diagramy pouţít pro zobrazení a návrh databázové struktury. Pro editaci těchto diagramů slouţí v rámci wxDbExploreru samostatný editor, který se otevírá v prostoru pro záloţky hlavní aplikace. Kaţdý otevřený editor ERD diagramů umoţňuje tvorbu diagramu právě pro jeden typ databázového serveru. Popis práce s tímto editorem je uveden v následující kapitole. [17]
Obrázek 18 Ukázka ERD diagramu vytvořeného pomocí aplikace wxDbExplorer Otevření editoru pro editaci ERD diagramů můţeme provést třemi způsoby. První moţností je otevření prázdného diagramu pomocí odpovídajícího tlačítka na hlavním panelu pluginu. Po stisku tohoto tlačítka je zobrazen dialog pro výběr typu databáze, pro kterou lze ERD diagram vytvářet. Druhou moţností je vytvoření ERD diagramu předvyplněného strukturou jiţ existující databáze. Toto lze provést pomocí volby „Create ERD from database“ obsaţené v kontextovém menu zobrazeném po stisku pravého tlačítka myši nad objektem databáze ve stromové struktuře databázových spojení hlavního panelu pluginu. Tato volba otevře nový prázdný editor ERD diagramů a vyplní jej všemi
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
44
databázovými objekty obsaţenými v databázi včetně jejich parametrů a spojení mezi nimi. Poslední moţností je vytvoření diagramu obsahujícího pouze jednu konkrétní tabulku. Pro tuto moţnost slouţí volba „Create ERD from table“ obsaţená v kontextovém menu zobrazeném nad databázovým objektem tabulky ve stromové struktuře připojení.
6.5 Práce s ERD diagramem Jak jiţ bylo zmíněno v předchozích kapitolách, pro editaci ERD diagramů se v rámci paginu wxDbExplorer otevře samostatná záloţka se speciálním editorem. Ten obsahuje pouze dvě základní části. V horní části je panel ovládacích tlačítek zprostředkovávající základní funkce editoru. Zbylá část editoru je tvořena grafickým plátnem pro vytváření diagramu. Na toto plátno jsou umisťovány jednotlivé grafické objekty, se kterými je poté moţné po plátně pohybovat taţením myši. Náhled celé plochy plátna se zobrazuje v hlavním panelu pluginu v dolní části.
Obrázek 19 Editor ERD diagramů aplikace wxDbExplorer Tlačítka na ovládacím panelu jsou rozdělena do několika skupin Tlačítka pro načítání a ukládání ERD - pomocí těchto tlačítek lze načítat a ukládat ERD diagram v různých formátech
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
45
Tlačítka pro náhled a tisk Tlačítka pro standardní akce kopírovat, vyjmout a vloţit Tlačítka historie Skupina nástrojů – umoţňují umisťovat tabulky, views a jejich spojení na plátno a manipulaci s těmito objekty Tlačítka autolayoutu – dovolují automaticky rozloţit objekty na plátně dle definovaného schématu Nástroje pro změnu měřítka Na plátno ERD diagramu je moţné umístit objekty tří základních typů. A to objekt tabulky, objekt pohledu (view) a spojnice – cizí klíč. Objekt tabulky obsahuje základní specifikace databázové tabulky, včetně jejich atributů a omezení ve formě cizích a primárních klíčů. Editace vlastností tabulky probíhá přes speciální dialog otevřený dvojklikem levého tlačítka myši na objekt tabulky. Objekt typu databázový pohled (view) obsahuje název view a cílový SQL dotaz. Editace vlastností také probíhá přes samostatný dialog aktivovaný taktéţ dvojklikem myši na objekt pohledu. Spojnice mezi tabulkami je definována ve formě omezení typu „cizí klíč“ a její editace probíhá pouze v rámci editace objektu tabulky. Vkládání jednotlivých databázových objektů na plátno můţe probíhat pomocí skupiny nástrojů na panelu tlačítek. Druhou moţností je přetaţení tabulky z existující stromové struktury v hlavním panelu aplikace na plochu. V tomto případě se v ERD diagramu vytvoří objekt tabulky (nebo pohledu) s totoţnými parametry, jako má existující tabulka (nebo pohledu) v databázi. V případě, ţe ERD diagram je vytvářen pro jiný typ databázového serveru neţ taţená tabulka, provede se po přetaţení automatická konverze typů. Tato konverze se pokusí převést jednotlivé sloupce do databázových typů cílového ERD diagramu. Převodní algoritmus nezaručuje stoprocentní kompatibilitu nahrazeného a nahrazovaného databázového typu, proto se doporučuje po převodu zkontrolovat cílové databázové typy sloupečků tabulky včetně jejich parametrů. Databázový pohled (view) se při přetaţení nijak nekonvertuje. Potřebné změny v syntaxi cílového SQL dotazu je nutné provést manuálně.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
46
Při vytváření spojnice mezi tabulkami pomocí nástroje z tlačítkové lišty je po propojení tabulek myší zobrazen dialog. V tomto dialogu je nutné vybrat cílový a zdrojový sloupec tabulky a akce vyvolané při změně referenční tabulky spojení. Lze zde také vybrat typ spojení. V případě výběru typu spojení M:N se vytvoří další spojovací tabulka, obsahující potřebné sloupce pro vytvoření této vazby. Kliknutím pravého tlačítka myši nad jednotlivými objekty lze vyvolat příslušné kontextové nabídky. Ty další funkce zjednodušující práci s ERD diagramem. Mezi ně patří kromě základních moţností kopírování, nebo např. funkce pro vytvoření databázového pohledu (view) přímo na základě dané tabulky. Další zajímavou funkcí je moţnost vloţení SQL skriptu pro vytvoření vybrané tabulky do systémové schránky.
6.6 Zápis struktury z ERD diagramu do databáze Pomocí ERD diagramu můţeme navrhnout strukturu databázových objektů, postupy popsanými v předchozích kapitolách. Kromě moţnosti uloţení této struktury v různých formátech nebo jejího tisku, umoţňuje wxDbExplorer přímý zápis databázové struktury na server. V průběhu tohoto zápisu se veškeré databázové objekty umístěné v ERD diagramu vytvoří na databázovém serveru v rámci vybrané databáze. Zápis databázové struktury do databáze je sloţitým procesem, během kterého můţe dojít k poškození či ztrátě dat v jiţ existujících tabulkách. Z tohoto důvodu se zápis provádí pomocí průvodce, který nabídne uţivateli v jednotlivých krocích moţnost zálohy dat a databázové struktury. Průvodce lze spustit stiskem tlačítka z první skupiny na panelu tlačítek ERD diagramu s označením „Commit ERD“. Po stisku tlačítka se otevře dialog, který pomocí několika kroků provede zápis databázové struktury na server.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
47
Obrázek 20 Vybrané kroky průvodce pro zápis databázové struktury z ERD diagramu do databáze V prvním kroku průvodce je zobrazena zpráva s upozorněním, ţe veškeré existující objekty v databázi budou v průběhu následujících kroků smazány a nahrazeny objekty novými z ERD diagramu. Zpráva dále upozorňuje, ţe před samotným smazáním lze databázi zazálohovat. V následujícím kroku je nutné vybrat ze zobrazeného stromu připojení databázi, do které bude struktura zapsána. Obsah stromu odpovídá otevřeným připojením zobrazeným v hlavním panelu pluginu. Pokud strom neobsahuje poţadované připojení, je nutné průvodce ukončit, otevřít připojení pomocí hlavního panelu pluginu a následně opětovně průvodce spustit. Třetí krok průvodce nabízí moţnost zálohování databázových dat. Záloha se provede do souboru ve formě SQL insert statementů.
Díky tomu je moţné data zapsat zpět do
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
48
databáze libovolným editorem či jinou aplikací (soubor se zálohou není závislý na wxDbExploreru). V rámci tohoto kroku lze také provést zálohu původní struktury databáze. V tomto případě se vytvoří soubor obsahující create SQL příkazy pro vytvoření veškerých tabulek a pohledů obsaţených v databázi. Tento soubor opět není závislý na pluginu a obnovení struktury lze provést pomocí libovolné aplikace. Čtvrtým krokem průvodce je samotný zápis struktury z ERD diagramu do databáze. Dialog průvodce obsahuje prostor pro výpis případných chyb a informací, tlačítko pro zápis struktury a tlačítko pro zobrazení SQL příkazů pro vytvoření dané struktury. Po stisku tlačítka „Write“ se provede zápis struktury do databáze. Nejprve jsou smazány původní tabulky v databázi, poté jsou spuštěny skripty pro vytvoření nové struktury (tyto skripty lze zobrazit stiskem tlačítka „Show SQL“). Po úspěšném zápisu struktury průvodce pokračuje dalším krokem, v kterém lze provést obnovu zálohovaných dat. Tu můţeme provést z libovolného SQL souboru. Průvodce tento soubor otevře a nalezené SQL skripty provede nad databází. Provedením obnovy dat je zápis struktury ukončen. Průvodce zobrazí závěrečné oznámení o úspěšném zápisu a poté skončí.
6.7 Editor SQL dotazů Plugin wxDbExplorer umoţňuje mimo vytváření ERD diagramů a manipulace s databázovou strukturou také zasílání libovolných dotazů do databáze a následné získání výsledku těchto dotazů. Pro tuto činnost slouţí editor SQL dotazů. Tento editor lze otevřít dvojklikem levého tlačítka myši na objekt tabulky, pohledu nebo databáze ve stromové struktuře připojení umístěné na hlavním panelu pluginu. Po otevření editoru se přidá další záloţka mezi ostatní záloţky editorů v hlavní aplikaci. Editorů SQL dotazů lze mít spuštěno v jeden okamţik libovolné mnoţství. Kaţdý z nich je po celou dobu svého otevření připojen pouze na jednu konkrétní databázi v rámci jednoho konkrétního spojení.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
49
Obrázek 21 Editor SQL dotazů aplikace wxDbExplorer Panel editoru je rozdělen horizontálně do několika částí. U horního okraje panelu je umístěna lišta s ovládacími tlačítky. V aktuální verzi aplikace je zde umístěno pouze tlačítko pro vkládání vzorových SQL skriptů do editoru. V horní polovině panelu je umístěno editační pole pro vkládání SQL skriptů. Do tohoto pole lze vkládat libovolné SQL skripty platné pro daný typ databázového serveru. Pole obsahuje funkci pro automatické zvýrazňování syntaxe. Díky tomu se dá předcházet překlepům při tvorbě dotazů. Spodní část panelu obsahuje databázovou mříţku. Ta je naplněna po kaţdém odeslání dotazu novými hodnotami. Jednotlivé hodnoty jsou vepisovány do příslušných sloupců a jednotlivé sloupce obsahují hlavičku s názvem. Aktuální verze aplikace neumoţňuje přímou editaci dat přes tuto mříţku (editace je moţná pouze příslušnými SQL dotazy). Mezi editačním polem a datovou mříţkou leţí pruh obsahující tlačítko pro odeslání skriptu do databáze, pole textovým výpisem návratové hodnoty a tlačítka pro uloţení a načtení SQL skriptu. Pomocí těchto tlačítek lze uloţit obsah editačního pole do SQL souboru, popřípadě načíst libovolný SQL soubor do editačního pole. Odeslání SQL skriptu do databáze je moţné také provést stiskem klávesy Enter za současného drţení klávesy Ctrl. V případě ukončení SQL skriptu chybou zobrazí editor
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
50
dialogové okno s výpisem této chyby. Zobrazené chyby nejsou interně modifikovány pluginem wxDbExplorer, ale jedná se přímo o přijaté chyby databázového serveru.
6.8 Vytvoření přístupových tříd Další uţitečnou funkcí, kterou obsahuje wxDbExplorer, je vytváření přístupových tříd. V rámci této funkce plugin vygeneruje na základě šablon třídy jazyka C++ pro kaţdou tabulku a pohled obsaţený v databázi. Pomocí těchto tříd lze následně jednoduše získávat a zapisovat data do daných databázových tabulek. Vygenerované třídy vyuţívají komponentu DatabaseLayer, kterou je nutné k cílové aplikaci připojit. Funkci generování přístupových tříd můţeme vyvolat z kontextové nabídky spuštěné stiskem pravého tlačítka myši na databázi nebo tabulku ve stromu databázových připojení v rámci hlavního panelu aplikace. Po zvolení poloţky menu se zobrazí dialog obsahující textová pole pro zadání prefixové a postfixové části názvu třídy. Název jednotlivých tříd bude poté vytvořen sloţením – prefix + název tabulky + postfix. Dále umoţňuje vybrat cílovou sloţku pro vytvořené třídy a v případě plugin verze aplikace i virtuální sloţku projektu, do které se mají dané třídy přidat. Dialog také obsahuje textové pole pro následný výpis informací o průběhu generování.
Obrázek
22
přístupových tříd
Dialog
pro
generování
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
51
Po stisku tlačítka „Generate“ se v cílové sloţce vytvoří pro kaţdou databázovou tabulku a pohled dva soubory - hlavičkový (.h) a soubor s implementací (.cpp). Název souborů odpovídá sloţenému názvu třídy definovanému v předchozím odstavci. Kaţdý vygenerovaný soubor obsahuje sadu dvou tříd (pro pohled), nebo tří tříd (pro tabulku) jazyka C++. První třída s názvem shodným s názvem souboru definuje jeden řádek dané tabulky. Jednotlivé atributy této třídy odpovídají všem sloupečkům dané tabulky (nebo pohledu). Třída vytváří pouze datový kontejner pro řádek tabulky a neobsahuje další funkce. Název druhé vygenerované třídy v souboru bude obsahovat kromě názvu souboru také postfix „Collection“. Tato třída zapouzdřuje striktně typovou kolekci obsahující jednotlivé řádky tabulky ve formě tříd popsaných v předchozím odstavci. Třída kolekce, kromě základní funkcionality pro manipulaci s prvky kolekce, obsahuje funkce, umoţňující přímé získání dat z databáze. Mimo to také obsahuje funkci pro přímé naplnění komponenty wxGrid. Poslední třídou generovanou pouze pro databázové tabulky je třída s přidaným postfixem „Utils“. Třída utils obsahuje statické funkce umoţňující manipulaci s daty v tabulce. Jedná se o funkce „Add“ pro vkládání nových řádků do tabulky, „Update“ pro změnu dat v tabulce a třídu „Delete“ pro odstranění definovaných řádků z tabulky. Všechny vygenerované přístupové třídy vyuţívají pro svou funkci interně komponentu DatabaseExplorer. Pro jejich úspěšné pouţití v cílovém projektu je nutné tuto komponentu do projektu přidat a správně nastavit překladač.
6.9 Další doplňkové funkce Kromě funkcí popsaných v předchozích kapitolách obsahuje wxDbExplorer řadu drobných funkcí a moţností jednoduššího charakteru. Většina těchto funkcí byla buď zmíněna v rámci popisu jiné činnosti, nebo její popis příslušného tlačítka je dostatečně vypovídající. Mezi tyto funkce je moţné zahrnout klasické klávesové zkratky fungující v rámci všech editorů nebo moţnost vyvolat jednoduché akce přímo z kontextových nabídek jednotlivých objektů, např. moţnost vytvoření a odstranění databáze přímo ve stromu databázových připojení a další.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
52
ZÁVĚR Cílem této diplomové práce je vytvoření multiplatformní aplikace pro práci se serverovými a souborovými databázemi. Aplikace je zaměřená na práci se strukturou databází a daty obsaţenými v databázích. V teoretické části práce je uveden přehled základních výrazů a popisy několika stávajících aplikací aktuálně dostupných na trhu včetně uvedení jejich zajímavých funkcí. Z těchto aplikací a poznatků poté vycházel návrh uţivatelského prostředí pro software vyvíjený v praktické části. Další kapitoly teoretické části diplomové práce rozebírají popis a přehled cílových databázových serverů. Uvádí jejich vlastnosti a poukazují na specifikace a na rozdíly mezi jednotlivými servery. Poslední část teorie obsahuje přehled jednolitých komponent a knihoven vyuţitých při tvorbě výsledné aplikace. Pro vytvoření multiplatformní verze byla jako základ vybrána knihovna wxWidgets a pro dosaţení různé konektivity na databáze komponenta DatabaseLayer. V rámci praktické části diplomové práce byla vytvořena aplikace wxDbExplorer. Tato aplikace umoţňuje manipulování s databázovou strukturou a obsahem databázových objektů. wxDbExplorer existuje ve dvou variantách. První variantou je samostatně spustitelná aplikace a druhou variantou plugin pro IDE CodeLite. Aplikace je multiplatformní a lze ji tedy přeloţit jak pod Linuxem, tak pod MS Windows. wxDbExplorer v aktuální verzi podporuje databázové servery MySQL a PostgreSQL a souborovou databázi SQLite. Při návrhu aplikace byl nejsloţitější částí návrh architektury a jednotného databázového rozhraní. Cílem těchto částí je sjednocení specifických databázových katalogů a syntaxe SQL skriptů. Toho je dosaţeno vytvořením třívrstvé architektury aplikace. Přechod mezi objekty aplikace a SQL rozhraním databáze tak tvoří prostředí abstraktních tříd. To také umoţní dodatečné přidání dalších podporovaných databázových serverů bez výrazného zásahu do konečné aplikace. Plugin verze aplikace vyţadovala vyšší míru integrace, neţ jakou umoţňovalo rozhraní IDE CodeLite pro tvorbu zásuvných modelů. Protoţe zdrojové kódy CodeLite jsou volně
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
53
dostupné, problém byl vyřešen rozšířením tohoto rozhraní. Výsledný plugin tedy obsahuje kompletní funkcionalitu aplikace wxDbExplorer. V době psaní tohoto textu byla plugin verze aplikace včetně zdrojových kódů změn v IDE CodeLite zaslána na posouzení a implementaci hlavním vývojářům zmíněného nástroje.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
54
ZÁVĚR V ANGLIČTINĚ The main aim of this thesis was creating multiplatform application for working with server base and file base databases. The application should be directed to work with database structure. The theoretical part contains an overview of basic terms, descriptions of several existing applications currently available on the market including the introduction of exciting features. Design of GUI in software is developed in the practical part which is based on these applications and knowledge. Next paragraphs of theoretical thesis part contain database servers overview and theirs description. It provides the database servers specifications and points to other differences. Used components and libraries overviews are included in the last section of theoretical part of this thesis. WxWidget library was chosen for creating multiplatform version of application and DatabaseLayer component was chosen to achieve connectivity to various databases. Application wxDbExplorer was created in the practical part of this thesis. This application provides features for database structure manipulating and features for database objects containing manipulating. wxDbExplorer exists in two variants. The first variant is standalone application and the second variant is plugin for IDE CodeLite. The app is multiplatform. It can be compiled and used in Linux and MS Windows. wxDbExplorer in actual version can be used with MySQL and PostgreSQL database servers and SQLite database file engine. The hardest parts of creating the application were architecture designing and unitary database interface creating. The Aim of these parts was the unification of specific database catalogs and unification of SQL script syntax differences. This was achieved by creating three-tier application architecture. Environment of abstract classes creates the transition between the objects used in application and database SQL interface. This feature provides an easy adding of the next support for database servers without large incursion into the application. Plugin version of created application required a higher degree of integration than the IDE CodeLite plugin interface enabled. As CodeLite is an open source, the problem was solved
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
55
by extending the CodeLite plugin interface. Finally created plugin keeps complete functionality of wxDbExplorer application. At the time writing this thesis complete application with source codes and changes in IDE CodeLite was sent to the main developers for assessment and implementation into the stable version of CodeLite.
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
56
SEZNAM POUŢITÉ LITERATURY [1]
LACKO, Ľuboslav. SQL : hotová řešení : pro SQL Server, Oracle a MySQL. Vyd. 1. Brno : Computer Press, 2003. 298 s. ISBN 8072269755.
[2]
GROFF, James R; WEINBERG, Paul N. SQL : kompletní průvodce. Vyd. 1. Brno : CP Books, 2005. 936 s. ISBN 80-251-0369-2
[3]
SEQUEL: A structured English query language. In CHAMBERLIN, Donald D.; BOYCE, Raymond F. SIGFIDET '74 Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control [online]. USA : ACM New York, 1974 [cit. 2011-02-11]. Dostupné z WWW:
.
[4]
MySQL [online]. 2008 [cit. 2011-03-01]. Sun Introduces MySQL Workbench. Dostupné z WWW:
[5]
MySQL workbanch Develper Central [online]. c2007-2009 [cit. 2011-01-11]. Dostupné z WWW: .
[6]
PgAdmin: PostgreSQL administrtion and management tool [online]. 2009 [cit. 201102-01]. Dostupné z WWW:
[7]
MySQL [online]. c1997-2011 [cit. 2011-01-25]. MySQL 5.5 Reference Manual. Dostupné z WWW:
[8]
MySQL [online]. c1997-2011 [cit. 2011-04-11]. Overview of MySQL Storage Engine Architecture. Dostupné z WWW:
[9]
PostgreSQL [online]. c1996-2011 [cit. 2011-04-18]. Dostupné z WWW: http://www.postgresql.org/
[10] SQLite [online]. 2011 [cit. 2011-04-18]. Dostupné z WWW: http://www.sqlite.org/index.html [11] WxWidgets [online]. 2011 [cit. 2011-05-01]. Dostupné z WWW: [12] BLIŢŇÁK, Michal; DULÍK, Tomáš; VAŠEK, Vladimí, wxShapeFramework: An easy way for diagrams manipulation in C++ applications. WSEAS TRANSACTIONS
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
57
on COMPUTERS [online]. March 2010, Volume 9, Issue 3, [cit. 2010-12-01]. Dostupný z WWW: (http://www.wseas.us/e-library/transactions/computers/2010/89409.pdf). ISSN 1109-2750. [13] SourceForge.net [online]. c2011 [cit. 2011-05-01]. WxShapeFramework. Dostupné z WWW: [14] WxCode [online]. 2010 [cit. 2011-03-22]. Dostupné z WWW: http://wxcode.sourceforge.net/submit.php [15] CodeLIte IDE [online]. 2011 [cit. 2011-03-23]. Dostupné z WWW: [16] BLIŢŇÁK, Michal; DULÍK, Tomáš; VAŠEK, Vladimír. A Persistent CrossPlatform Class Objects Container for C++ and wxWidgets. WSEAS TRANSACTIONS on COMPUTERS. 2009, Issue 5, s. 778-787. ISSN 1109-2750. [17] KANISOVÁ, Hana; MULER, Miroslav. UML srozumitelně, 2. aktualizované vydání. Brno : Computer Press, 2006. 176 s. ISBN 80-251-1083-4
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
SEZNAM POUŢITÝCH SYMBOLŮ A ZKRATEK SQL
Structured Query Language
ERD
Entity Relation Diagram (Entitně relační diagram)
GPL
General Public License
IDE
Integrated Development Environment
RTTI
Run-Time Type Information
58
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
59
SEZNAM OBRÁZKŮ Obrázek 1 Prostředí aplikace MySQL WorkBench 5.2 ....................................................... 13 Obrázek 2 Okno aplikace MySQL Workbench pro editaci ERD diagramů ........................ 14 Obrázek 3 Grafické rozhraní aplikace pgAdmin III, vlevo v prostředí Linux, vpravo v prostředí Windows ................................................................................................... 15 Obrázek 4 Okno aplikace pgAdmin III pro vysvětlení průběhu SQL dotazu ....................... 16 Obrázek 5 Uživatelské rozhraní aplikace MS SQL Server Management Studio ................. 17 Obrázek 6 Architektura MySQL Serveru [8] ....................................................................... 19 Obrázek 7 Logo databázového systému PostgreSQL [9]..................................................... 21 Obrázek 8 Logo databázové knihovny SQLite [10] ............................................................. 22 Obrázek 9 Ukázková aplikace využívající wxShapeFramework [12] .................................. 25 Obrázek 10 Logická struktura komponenty wxShapeFramework [12] ............................... 26 Obrázek 11 Grafické zobrazení architektury a základních tříd wxDbExploreru ................ 31 Obrázek 12 Logická struktura komponenty wxXmlSerializer [16] ...................................... 33 Obrázek 13 Diagram vnitřní databázové struktury ............................................................. 34 Obrázek 14 Diagram tříd databázového rozhraní ............................................................... 35 Obrázek 15 Hlavní okno aplikace Codelite se spuštěným pluginem wxDbExpolrer ........... 39 Obrázek 16 DbViewerPanel ................................................................................................ 40 Obrázek 17 Dialog pro připojení k databázi ....................................................................... 42 Obrázek 18 Ukázka ERD diagramu vytvořeného pomocí aplikace wxDbExplorer ............ 43 Obrázek 19 Editor ERD diagramů aplikace wxDbExplorer ............................................... 44 Obrázek 20 Vybrané kroky průvodce pro zápis databázové struktury z ERD diagramu do databáze ................................................................................................ 47 Obrázek 21 Editor SQL dotazů aplikace wxDbExplorer ..................................................... 49 Obrázek 22 Dialog pro generování přístupových tříd ......................................................... 50
UTB ve Zlíně, Fakulta aplikované informatiky, 2011
SEZNAM PŘÍLOH Příloha P I: ERD diagram vytvořený pomocí aplikace wxDbExplorer Příloha P II: SQL scripty vygenerované na základě ERD diagramu Příloha P III: Hhlavičkový soubor aplikací vygenerovaných tříd pro přístup do databáze
60
PŘÍLOHA P I: ERD DIAGRAM VYTVOŘENÝ POMOCÍ APLIKACE WXDBEXPLORER
PŘÍLOHA P II: SQL SCRIPTY VYGENEROVANÉ NA ZÁKLADĚ ERD DIAGRAMU -- SQL script created by DatabaseExplorer DROP TABLE IF EXISTS polozky CASCADE; CREATE TABLE polozky ( id INTEGER NOT NULL, zakazkaid INTEGER NOT NULL, textpolozky CHARACTER VARYING, mnozstvi INTEGER, cenaks NUMERIC(10,10), CONSTRAINT pk_polozky PRIMARY KEY (id) ); -- ------------------------------------------------------------DROP TABLE IF EXISTS adresy CASCADE; CREATE TABLE adresy ( id INTEGER NOT NULL, titul CHARACTER VARYING, jmeno CHARACTER VARYING, prijmeni CHARACTER VARYING, pozice CHARACTER VARYING, nazevfirmy CHARACTER VARYING, ulice CHARACTER VARYING, mesto CHARACTER VARYING, psc CHARACTER VARYING, CONSTRAINT pk_adresy PRIMARY KEY (id) ); -- ------------------------------------------------------------DROP TABLE IF EXISTS zakazky CASCADE; CREATE TABLE zakazky ( id INTEGER NOT NULL, textzakazky CHARACTER VARYING, adresaid INTEGER NOT NULL, cislozakazky CHARACTER VARYING, CONSTRAINT pk_zakazky PRIMARY KEY (id) ); -- ------------------------------------------------------------DROP TABLE IF EXISTS zaznamschuzek CASCADE; CREATE TABLE zaznamschuzek ( id INTEGER NOT NULL, datum DATE, vysledek TEXT, adresaid INTEGER NOT NULL, CONSTRAINT pk_zaznamschuzek PRIMARY KEY (id) ); -- ------------------------------------------------------------DROP VIEW IF EXISTS zaznamschuzekvw;
CREATE VIEW zaznamschuzekvw AS SELECT zaznamschuzek.id, zaznamschuzek.datum, zaznamschuzek.vysledek, zaznamschuzek.adresaid FROM zaznamschuzek; ; -- ------------------------------------------------------------DROP VIEW IF EXISTS polozkyvw; CREATE VIEW polozkyvw AS SELECT polozky.id, polozky.zakazkaid, polozky.textpolozky, polozky.mnozstvi, polozky.cenaks FROM polozky; ; -- ------------------------------------------------------------DROP VIEW IF EXISTS adresyvw; CREATE VIEW adresyvw AS SELECT adresy.id, adresy.titul, adresy.jmeno, adresy.prijmeni, adresy.pozice, adresy.nazevfirmy, adresy.ulice, adresy.mesto, adresy.psc FROM adresy; ; -- ------------------------------------------------------------DROP VIEW IF EXISTS zakazkyvw; CREATE VIEW zakazkyvw AS SELECT zakazky.id, zakazky.textzakazky, zakazky.adresaid, zakazky.cislozakazky FROM zakazky; ; -- -------------------------------------------------------------- ---------- CONSTRAINTS FOR TABLE polozky -- ------------------------------------------------------------ALTER TABLE polozky ADD CONSTRAINT fk_polozky_zakazky FOREIGN KEY (zakazkaid) REFERENCES zakazky(id) ON UPDATE NO ACTION ON DELETE NO ACTION ; -- -------------------------------------------------------------- ---------- CONSTRAINTS FOR TABLE adresy -- -------------------------------------------------------------- -------------------------------------------------------------- ---------- CONSTRAINTS FOR TABLE zakazky -- ------------------------------------------------------------ALTER TABLE zakazky ADD CONSTRAINT fk_zakazky_adresy FOREIGN KEY (adresaid) REFERENCES adresy(id) ON UPDATE NO ACTION ON DELETE NO ACTION ; -- -------------------------------------------------------------- ---------- CONSTRAINTS FOR TABLE zaznamschuzek -- ------------------------------------------------------------ALTER TABLE zaznamschuzek ADD CONSTRAINT fk_zaznamschuzek_adresy FOREIGN KEY (adresaid) REFERENCES adresy(id) ON UPDATE NO ACTION ON DELETE NO ACTION ; -- -------------------------------------------------------------
PŘÍLOHA P III: HLAVIČKOVÝ SOUBOR APLIKACÍ VYGENEROVANÝCH TŘÍD PRO PŘÍSTUP DO DATABÁZE #ifndef ZAZNAMSCHUZEK_H #define ZAZNAMSCHUZEK_H #include <wx/wx.h> #include "DatabaseLayer.h" /*! \brief Class for zaznamschuzek table */ class zaznamschuzekBase { public: /*! \brief Constructor for loading from DB */ zaznamschuzekBase(DatabaseResultSet* pResult); virtual ~zaznamschuzekBase(); const int Getid() const { return m_id; } const wxDateTime Getdatum() const { return m_datum; } const wxString& Getvysledek() const { return m_vysledek; } const int Getadresaid() const { return m_adresaid; } /*! \brief Return zaznamschuzek from db on the id base */ static zaznamschuzekBase* GetByid(int id, DatabaseLayer* pDbLayer); protected: int m_id; wxDateTime m_datum; wxString m_vysledek; int m_adresaid; }; #include <wx/grid.h> #include <wx/list.h> WX_DECLARE_LIST(zaznamschuzekBase, zaznamschuzekBaseList); /*! \brief Collection from zaznamschuzekCollectionBase table */ class zaznamschuzekCollectionBase { public: /*! \brief conditions connetion type */ enum CondConType
{ wAND = 1, wOR = 2 }; /*! \brief Constructor for loading from db */ zaznamschuzekCollectionBase(DatabaseResultSet* pResult); virtual ~zaznamschuzekCollectionBase(); /*! \brief Fill wxGrid from collection. */ void Fill(wxGrid* pGrid); /*! \brief Get item list */ const zaznamschuzekBaseList& GetCollection() const { return m_list; } /*! \brief Get all data from database */ static zaznamschuzekCollectionBase* Get(DatabaseLayer* pDbLayer); /*! \brief Get data from database with WHERE statement */ static zaznamschuzekCollectionBase* Get(DatabaseLayer* pDbLayer, wxArrayString& conditions,CondConType conType = wAND ); protected: zaznamschuzekBaseList m_list; }; /*! \brief Utils for zaznamschuzek table */ class zaznamschuzekUtilsBase { public: /*! \brief Add new item into zaznamschuzek table */ static int Add( DatabaseLayer* pDbLayer ,int id ,const wxDateTime& datum ,const wxString& vysledek ,int adresaid ); /*! \brief Edit item in zaznamschuzek table */ static int Edit(DatabaseLayer* pDbLayer ,int id ,const wxDateTime& datum ,const wxString& vysledek ,int adresaid ); /*! \brief Delete item from zaznamschuzek table */ static int Delete(DatabaseLayer* pDbLayer ,int id ); }; #endif // ZAZNAMSCHUZEK_H