Obsah
1. Automatické vytvoření dokumentace k databázi s využitím nástroje SchemaSpy
2. Vytvoření nové databáze v nástroji psql
3. Kostra jednoduché databáze s trojicí tabulek
4. Konstrukce tabulek s jejich zobrazením v psql
5. Instalace nástroje SchemaSpy
6. Přepínače používané nástrojem SchemaSpy
7. Spuštění SchemaSpy proti zvolené databázi s vygenerováním výsledků
8. Zobrazení vygenerované dokumentace
9. Vylepšení databáze – přidání deklarace primárních klíčů
10. Vytvoření databáze, automatický vznik indexů pro primární klíče
11. Opětovné spuštění SchemaSpy s vygenerováním výsledků
12. Třetí varianta databáze s cizími klíči
13. Vytvoření databáze, včetně cizích klíčů
14. Spuštění SchemaSpy a zobrazení změn v dokumentaci
15. Export dokumentace o databázi do formátu XML
16. Příloha: databáze podporované nástrojem SchemaSpy s požadovanými parametry
17. Skripty pro vytvoření tabulek
1. Automatické vytvoření dokumentace k databázi s využitím nástroje SchemaSpy
Tvorba technické dokumentace k IT projektům je – alespoň pro většinu vývojářů – činnost, ze které nebývají právě nadšeni. Navíc má ručně tvořená dokumentace (a ostatně i samotné komentáře v programovém kódu) jednu nevýhodu: samovolně zastarává. Týká se to i dokumentace k databázím, takže mnohdy je jediným „zdrojem pravdy“ samotná databáze (popř. v lepším případě změnové skripty). Jedním z možných řešení tohoto problému jsou nástroje pro automatickou tvorbu dokumentace. V oblasti relačních databází je jedním z těchto projektů nástroj nazvaný SchemaSpy. Tento nástroj se dokáže připojit k existující databázi (tedy k onomu „zdroji pravdy“) a na základě jejího schématu vygenerovat dokumentaci ve formě sady HTML stránek. Navíc tento nástroj dokáže odhalit i slabá místa databáze, například neexistující indexy, tabulky s jediným sloupcem, tabulky, které lze normalizovat atd.
2. Vytvoření nové databáze v nástroji psql
Před odzkoušením možností nabízených nástrojem SchemaSpy si připravíme novou testovací databázi. K tomuto účelu použijeme standardní interaktivní terminál psql, který uživatelům nabízí pokročilé ovládání přes příkazovou řádku. Terminál spustíme příkazem psql a předáme mu jméno uživatele, který se přihlašuje:
$ psql -U postgres Password for user postgres: psql (9.6.22) Type "help" for help. postgres=#
Po úspěšném přihlášení vytvoříme novou databázi nazvanou test1, a to konkrétně následujícím příkazem:
postgres=# create database test1 CREATE DATABASE
Dále si necháme vypsat seznam všech dostupných databází s využitím takzvaného metapříkazu \l:
postgres=# \l
Výsledek může vypadat takto:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges --------------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | ptisnovs | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres test1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (5 rows)
Metapříkazem \c se přepneme do vybrané databáze:
postgres=# \c test1 You are now connected to database "test1" as user "postgres".
3. Kostra jednoduché databáze s trojicí tabulek
Nyní se můžeme podívat na kostru velmi jednoduché databáze s trojicí tabulek. Struktura této databáze byla inspirována databází Employees Test Database, pouze jsem použil nezkrácená jména tabulek a jednotlivých sloupců (popravdě nevidím jediný důvod, proč toto zkracování někdo provádí, a to zrovna v jazyku SQL, který by měl být čitelný primárně pro lidi):
CREATE TABLE department ( ID integer NOT NULL, name varchar(20) NOT NULL, location varchar(20) NOT NULL ); CREATE TABLE employee ( ID integer NOT NULL, name varchar(20) NOT NULL, job varchar(20) NOT NULL, manager integer, hiredate date NOT NULL, salary integer NOT NULL, comment integer, department integer NOT NULL ); CREATE TABLE project ( ID integer NOT NULL, employee integer NOT NULL, startdate date NOT NULL, enddate date NOT NULL );
4. Konstrukce tabulek s jejich zobrazením v psql
Soubor se specifikací tabulek, jehož obsah byl uveden v předchozí kapitole, se jmenuje db1.sql. V případě, že se tento soubor nachází v pracovním adresáři (cwd – current working directory), lze ho načíst přímo do interaktivního terminálu psql metapříkazem \i:
test1-# \i db1.sql CREATE TABLE CREATE TABLE CREATE TABLE
Předchozí metapříkaz po svém spuštění vypsal pouze tři informace „CREATE TABLE“, což znamená, že tabulky by měly být vytvořeny. O tom se ostatně můžeme snadno přesvědčit, a to s využitím dalšího metapříkazu \dt:
test1-# \dt List of relations Schema | Name | Type | Owner --------+------------+-------+---------- public | department | table | postgres public | employee | table | postgres public | project | table | postgres (3 rows)
Zobrazit si můžeme i strukturu jednotlivých tabulek, a to metapříkazem \d:
test1-# \d employee Table "public.employee" Column | Type | Modifiers ------------+-----------------------+----------- id | integer | not null name | character varying(20) | not null job | character varying(20) | not null manager | integer | hiredate | date | not null salary | integer | not null comment | integer | department | integer | not null
Druhá tabulka:
test1-# \d department Table "public.department" Column | Type | Modifiers ----------+-----------------------+----------- id | integer | not null name | character varying(20) | not null location | character varying(20) | not null
Třetí tabulka:
test1-# \d project Table "public.project" Column | Type | Modifiers -----------+---------+----------- id | integer | not null employee | integer | not null startdate | date | not null enddate | date | not null
Nyní je testovací databáze připravena, takže můžeme interaktivní prostředí terminálu psql ukončit:
test1-# \q
5. Instalace nástroje SchemaSpy
Po přípravě testovací databáze je nutné nainstalovat nástroj SchemaSpy. Ve skutečnosti ovšem není plnohodnotná instalace zapotřebí, protože pouze dostačuje provést dva kroky:
- Stáhnout Java archiv (JAR) s nástrojem SchemaSpy
- Stáhnout JDBC ovladač pro databázi PostgreSQL (JDBC je standardní rozhraní nezávislé na konkrétní databázi, v důsledku ovšem musí komunikovat s konkrétní databází)
Poslední stabilní verzi nástroje SchemaSpy naleznete na stránce https://github.com/schemaspy/schemaspy/releases/tag/v6.1.0. Vyberte soubor pojmenovaný schemaspy-6.1.0.jar a ten si stáhněte do pracovního adresáře.
Z adresy https://jdbc.postgresql.org/download.html si do stejného adresáře stáhněte JDBC ovladač pro databázi PostgreSQL. K dispozici jsou varianty pro tři verze virtuálních strojů a běhových prostředí Javy – JRE 6, JRE 7 a všech novějších JRE.
6. Přepínače používané nástrojem SchemaSpy
Nástroj SchemaSpy podporuje několik desítek přepínačů, ovšem pouze devět z nich je skutečně vyžadováno při práci s databází PostgreSQL. Jedná se o následující přepínače (které využijeme v navazující kapitole):
postgres# | Přepínač | Význam přepínače | Hodnota v příkladu |
---|---|---|---|
1 | -t | typ databáze | psql |
2 | -u | uživatelské jméno pro přihlášení do DB | postgres |
3 | -p | heslo pro přihlášení do DB | |
4 | -host | jméno počítače, na kterém databáze běží | localhost |
5 | -port | port, na kterém databáze běží | je použita výchozí hodnota |
6 | -s | jméno schématu | public |
7 | -o | adresář, do kterého se budou generovat výsledky | test1/test2/test3 |
8 | -db | jméno databáze, která se zkoumá | test1/test2/test3 |
9 | -dp | cesta k JDBC ovladači PostgreSQL | postgresql-42.2.20.jre7.jar |
postgres=# \dn List of schemas Name | Owner --------+---------- public | postgres (1 row)
7. Spuštění SchemaSpy proti zvolené databázi s vygenerováním výsledků
Informace o přepínačích, které byly uvedeny v předchozí kapitole, nyní použijeme pro spuštění nástroje SchemaSpy oproti databázi nazvané test1, již jsme vytvořili v rámci předchozích kroků. Vzhledem k tomu, že SchemaSpy je dodávána ve formě Java archivu (JAR), provede se spuštění přes java -jar (a ve stejném adresáři by měl být umístěn i Java archiv s JDBC ovladačem pro PostgreSQL):
$ java -jar schemaspy-6.1.0.jar -cp . -t pgsql -u postgres -p postgres -host localhost -s public -o test1 -db test1 -dp postgresql-42.2.20.jre7.jar
V případě, že PostgreSQL běží a databáze test1 existuje (měla by), zobrazí se na standardním výstupu postup získávání informací o této databázi i o vytváření výsledků, které budou umístěny do podadresáře pojmenovaného taktéž test1:
____ _ ____ / ___| ___| |__ ___ _ __ ___ __ _/ ___| _ __ _ _ \___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | | ___) | (__| | | | __/ | | | | | (_| |___) | |_) | |_| | |____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, | |_| |___/ 6.1.0 SchemaSpy generates an HTML representation of a database schema's relationships. SchemaSpy comes with ABSOLUTELY NO WARRANTY. SchemaSpy is free software and can be redistributed under the conditions of LGPL version 3 or later. http://www.gnu.org/licenses/ INFO - Starting Main v6.1.0 on localhost.localdomain with PID 17134 (/tmp/ramdisk/schemaspy-6.1.0.jar started by ptisnovs in /tmp/ramdisk) INFO - The following profiles are active: default INFO - Started Main in 1.543 seconds (JVM running for 2.118) INFO - Starting schema analysis INFO - Connected to PostgreSQL - 9.6.22 INFO - Gathering schema details Gathering schema details......(0sec) Connecting relationships......(0sec) Writing/graphing summary.INFO - Gathered schema details in 0 seconds INFO - Writing/graphing summary INFO - Graphviz rendered set to '' ........(0sec) Writing/diagramming detailsINFO - Completed summary in 0 seconds INFO - Writing/diagramming details ...(0sec) Wrote relationship details of 3 tables/views to directory 'test1' in 1 seconds. View the results by opening test1/index.html INFO - Wrote table details in 0 seconds INFO - Wrote relationship details of 3 tables/views to directory 'test1' in 1 seconds. INFO - View the results by opening test1/index.html
8. Zobrazení vygenerované dokumentace
Dokumentace, která byla vygenerována nástrojem SchemaSpy pro naši první testovací databázi, je dostupná na adrese https://tisnik.github.io/presentations/coffee-talks/schemaspy/db1/index.html. Nyní se podívejme na nejzajímavější části této dokumentace. Na listu Tables (což je výchozí list) se zobrazují jak jednotlivé tabulky, tak i pohledy (pochopitelně pokud v databázi existují). List Constraints je prozatím prázdný, stejně jako list Relationships – důvodem je fakt, že v databázi nejsou definovány klíče. Právě z tohoto důvodu jsou všechny tabulky zobrazeny na listu Orphan Tables:
Obrázek 1: „Osamělá“ tabulka department.
Obrázek 2: „Osamělá“ tabulka employee.
Obrázek 3: „Osamělá“ tabulka project.
Důležitý je list Anomalies, který obsahuje seznam všech potenciálních problémů, které nástroj SchemaSpy dokázal detekovat. V našem konkrétním případě nám nástroj říká, že ani jedna tabulka neobsahuje indexy. K tomuto listu se vrátíme v dalších kapitolách.
9. Vylepšení databáze – přidání deklarace primárních klíčů
Databázi nyní vylepšíme, resp. přesněji řečeno vytvoříme novou databázi nazvanou test2, která bude vylepšenou obdobou databáze původní. Konkrétně do všech třech tabulek přidáme deklarace primárních klíčů. V případě testovací databáze se bude jednat o jednoduché (nikoli tedy složené) klíče představované sloupcem ID:
CREATE TABLE department ( ID serial PRIMARY KEY, name varchar(20) NOT NULL, location varchar(20) NOT NULL ); CREATE TABLE employee ( ID serial PRIMARY KEY, name varchar(20) NOT NULL, job varchar(20) NOT NULL, manager integer, hiredate date NOT NULL, salary integer NOT NULL, comment integer, department integer NOT NULL ); CREATE TABLE project ( ID serial PRIMARY KEY, employee integer NOT NULL, startdate date NOT NULL, enddate date NOT NULL );
10. Vytvoření databáze, automatický vznik indexů pro primární klíče
Databázi představovanou výše zmíněnou trojicí tabulek opět vytvoříme s využitím interaktivního terminálu psql. Postup je naprosto stejný, jako tomu bylo v prvním demonstračním příkladu:
$ psql -U postgres Password for user postgres: psql (9.6.22) Type "help" for help. postgres=# create database test2; CREATE DATABASE postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges --------------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | ptisnovs | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres test1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | test2 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (6 rows) postgres=# \c test2 You are now connected to database "test2" as user "postgres".
Databáze byla vytvořena, takže načteme a spustíme skript, který v ní vytvoří i všechny tři tabulky:
test2=# \i db2.sql CREATE TABLE CREATE TABLE CREATE TABLE test2=# \dt List of relations Schema | Name | Type | Owner --------+------------+-------+---------- public | department | table | postgres public | employee | table | postgres public | project | table | postgres (3 rows)
Tabulky skutečně existují, takže se podívejme, jak jsou nyní v databázi uloženy:
test2=# \d employee Table "public.employee" Column | Type | Modifiers ------------+-----------------------+------------------------------------------------------- id | integer | not null default nextval('employee_id_seq'::regclass) name | character varying(20) | not null job | character varying(20) | not null manager | integer | hiredate | date | not null salary | integer | not null comment | integer | department | integer | not null Indexes: "employee_pkey" PRIMARY KEY, btree (id) test2=# \d department Table "public.department" Column | Type | Modifiers ----------+-----------------------+--------------------------------------------------------- id | integer | not null default nextval('department_id_seq'::regclass) name | character varying(20) | not null location | character varying(20) | not null Indexes: "department_pkey" PRIMARY KEY, btree (id) test2=# \d project Table "public.project" Column | Type | Modifiers -----------+---------+------------------------------------------------------ id | integer | not null default nextval('project_id_seq'::regclass) employee | integer | not null startdate | date | not null enddate | date | not null Indexes: "project_pkey" PRIMARY KEY, btree (id)
11. Opětovné spuštění SchemaSpy s vygenerováním výsledků
Nyní si necháme vygenerovat dokumentaci i ke druhé testovací databázi, která byla vytvořena v rámci předchozích dvou kapitol. Postup je stále stejný, pouze změníme jméno databáze a taktéž jméno adresáře, do něhož se dokumentace vygeneruje:
$ java -jar schemaspy-6.1.0.jar -cp . -u postgres -t pgsql -p postgres -o test2 -host localhost -db test2 -dp postgresql-42.2.20.jre7.jar -s public ____ _ ____ / ___| ___| |__ ___ _ __ ___ __ _/ ___| _ __ _ _ \___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | | ___) | (__| | | | __/ | | | | | (_| |___) | |_) | |_| | |____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, | |_| |___/ 6.1.0 SchemaSpy generates an HTML representation of a database schema's relationships. SchemaSpy comes with ABSOLUTELY NO WARRANTY. SchemaSpy is free software and can be redistributed under the conditions of LGPL version 3 or later. http://www.gnu.org/licenses/ INFO - Starting Main v6.1.0 on localhost.localdomain with PID 18080 (/tmp/ramdisk/schemaspy-6.1.0.jar started by ptisnovs in /tmp/ramdisk) INFO - The following profiles are active: default INFO - Started Main in 1.674 seconds (JVM running for 2.293) INFO - Starting schema analysis INFO - Connected to PostgreSQL - 9.6.10 INFO - Gathering schema details Gathering schema details......(0sec) Connecting relationships......(0sec) Writing/graphing summary.INFO - Gathered schema details in 0 seconds INFO - Writing/graphing summary INFO - Graphviz rendered set to '' ........(0sec) Writing/diagramming detailsINFO - Completed summary in 0 seconds INFO - Writing/diagramming details ...(0sec) Wrote relationship details of 3 tables/views to directory 'test2' in 1 seconds. View the results by opening test2/index.html INFO - Wrote table details in 0 seconds INFO - Wrote relationship details of 3 tables/views to directory 'test2' in 1 seconds. INFO - View the results by opening test2/index.html
Výsledek je dostupný na adrese https://tisnik.github.io/presentations/coffee-talks/schemaspy/db2/index.html. Pokud přejdete na list Anomalies, je patrné, že se již nevypisuje informace o chybějících indexech.
12. Třetí varianta databáze s cizími klíči
Podívejme se nyní na třetí a současně i poslední variantu databáze, nyní doplněné o cizí klíče. Zajímavá je situace v tabulce employee, protože manažer nějakého zaměstnance je taktéž zaměstnanec, takže tento cizí klíč odkazuje na stejnou tabulku:
CREATE TABLE department ( ID integer NOT NULL, name varchar(20) NOT NULL, location varchar(20) NOT NULL, PRIMARY KEY (ID) ); CREATE TABLE employee ( ID integer NOT NULL, name varchar(20) NOT NULL, job varchar(20) NOT NULL, manager integer, hiredate date NOT NULL, salary integer NOT NULL, comment integer, department integer NOT NULL, PRIMARY KEY (ID), CONSTRAINT fk_manager FOREIGN KEY (manager) REFERENCES employee (ID) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT fk_department FOREIGN KEY (department) REFERENCES department (ID) ON DELETE RESTRICT ON UPDATE NO ACTION ); CREATE TABLE project ( ID integer NOT NULL, employee integer NOT NULL, startdate date NOT NULL, enddate date NOT NULL, PRIMARY KEY (ID), CONSTRAINT fk_project FOREIGN KEY (employee) REFERENCES employee (ID) ON DELETE NO ACTION ON UPDATE CASCADE );
13. Vytvoření databáze, včetně cizích klíčů
Databázi vytvoříme podobně, jako předchozí dvě databáze, takže si jen ukažme jednotlivé operace bez jejich podrobnějšího procesu:
$ psql -U postgres Password for user postgres: psql (9.6.22) Type "help" for help. postgres=# create database test3; CREATE DATABASE test3=# \i db3.sql CREATE TABLE CREATE TABLE CREATE TABLE test3=# \dt List of relations Schema | Name | Type | Owner --------+------------+-------+---------- public | department | table | postgres public | employee | table | postgres public | project | table | postgres (3 rows) test3=# \d employee Table "public.employee" Column | Type | Modifiers ------------+-----------------------+----------- id | integer | not null name | character varying(20) | not null job | character varying(20) | not null manager | integer | hiredate | date | not null salary | integer | not null comment | integer | department | integer | not null Indexes: "employee_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "fk_department" FOREIGN KEY (department) REFERENCES department(id) ON DELETE RESTRICT "fk_manager" FOREIGN KEY (manager) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE SET NULL Referenced by: TABLE "employee" CONSTRAINT "fk_manager" FOREIGN KEY (manager) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE SET NULL TABLE "project" CONSTRAINT "fk_project" FOREIGN KEY (employee) REFERENCES employee(id) ON UPDATE CASCADE test3=# \d employee Table "public.employee" Column | Type | Modifiers ------------+-----------------------+----------- id | integer | not null name | character varying(20) | not null job | character varying(20) | not null manager | integer | hiredate | date | not null salary | integer | not null comment | integer | department | integer | not null Indexes: "employee_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "fk_department" FOREIGN KEY (department) REFERENCES department(id) ON DELETE RESTRICT "fk_manager" FOREIGN KEY (manager) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE SET NULL Referenced by: TABLE "employee" CONSTRAINT "fk_manager" FOREIGN KEY (manager) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE SET NULL TABLE "project" CONSTRAINT "fk_project" FOREIGN KEY (employee) REFERENCES employee(id) ON UPDATE CASCADE test3=# \d project Table "public.project" Column | Type | Modifiers -----------+---------+----------- id | integer | not null employee | integer | not null startdate | date | not null enddate | date | not null Indexes: "project_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "fk_project" FOREIGN KEY (employee) REFERENCES employee(id) ON UPDATE CASCADE
14. Spuštění SchemaSpy a zobrazení změn v dokumentaci
Vygenerování dokumentace ke třetí variantě databáze:
$ java -jar schemaspy-6.1.0.jar -cp . -u postgres -t pgsql -p postgres -o test3 -host localhost -db test3 -dp postgresql-42.2.20.jre7.jar -s public
Výsledek je dostupný na adrese https://tisnik.github.io/presentations/coffee-talks/schemaspy/db3/index.html. Nyní je již vyplněn list Constraints s informacemi o cizích klíčích. Taktéž došlo ke změnám na listu Relationships, protože tabulky jsou svázány přes cizí klíče:
Obrázek 4: Tabulky svázané přes trojici cizích klíčů.
15. Export dokumentace o databázi do formátu XML
Dokumentaci o databázi lze uložit do formátu XML. Ve skutečnosti se toto XML generuje vždy současně s tvorbou HTML stránek, ovšem HTML výstup lze zakázat volbou -nohtml (což se hodí například pro CI):
$ java -jar schemaspy-6.1.0.jar -cp . -nohtml -u postgres -t pgsql -p postgres -o test3 -host localhost -db test3 -dp postgresql-42.2.20.jre7.jar -s public ____ _ ____ / ___| ___| |__ ___ _ __ ___ __ _/ ___| _ __ _ _ \___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | | ___) | (__| | | | __/ | | | | | (_| |___) | |_) | |_| | |____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, | |_| |___/ 6.1.0 SchemaSpy generates an HTML representation of a database schema's relationships. SchemaSpy comes with ABSOLUTELY NO WARRANTY. SchemaSpy is free software and can be redistributed under the conditions of LGPL version 3 or later. http://www.gnu.org/licenses/ INFO - Starting Main v6.1.0 on localhost.localdomain with PID 13998 (/tmp/ramdisk/schemaspy-6.1.0.jar started by ptisnovs in /tmp/ramdisk) INFO - The following profiles are active: default INFO - Started Main in 1.125 seconds (JVM running for 1.567) INFO - Starting schema analysis INFO - Gathering schema details
V tomto případě bude výsledkem adresář test3 s trojicí souborů:
$ ls -l test3 total 16 -rw-rw-r--. 1 ptisnovs ptisnovs 28 Jun 9 19:56 deletionOrder.txt -rw-rw-r--. 1 ptisnovs ptisnovs 28 Jun 9 19:56 insertionOrder.txt -rw-rw-r--. 1 ptisnovs ptisnovs 4206 Jun 9 19:56 test3.public.xml
Důležitý je právě poslední soubor s definicí databázového schématu, jenž je možné dále zpracovat prakticky libovolným XML procesorem.
16. Příloha: databáze podporované nástrojem SchemaSpy s požadovanými parametry
Podporované databáze i přepínače, které je nutné použít pro připojení, lze získat následovně:
$ java -jar schemaspy-6.1.0.jar -dbhelp
Výsledky:
IBM DB2 with the 'App' Driver (-t db2) -db database name IBM DB2 for i (former as400) driver (-t db2i) -host host of database, may contain port -port optional port if not default -db database SID as known on host IBM DB2 with the Type 4 'Net' Driver (-t db2net) -host host of database, may contain port -port optional port if not default -db database name IBM DB2 for z/OS with the 'App' Driver (-t db2zos) -db database name IBM DB2/zos with the Type 4 'Net' Driver (-t db2zosnet) -host host of database, may contain port -port optional port if not default -db database name Derby Embedded Server (-t derby) -db path to database Derby Network Server (-t derbynet) -host host of database, may contain port -port optional port if not default -db database name Firebird (-t firebird) -host host of database, may contain port -port optional port if not default -db database name Force (-t force) H2 Server (-t h2) -db database name Hive (-t hive) -host database host -port database port -db database name Hive with keytab support (-t hive-kerberos-driverwrapper) -host database host -port database port -db database name -principal the principal to use Hive with keytab support configured for service discovery using zookeeper (-t hive-kerberos-driverwrapper-zookeeper) -host database host -port database port -db database name HSQLDB Server (-t hsqldb) -host host of database, may contain port -port optional port if not default -db database name Imapla (-t impala) -host host of database, may contain port -port optional port if not default -db database name InformixSQL (-t informix) -host host of database, may contain port -port optional port if not default -db database name -server database server Microsoft SQL Server JTDS (-t jtds) -host host of database, may contain port -port optional port if not default -db database name MariaDB (-t mariadb) -host host of database, may contain port -port optional port if not default -db database name MaxDB (-t maxdb) -host Name of the computer on which the database instance is running -db Name of database instance Microsoft SQL Server (-t mssql) -host host of database, may contain port -port optional port if not default -db database name jTDS JDBC Driver for Microsoft SQL 2000/2005 Server (-t mssql-jtds) -host host of database, may contain port -port optional port if not default -db database name jTDS JDBC Driver for Microsoft SQL 2000/2005 Server (-t mssql-jtds-instance) -host host of database, may contain port -port optional port if not default -db database name -instance Named instance to connect to Microsoft SQL Server 2005+ (-t mssql05) -host host of database, may contain port -port optional port if not default -db database name jTDS JDBC Driver for Microsoft SQL 2000/2005 Server (-t mssql05-jtds) -host host of database, may contain port -port optional port if not default -db database name jTDS JDBC Driver for Microsoft SQL 2000/2005 Server (-t mssql05-jtds-instance) -host host of database, may contain port -port optional port if not default -db database name -instance Named instance to connect to Microsoft SQL Server 2008+ (-t mssql08) -host host of database, may contain port -port optional port if not default -db database name jTDS JDBC Driver for Microsoft SQL Server 2008+ (-t mssql08-jtds) -host host of database, may contain port -port optional port if not default -db database name jTDS JDBC Driver for Microsoft SQL Server 2008+ (-t mssql08-jtds-instance) -host host of database, may contain port -port optional port if not default -db database name -instance Named instance to connect to MySQL (-t mysql) -host host of database, may contain port -port optional port if not default -db database name MySQL (-t mysql-socket) -host host where database resides with optional port -db database name -socketFactory ClassName of socket factory which must be in your classpath -socket Path To Socket Netezza (-t netezza) -host host of database, may contain port -port optional port if not default -db Oracle with OCI8 Driver (-t ora) -db database name (from TNSNAMES.ORA) Oracle with Thin Driver (-t orathin) -host host of database, may contain port -port optional port if not default -db database SID as known on host Oracle with Thin Driver (-t orathin-service) -host host of database, may contain port -port optional port if not default -db database (service) as known on host PostgreSQL (-t pgsql) -host host of database, may contain port -port optional port if not default -db database name PostgreSQL (-t pgsql11) -host host of database, may contain port -port optional port if not default -db database name Amazon redshift (-t redshift) -host host of database, may contain port -port optional port if not default -db database name Snowflake (-t snowflake) -account hostname before 'snowflakecomputing.com' -role Snowflake user role -warehouse Snowflake warehouse -db SQLite (-t sqlite) -db path to database or :memory: SQLite (-t sqlite-xerial) -db path to database or :memory: Sybase Server (jdbc3) (-t sybase) -host host of database, may contain port -port optional port if not default -db database name Sybase Server (jdbc2) (-t sybase2) -host host of database, may contain port -port optional port if not default -db database name Sybase Server (jdbc4) (-t sybase3) -host database server host -port database port on host -db database name Teradata (-t teradata) -db database name -s ????? -port ????? DB2 UDB Type 4 Driver (-t udbt4) -host host of database, may contain port -port optional port if not default -db database name
17. Skripty pro vytvoření tabulek
Skripty určené pro vytvoření tabulek ve třech demonstračních databázích byly uloženy do Git repositáře, který je dostupný na adrese https://github.com/tisnik/presentations. Odkazy na jednotlivé skripty naleznete v následující tabulce:
# | Skript | Stručný popis skriptu | Cesta |
---|---|---|---|
1 | db1.sql | kostra jednoduché databáze s trojicí tabulek | https://github.com/tisnik/presentations/blob/master/SchemaSpy/db1.sql |
2 | db2.sql | přidání primárních klíčů do databáze | https://github.com/tisnik/presentations/blob/master/SchemaSpy/db2.sql |
3 | db3.sql | přidání cizích klíčů do databáze | https://github.com/tisnik/presentations/blob/master/SchemaSpy/db3.sql |
18. Odkazy na Internetu
- Employees Test Database
https://github.com/cristiscu/employees-test-database - SchemaSpy home page
http://schemaspy.org/](http://schemaspy.org/ - SchemaSpy (verze pro starší JVM)
http://schemaspy.sourceforge.net/ - SchemaSpy na GitHubu
https://github.com/schemaspy/schemaspy - SchemaSpy download page
https://github.com/schemaspy/schemaspy/releases/tag/v6.1.0 - SchemaSpy on PostgreSQL wiki
https://wiki.postgresql.org/wiki/SchemaSpy - SchemaSpy Documentation
https://schemaspy.readthedocs.io/_/downloads/en/latest/pdf/ - PostgreSQL JDBC driver download page
https://jdbc.postgresql.org/download.html - PostgreSQL Primary Key
https://www.postgresqltutorial.com/postgresql-primary-key/ - PostgreSQL Foreign Key
https://www.postgresqltutorial.com/postgresql-foreign-key/ - psql man page
https://linux.die.net/man/1/psql - GraphViz Pocket Reference
https://graphs.grevian.org/example - graphviz(3) – Linux man page
https://linux.die.net/man/3/graphviz - dot(1) – Linux man page
https://linux.die.net/man/1/dot - neato(1) – Linux man page
https://linux.die.net/man/1/neato - twopi(1) – Linux man page
https://linux.die.net/man/1/twopi - circo(1) – Linux man page
https://linux.die.net/man/1/circo - fdp(1) – Linux man page
https://linux.die.net/man/1/fdp - sfdp(1) – Linux man page
https://linux.die.net/man/1/sfdp - Graphviz – Graph Visualization Software
http://www.graphviz.org/ - graphviz (Manual Page)
http://www.root.cz/man/7/graphviz/