Databázy GIS

Úvod

Pri spracúvaní väčšieho množstva údajov vznikla už v minulosti potreba násť nejaký štandardný spôsob ako údaje usporiadať ukladať tak aby ich bolo možné ľahko triediť, jednoducho filtrovať, vyberať z nich nejakú podskupinu podľa určitého kritéria atď. Praktické riešenie týchto požiadaviek priniesli počítačové databázy. Z viacerých databázových modelov sa v praxi ujal model relačnej databázy. Okrem spracovania textových tabuľkových údajov sa vďaka rozšíreniam dajú v súčasnosti do databáz ukladať aj vektorové údaje -- spôsob ich ukladania do databáz bol dokonca štandardizovaný OpenGIS konzorciom. Cieľom cvičení z predmetu Databázy GIS bude na precvičiť si na praktických príkladch návrh, prípravu a založenie databázy, návrh dopytov na databázu a tvorbu užívateľského rozhrania k databáze.

Text je rozdelený do šiestich častí a je doplnkom k 6 dvojhodinovým cvičeniam.

1. databázy, jazyk SQL, relačné databázové systémy

– charakteristika (MS SQL, MySQL, PostgreSQL, ORACLE, SQLite), základné údajové typy

Postup spojazdnenia databázy PostgreSQL

Nasledujúci postup sa vzťahuje na inštaláciu PotgreSQL verzie 8.2.x na operačný systém MS Windows XP (v prípade inej verzie databázy alebo operačného systému sa postup môže mierne líšiť.

Inštalácia PostgreSQL

  1. Stiahnuť zo stránky http://www.postgresql.org zip archív s databázovým systémom
  2. Stiahnutý ZIP archív rozbaliť napr. do adresára d:\studenti\
  3. Vytvoríme si adresár do ktorého sa budú ukladať údaje a konfiguračné súbory konkrétnej databázy (napr. adresár s názvom data -- d:\studenti\pgsql\data)

Nastavenie premenných

Na to aby databázový systém fungoval je potrebné v systéme Windows nastaviť cesty do adresárov pgsql/lib a pgsql/bin. možno to urobiť dočasne z príkazového riadku (Command prompt) nasledujúcim príkazom:

PATH=%PATH%;D:\studenti\pgsql\lib;D:\studenti\pgsql
          
Druhou možnosťou je nastaviť to natrvalo (len v prípade že máme práva správcu systému) -- My computer-Properties-Advanced-Enviroment variables (alebo tak dáko).

Inicializácia databázy

Pred vytvorením samotnej databázy je potrebné inicializovať databázový systém. Týmto krokom sa v nami určenom adresári vytvoria konfiguračné súbory a pripraví sa tak prostredie pre vytvorenie samotnej databázy. Na inicializáciu sa využíva program initdb s parametrom -D (za parametrom sa uvádza cesta k adresáru v ktorom budú ukladané údaje a konfiguračné súbory.

Inicializácia by mala prebehnúť nasledujúcim spôsobom

D:\initdb.exe -D D:\studenti\pgsql\data
The files belonging to this database system will be owned by user "student".
This user must also own the server process.

The database cluster will be initialized with locale Slovak_Slovakia.1250.
The default database encoding has accordingly been set to WIN1250.
initdb: could not find suitable text search configuration for locale Slovak_Slov
akia.1250
The default text search configuration will be set to "simple".

fixing permissions on existing directory D:/studenti/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 32MB/204800
creating configuration files ... ok
creating template1 database in D:/studenti/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    "postgres" -D "D:/studenti/pgsql/data"
or
    "pg_ctl" -D "D:/studenti/pgsql/data" -l logfile start
        

Zapnutie databázového systému

Na to aby sme mohli vytvoriť databázu alebo pracovať s databázou už jestvujúcou je potrebné spustenie databázového systému. Na zapínanie, vypínanie a reštart databázového systému slúži príkaz pg_ctl. Cez parameter -D je potrebné uviesť cestu k adresáu určenému pre údaje databázy. Povinným parametrom je akcia ktorú má pg_ctl vykonať. Povolené hodnoty sú start (zapnutie systému), stop (vypnutie), restart (reštart).

Úspešné zapnutie systému by malo vyzerať nasledovne:

D:\pg_ctl.exe -D D:\studenti\pgsql\data start
server starting
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
        

Tvorba databázy

Novú databázu vytvoríme príkazom createdb. Ako parameter treba uviesť názov novej databázy. Vytvorenie databázy test prebehne nasledovne:

D:\createdb.exe test
        

Odstránenie databázy

Databázu odstraňujeme príkazom dropdb. Syntax je rovnaká ako pri createdb.

Konzola psql

Pracovať s databázou pomocou jazyka SQL možno viacerými spôsobmi. Najjedoduchšie je použiť textovú konzolu psql. Parametrom je názov databázy ku ktorej sa pripája. Okrem príkazov jazyka SQL možno využiť aj interné príkazy konzoly ktoré sa zadaávajú cez spätnú lomku. Ich zoznam získame cez \h

D:\studenti\pgsql\bin>psql.exe test
Welcome to psql 8.2.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

Warning: Console code page (852) differs from Windows code page (1250)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.

                                                                      ^
test=#

test=# \q
        
Tvorba tabuliek

Na vytvorenie novej tabuľky sa využíva v jazyku SQL príkaz CREATE TABLE. Nasledujúci príkaz vytvorí novú tabuľku "zamestnanci" ktorá bude obsahovať stĺpce id, meno, priezvisko. Za stĺpcom sa uvádza typ údajov -- int4 je 4 bytový integer (celé číslo), varchar(cislo) je reťazec s premennou dĺžkou nšepresahujucou dlzku uvedenu v zatvorke (pocet znakov)

test=# CREATE TABLE zamestnanci (id int4,meno varchar(50),priezvisko varchar(50));
CREATE TABLE
test=# 
        

Príkazy jazyka SQL by sa mali písať veľkými písmenami (nie je to povinné, ale je to zaužívaná konvencia). Ksaždý príkaz sa vykoná len ak je ukončený bodkočiarkou. V opačnom prípade sa očakáva ďalší vstup.

Vkladanie údajov

Údaje do tabuliek sa vkladajú príkazom INSERT INTO nazov_tabulky VALUES ('hodnota_1_atributu', 'hodnota_2_atributu', 'hodnota_3_atributu'). Číselné hodnoty sa nemusia uzatvárať do apostrofov, všetky ostatné hodnoty však áno.

test=# INSERT INTO zamestnanci VALUES ('1','Adam','Šangala');
INSERT 0 1
test=# INSERT INTO zamestnanci VALUES ('2','Maco','Mlieč');
INSERT 0 1
test=# INSERT INTO zamestnanci VALUES ('3','Juraj','Jánošík');
INSERT 0 1
        
Dopyty

Na tvorbu dopytov slúži príkaz SELECT. Napr.



test=# SELECT * FROM zamestnanci;
 id | meno | priezvisko
----+------+------------
  1 | Adam | Šangala
(1 row)

Klauzula WHERE

Požadované údaje možno bližšie určiť cez kluzulu WHERE za ktorou nasleduje podmienka, ktorej budú vyhovovať všetky vrátené záznamy – napríklad:

test=# SELECT * FROM zamestnanci WHERE id=2;
 id | meno  | priezvisko
----+-------+------------
  2 | Maco  | Mlieč
(1 row)

test=# SELECT * FROM zamestnanci WHERE id>1;
 id |  meno  | priezvisko
----+--------+------------
  2 | Maco   | Mlieč
  3 | Juraj  | Jánošík
(2 rows)

Usporiadanie
Pomocou ORDER BY ASC/DESC (aj viac stĺpcov) doplneného na koniec výrazu SELECT možno usporiadať záznamy vzostupne (ASC) alebo zostupne (DESC)

SELECT nieco, (jeden_atr*druhy_atr)/2 AS priemer_atr) FROM TABLE teploty;

Operátory spájajúce podmienky

DISTINCT
Usporiadanie
SELECT * from tab1,tab2 WHERE atr_tab1=atr_tab2;

Adresovanie stlpcov tabuliek

tab1.atr2 tab2.atr3

SLECT * from tab1 INNER JOIN tab2 ON tab1.atr1=tab2.atr1

relablovanie SELECT kost FROM chladnicka CHLL;


select max(id) from tabulka;


zlozeny select; select from nieco where stlpec=(select max(a) from b);

Priestorové rozšírenie databázy

Inštalácia PostGIS

Rozšírenie databázy o priestorové funkcie a atd

D:\studenti\pgsql\bin>createlang.exe plpgsql test

D:\studenti\pgsql\bin>psql test -f D:\studenti\pgsql\share\contrib\lwpostgis.sql

D:\studenti\pgsql\bin>psql test -f D:\studenti\pgsql\share\contrib\spatialreferences.sql

Záver

Vypnutie databázy

2. normalizácia, import geografických údajov, tvorba relácií, relačné väzby

3. tabuľky s priestorovou informáciou, databázové funkcie, priestorové dopyty, funkcie na priestorové dopyty

4. bezpečnosť databáz, interoperabilita databáz, previazanie z inými zdrojmi údajov

5. návrh a realizácia geografickej databázy (návrh konceptuálneho, logického, fyzického modelu, návrh dopytov)

6. tvorba užívateľského rozhrania k databáze (PHP, Openoffice Databaze, Qt4)