Kategória: Linux všeobecne

Zmenené: 13. január 2013

Modelovanie SQL v Dia

Hľadáte grafický nástroj na modelovanie relačnej databázy? Použite Dia a vytvorte si z neho SQL pomocou parsediasql a myslím, že budete s výsledkom veľmi spokojný.

Nástroj na tvorbu diagramov Diaje podľa mňa trochu kontroverzný. Jeho ovládanie nepatrí k najintuitívnejším, poriadny panel nástrojov chýba (efektívnosť práce), grafický dizajn výstupu dá prácu Naproti týmto nelichotivým veciam však poskytuje možnosť navrhnúť diagram prakticky čohokoľvek, počnúc schémami počítačových sietí, vývojových diagramov a končiac UML (Unified Modeling Language).

Práve posledne menované, diagramy UML, je možné využiť aj na modelovanie databáz. Ale nie len modelovanie. Pomocou externého nástroja parsediasql možno zaistiť export modelu vo formáte SQL. Tento nástroj na export modelu Diado SQL podporuje viacero formátov, medzi inými podporuje databázy MySQL, PosgreSQL, SQLite3 a ďalšie.

Podporované typy

Pomocou parsediasql možno z modelu databázy vygenerovať SQL pre viacero typov databáz, ich zoznam sa môže meniť a nástroj nemá priamo voľnu na výpis podporovaných typov, pomôže však jednoduchý trik spustiť program s neexistujúcim typom a v chybovom hlásení budú typy vypísané:

parsediasql --file súbor.dia --db daco
[FATAL] Unsupported database daco. Valid options are db2, html, informix, ingres, innodb,
mssql, mysql-innodb, mysql-myisam, oracle, postgres, sas, sqlite3, sqlite3fk, sybase
...

Rada

Pri tomto triku musí byť zadaný ako pramater –file, tak i parameter –db.

Export do SQL

V tomto okamžiku by ste mali byť schopný vytvoriť model svojej databázy, to čo ostáva, je jeho export do SQL. Ako som už spomenul, poslúži nástroj parsediasql. Môžete si ho stiahnuť z domovskej stránky adresára CPAN, kde by mal byť odkaz na aktuálnu verziu (v dobe písania článku 0.20). V Debiane je tento nástroj v úložisku, schovaný v balíku s menom libparse-dia-sql-perl, ktorý prosto nainštalujete pomocou APT(odporúčam aptitude).

Po nainštalovaní ho môžete spustiť, ale je mu treba zadať niekoľko parametrov, pričom povinnú sú dva:

  • –file CESTA
  • –db TYP_DB

kde CESTA je cesta k súboru Dia, ktorý chcete exportovať do SQL a TYP_DB udáva pre ktorý databázy má byť vygenerované SQL. Okrem týchto dvoch je užitočnou ešte voľba –ignore_type_mismatch, ktorá sa postará o ignorovanie chýb v identite typov prvkov stĺpcov prepojených reláciou.

Výsledné SQL je vypísané na štandardný výstup, ak ho chcete dostať do súboru, stačí presmerovať výstup, takže príklad:

parsediasql --ignore_type_mismatch --db sqlite3 --file databaza.dia > databaza.sql

Tip

Od verzie 0.22 je k dispozícii aj typ databázy sqlite3fk, ktorý na rozdiel od sqlite3 pridáva priamu podporu vzdialených kľúčov (foreign key).

Vyššie použitý príklad by bol vygenerovaný ako takéto SQL:

-- get_schema_create
create table akvarium (
   id         INTEGER UNIQUE AUTOINCREMENT not null,--  Identifikátor
   meno       TEXT                         NOT NULL,--  Neprázdne meno akvária
   popis      TEXT                                 ,--  Popis akvária
   id_obrazok INTEGER                              ,
   constraint pk_akvarium primary key (id)
)   ;
create table akva_images (
   id      INTEGER UNIQUE AUTOINCREMENT not null,
   nazov   TEXT                         NOT NULL,
   obrazok BLOB                         NOT NULL,
   constraint pk_akva_images primary key (id)
)   ;

-- get_view_create
create view akva_view as select
    a.meno AS meno,a.popis AS popis,i.obrazok AS obrazok
    from akva_images i
    where (akvarium.id_obrazok is not null)
    and (akva_images is not null)
    order by akvarium.id;

-- get_inserts
insert into akvarium (id, meno, popis) values(1, 'Predvolené', 'Predvolené akvárium') ;

Záver

Keď som objavil túto možnosť, veľmi som sa potešil. Moju radosť trochu kalí neexistencia priamej podpory vzdialených kľúčov pre SQLite3, ale v iných databázach podporované sú. V tomto návode som sa nepokúšal o vytvorenie kompletného popisu možností. Jednak nie som na databázy práve expert, jednak všetky možnosti parsediasql sám nepoznám, ale snažil som sa predstaviť šikovný nástroj (teda kombináciu nástrojov) na grafické modelovanie.

V prípade, že chcete pátrať po ďalších možnostiach, odporúčam manuálovú stránku parsediasql(1), stránku s popisom starého nástroja na export do SQL (Using Dia to Interact With tedia2sql), ako i množstvo príkladov, ktoré sú súčasťou parsediasql (v Debiane stačí stiahnuť zdrojový balík, súčasťou binárneho nie sú).