Baze podataka 1. PostgreSQL 7.0.3 PostgreSQL je objektno-relacijski sustav za upravljanje bazama podataka. U ovom poglavlju opisana je instalacija PostgreSQL-a 7.0.3 na Mandrake 8.0 operacijskom sustavu te mogući problemi pri instalaciji. Potpunu dokumentaciju moguće je naći na adresi: http://www.postgresql.org Na slici 10.1 prikazana je osnovna struktura PostgreSQL sustava. Koristi se jednostavni "proces po korisniku" klijent-server model. U jednoj sesiji aktivna su slijedeća tri procesa: z z z
aemon proces (postmaster) korisnička aplikacija (npr. psql monitor) postgres proces (jedan ili više servera s bazom podataka)
Slika 1.1 Struktura PostgreSQL servera Postmaster je proces na serverskoj strani koji omogućava spajanje korisnika na bazu podataka te upravlja podacima iz više bazi podataka na jednom serveru. Nakon zahtjeva korisnika postmaster starta proces server. Biblioteka (library) libpq omogućava jednom korisniku stvaranje nekoliko konekcija (na više procesa sa serverske strane). 1.1. Instalacija PostgreSQL-a 7.0.3 U Mandrake 8.0 operacijskom sustavu PostgreSQL instaliramo tako da u Software Manageru odaberemo potrebne software-ske pakete. Osnovni paketi koje je potrebno instalirati su postgresql i postgresql-server. Ako želimo testirati rad PostgreSQL-a potrebno je instalirati i paket postgresql-test. U ovom paketu nalaze se razni testovi za baze podataka kreirane u PostgreSQLu, a njihovo korištenje preporučuje se samo naprednim korisnicima. Instalacija je vrlo brza i u pravilu prolazi bez problema. 1.2. Rad u PostgreSQL-u 7.0.3 Prije početka rada moramo odrediti koji će korisnici imati pristup pojedinim bazama podataka. Nakon instalacije po defaultu postoji samo jedan korisnik
(user) - postgres. Postgres je ujedno i super-korisnik (superuser) jer može kreirati nove korisnike. Isto tako postoji i default-na baza podataka postgres. Aplikaciju startamo tako da u terminalu napišemo: # psql postgres -U postgres Time smo pokrenuli psql monitor koji je korisničko sučelje prema PostgreSQL bazi podataka. Prvi argument označava da smo pokrenuli bazu podataka postgres, a opcija -U označava postgres korisnika. Sada naredbom CREATE USER možemo definirati nove korisnike. Novim korisnicima na slijedeći način možemo dati pravo kreiranja baza podataka i novih korisnika: >CREATE USER Marko CREATEDB CREATEUSER Navedenom naredbom stvorili smo novog korisnika Marko koji može kreirati nove baze podataka i nove korisnike (budući da može kreirati nove korisnike on je superuser). Popis naredbi psql monitora dobiva se ako u promptu upišemo /h. Više informacija o psql-u moguće je dobiti naredbom man psql.
Slika 1.2 Osnovni prozor pgaccessa PostgreSQL 7.0.3 možemo koristiti i pomoću grafičkog sučelja. Ako smo instalirali odgovarajući paket (PosgreSQL-tk) grafičko sučelje pokreće se naredbom pgaccess. Na slici 10.2 prikazan je osnovni prozor pgaccess-a. Novu bazu možemo kreirati odabirom opcije Database a zatim new. Na slici 10.2 prikazan je prozor u kojem određujemo parametre nove baze. Budući da je
pgaccess pisan u Tcl/Tk-u za njegovo korištenje potrebno je instalirati i Tcl/Tk PostgreSQL pakete.
Slika 1.3 Kreiranje nove tablice 1.3. Problemi pri instalaciji Sama instalacija PostgreSQL-a u pravilu prolazi bez problema. Poteškoće koje se mogu javiti pri startanju psql monitor-a uglavnom su vezane uz dozvole pristupa pojedinim datotekama. U takvim slučajevima potrebno je kontaktirati administratora operacijskog sustava. Za korišenje pgaccess-a potrebno je omogućiti koruštenje TCP/IP protokola. Ako je PostgreSQL instaliran u Software Manageru potrebno je u datoteci etc/rc.d/init.d/postgres u 83. liniju iza staze postmaster-a dodati parametre -o "i". Tada će dio navedene linija izgledati: -p /usr/bin/postmaster -o "-i" Ako postmaster startamo iz prompt-a parametar -I potrebno je dodati na slijedeći način: # postmaster -i & Detaljnu dokumentaciju o PostgreSQL-u i pgaccessu moguće je naći na adresama: http://www.postgresql.org
http://www.flex.ro/pgaccess/contents.html
2. MySQL MySQL je relacijski sustav za upravljanje bazama podataka. U ovom poglavlju opisana je instalacija MySQL -a na Mandrake 8.0 operacijskom sustavu te mogući problemi pri instalaciji. Potpunu dokumentaciju moguće je naći na adresi: http://www.mysql.com Na slici 2.1 prikazana je osnovna struktura MySQL -a sustava. Koristi se jednostavni klijent-server model.
Slika 2.1 Struktura Mysql-a Na MySQL serveru može postojati jedna ili više shema na koje se spaja jedan ili više klijenata. Klijent može biti MySQL klijent ili neka druga aplikacija koja koristi bazu podataka. 2.1. Instalacija MySQL-a Sa Mandrake 8.0 distribucijom u paketu ne dolazi MySQL, već ju je potrebno posebno skinuti sa oficijelnog MySQL weba ili nekog drugog. Preporučamo skidanje rpm paketa koji su jednostavni za instalaciju. Potrebno je skinuti MySQL server rpm paket i MySQL client rpm paket. Instalacija je veoma jednostavna # rpm -i Mysql*.rpm 2.2. Rad u MySQL-u Rad u MySQL je veoma jednostavan treba samo upisati mysql ili ako vam putanje nisu podešene otići u direktorij gdje je MySQL instaliran te upisati ./mysql. Izvođenjem ove naredbe pokreće se klijentska aplikacija za direktni rad nad bazama koje su podignute na serveru. Nakon spajanja na server potrebno je odabrati bazu na kojoj će se raditi. Naredba show databases ispisuje sve baze koje su podignute na serveru. Naredbom use ime_baze odabiremo bazu na kojoj ćemo raditi. Naredbe koje MySQL podržava su standardne naredbe SQL jezika. Nažalost
postoje razlike u sintaksi naredbi između MySQL-a i Postgres-a, ali to nije krivica MySQL-a već je posljedica nekonzistentnosti SQL jezika među proizvođačima. Primjeri naredbi: select * from ime_tablice; Ispisuje sve podatke koji se nalaze u tablici ime_tablice select ime from zaposlenici; Ispisuje imena svih zaposlenika iz tablice zaposlenici Napomena: Sve SQL naredbe završavaju sa ; (točka zarez). 2.3. Problemi pri instalaciji Prilikom instalacije MySQL-a nismo naišli na probleme. Detaljnu dokumentaciju MySQL-u moguće je naći na adresama: http://www.mysql.com
3. PostgreSQL ili MySQL ? Da li ćemo bazu podataka raditi u PostgreSQL-u ili MySQL-u u prvom redu ovisi o našim potrebama. Svaka od navedenih baza podataka ima svoje prednosti i nedostatke koje ćemo ukratko opisati u ovom poglavlju. 3.1. ACID kompatibilnost Da bi usporedili PostgreSQL i MySQL poslužit ćemo se ACID testom koji opisuje baze na temelju četiri svojstva koja bi trebala imati robusna baza podataka: z z z z
atomicity - atomarnost consistency - konzistencija isolation - izolacija durability - izdržljivost
Ova svojstva promatraju se na transakciji koja je osnovna jedinica rada koju korisnik baze može definirati. Transakcija u sebi može sadržavati više operacija nad bazom podataka. Baza podržava atomarnost ako za pojedinu transakciju rezultat može biti samo pozitivan ili negativan. Npr., ako definiramo transakciju koja u sebi sadrži naredbe UPDATE, INSERT i DELETE, sve tri naredbe promatraju se kao cjelina. Ili će se izvršiti sve, ili nijedna. Ovo svojstvo bitno je kod novčanih transakcija kada nije poželjno da se nakon DELETE naredbe u slučaju pada servera naredba INSERT ne izvrši. Konzistencija znači da nije moguće polovično izvršenje transakcije. Ako jedan dio transakcije ne uspije, baza se vraća u prvobitno stanje. Primjer je brisanje osobe iz npr. baze zaposlenika. Kada brišemo jednu osobu potrebno je obrisati i sve podatke o njemu iz ostalih tablica. Dobro konfigurirana baza ne dopušta brisanje osobe ako se ne obrišu svi podaci vezani uz tu osobu. Izolacija omogućava odvajanje transakcija dok se ne izvrše do kraja. Ako jedan korisnik baze izbriše upisani podatak, a drugi u isto vrijeme želi upisati nove
pojedinosti o istom podatku, izolacija ne dopušta drugom korisniku upis dok brisanje nije gotovo. Tako drugi korisnik vidi da je navedeni podatak izbrisan pa unošenje novih pojedinosti više nema smisla. U slučaju pada servera na kojem se nalazi baza, izdržljivost garantira da će se nakon podizanja servera transakcije koje su prekinute izvršiti do kraja. 3.2. Usporedba - PostgreSQL ili MySQL ? PostgreSQL je ACID kompatibilan pa njegovo korištenje osigurava napredne opcije i prije svega sigurnost podataka. Ipak, upotreba mnoštva naprednih opcija usporava izvedbu aplikacije. MySQL po defaultu od ACID svojstava podržava samo atomarnost pomoću opcije table locks. Ostala ACID svojstva moguće je postići upotrebom različitih paketa za upravljanje tablicama (table handlers) poput BerkelyDB ili InnoDB. U tablici 12-1 dana je kratka usporedba PostgreSQL-a i MySQL-a. Moramo naglasiti još neke karakteristike razmatranih baza. Tako moramo znati da MySQL ne podržava storne procedure niti ugnježdene upite, dok PostgreSQL to
ACID
storne ugnježdeni upiti atomarnost konzistencija izolacija izdržljivost procedure PostgreSQL
DA
DA
DA
DA
DA
DA
MySQL
DA
NE
NE
NE
NE
NE
Tablica 3.1 Usporedba PostgreSQL-a i MySQL-a podržava, što mu daje znatnu prednost prilikom izrade velikih aplikacija u kojima se traži brzina. Storne procedure veoma ubrzavaju rad aplikacija pisanih u Javi. Java je poznata po svom sporijem izvođenju, pa je pomoću stornih procedura moguće određene funkcije stavit direktno na bazu. Zbog navedenih karakteristika, PostgreSQL preporučuje se korisnicima orijentiranim prema razvoju kompleksnih aplikacija ili onima koji prelaze sa ORACLE, Sysbase ili Microsoft SQL Server-a na drugu bazu podataka. Ako bazu podataka koristimo za manje zahtjevne potrebe (npr. Integracija sa webom) preporučuje se korištenje MySQL-a. Iako postoji mogućnost gubitka podataka ako npr. isključimo napajanje za vrijeme izvršenja transakcije, veća brzina i jednostavnija upotreba daju prednost MySQL-u kod manjih baza podataka u jednostavnijim sustavima.