CDI.CZ
hledá
nové PHP programátory.
Požadavky:
- Zkušenosti s PHP
- Znalost OOP
- Zkušenosti s návrhem databáze (MySQL)
- Znalost problematiky webových aplikací
Strukturovaný životopis můžete zasílat na petr@cdi.cz.
| PostgreSQL | Začínáme s PostgreSQL → |
Nemáte-li Postrgres nainstalovaný, nainstalujte jej, nebo požádejte
někoho, kdo to umí :). Každá dobrá linuxová distribuce jej má v repozitářích,
uživatelé Windows si můžou postgres
stáhnout a nainstlovat.
Předpokládám, že když se chcete učit databáze, umíte to s počítači
natolik dobře, že to sami hravě zvládnete :).
Pokud jste čerstvě nainstalovali PostgreSQL, musíte si vytvořit uživatele, který bude mít právo vytvářet a mazat databáze (popřípadě další uživatele, kteří budou mít právo do databází "jen" zapisovat). PostgreSQL (třeba na rozdíl od MySQL) spojuje uživatelské účty s těmy z operačního sytému. Řekněme, že máte v Linuxu uživatelský účet s loginem rimmer a chcete, aby jste s tímto loginem mohli do databází nejen přistupovat, ale i vytvářet je a mazat. Pak postupujte následovně (každý příkaz musíte ukončit klávesou <ENTER>:
Poznámka:
$ uvozuje příkazy, které se zapisují do příkazové řádky (ve Windows v okně programu command.com nebo cmd).
=> uvozuje příkazy, které se zapisují v programu psql.
Příkaz createdb, který slouží k vytváření databází,
má několik zajímavých voleb. (Můžete je najít v manuálové stránce.)
Za zmínku stojí určitě přepínač -E, kterým můžete určit kódování
databáze. Defaultně se použije to
kódování, které bylo vybráno při instalaci postgresu. Přepínačem -E
můžete nastavit libovolné podporované kódování, například LATIN2
(vhodné pro středoevropské jazyky v Linuxu), WIN1250 (středoevropské
jakzyky ve Windows) nebo UTF8. Kódování UTF8 je vhodné, pokud budete
data přenášet mezi různorodými systémy, jinak bych doporučoval se držet spíše
starého dobrého kódování LATIN2.
UTF-8 sice zabírá více místa a práce s ním je o ždibec pomalejší, ale zato umožňuje
ukládat text v mnoha jazykových sadách (takže není problém uložit text v češtině i azbuce).
Dnes už je také defaultní kódování v Linuxu, takže doporučuji UTF8!
Jinou cestou jak vytvořit uživatele je použití příkazu createuser na příkazové řádce shellu (musíte být přihlášeni jako uživatel postgres). Přepínače získáte pomocí příkazu createuser --help nebo v manuálové stránce (důležitý přepínač je například pro uložení hesla v šifrované podobě).
Pokud se nemůžete přihlásit jako root (třeba ve škole), pak buď
již existuje nějaká databáze, ke které máte přístup (zjistěte si u
svého administrátora jaká), nebo máte možnost ji vytvořit. Na jméno
vytvářené databáze může být určité omezení (u nás ve škole musí
obsahovat login uživatele, pod kterým jsem přihlášen). Pak můžete
vytvořit databázi příkazem
$ createdb rimmer1
Není nutné, aby jste rozuměli všemu předešlému, ale v dalším textu předpokládám, že již máte nainstalovaný PostgreSQL, vytvořenou databázi a získali jste příslušná přístupová práva, aby jste si mohli zkoušet všechny příklady.
Chcete-li vidět všechny existující databáse, použijte
příkaz
$ psql -l
V MySQL se můžete po čerstvé instalaci přihlásit k databázi
bez hesla jako root, vytvořit databázi rimmer1, dát uživateli
všechna práva nad touto databází uživateli rimmer a zobrazit všechny
existující databáze následujícím způsobem:
$ mysql -u root
mysql> CREATE DATABASE rimmer1 DEFAULT CHARSET utf8;
mysql> GRANT ALL PRIVILEGES ON rimmer1.* TO rimmer@localhost;
mysql> quit
$ mysql -u rimmer rimmer1
mysql> SHOW DATABASES;
mysql> quit
Než se pustíme do práce s PostgreSQL a SQL, musíme si osvětlit nějaké pojmy ohledně databází.
PostgreSQL (krátce zvaná postgres) je relační databáze fungující na bázi server-klient (jako většina databází). Na první pohled to vypadá složitě, ono kolem databází taky vznikla celá věda, ale pro domácí použití Vám bude stačit pochopit pár následujících pojmů. Pokud je nepochopíte hned, nevadí, jejich význam vysvětlím na příkladech v dalších kapitolách.
Databáze je nějaký soubor uložený kdesi na disku. Struktura tohoto souboru je tvořena tabulkami (a relacemi), které obsahují řádky a sloupce. Například můžete vytvořit tabulku se jménem telefoni_seznam, která bude obsahovat dva sloupce se jmény jmeno a telefon. Řádky pak budou tvořit jednotlivé záznamy v tabulce (Kolik zázanmů jmeno+telefon, tolik řádků).
| jmeno | telefon |
|---|---|
| James Bond | 02/12345 |
| Karel IV. | 02/012345 |
Relace je vztah mezi tabulkami v databázi. Například budete mít tabulku obsahující názvy hudebních CD a tabulku obsahující jména zpěváků. Vztah, který určí které CD patří kterému zpěváku, je relací. Až se budete učit relace používat, pochopíte a osvojíte si je rychle.
Serverem se zde myslí program, který se stará o soubory databáze. Zapisuje do nich, čte z nich a vrací data klientovi. Udržuje informace o přístupových právech k databázím atp. Server většinou běží na nějakém vzdáleném počítači, kde se databáze ukládají a k tomuto počítači mívá přístup více klientů. Ovšem klient a server můžou být na jednom počítači, to bude asi i váš případ. Server pak běží jako proces na pozadí a vyčkává, dokud se neozve klient. V PostgreSQL se o tyto činnosti starají dva programy: postmaster, který řídí komunikaci mezi procesy a zajišťuje inicializaci a postgres, který vykonává SQL příkazy.
Klient je také program. Klient říká serveru, co má udělat, jaká data z tabulky má vrátit, jaká tam má vložit atd. Klient se vůbec nestará o to, jakým způsobem a kde jsou data uložena, komunikuje pouze se serverem. V PosgreSQL je klientem například program psql, ale mohou to být také například moduly do PHP nebo jiných programovacích jazyků, které umožňují komunikovat se serverem, atp.
Primárním klíčem se myslí hodnota v sloupci, který obsahuje jedinečné hodnoty (tj. sloupec primárních klíčů, obvykle se jménem id (id jako identifikátor)). Chcete-li si vést databázi zaměstnanců, může se vám stát, že dva zaměstnanci budou mít stejné jméno. Jak takové zaměstnance od sebe odlišit? Zavedením sloupce primárních klíčů. To může být sloupec s rodnými čísly, nebo prostě jen čísly. Každá tabulka, do které se odkazujete z jiné tabulky by měla mít primární klíč.
Primárním klíčem může být třeba i řetězec (jméno apod.). Musíte mít ovšem jistotu, že nikdy nebudete mít dva lidi se stejným jménem. Další nevýhodou je vyšší pravděpodobnost překlepu při psaní dlouhého řetězce, oproti číslu. A v neposlední řadě to zbytečně zabírá místo v jiných tabulkách, kde se na tuto tabulku pomocí primárního klíče odkazujete. Číslo vám vždy zabere méně místa, než celé jméno!
| jmeno | plat | id |
|---|---|---|
| Leoš Janáček | 13000 | 0 |
| Tomas Mann | 15000 | 1 |
| Leoš Janáček | 20000 | 2 |
Cizí klíč je hodnota primárního klíče z jiné tabulky (ve sloupci cizích klíčů, například se jménem id_zamestnance). Řekněme že tabulka, která bude zaznamenávat příchody vašich zaměstnanců, bude obsahovat sloupec, do kterého se budou zapisovat primární klíče z tabulky zaměstnanců (a relace je na světě :-)). Cizí klíče v tomto sloupci se pochopitelně budou opakovat. (Vidíte, kolik bytů ušetříte tím, že nepoužíváte jako primární klíč jméno? Tím šetříte nejen místo, ale také zvyšujete rychlost práce s takovouto databází).
| cas | id_zamestnance |
|---|---|
| "Pondeli, 07:30" | 0 |
| "Utery, 07:00" | 1 |
| "Utery, 07:30" | 0 |
| "Utery, 08:30" | 2 |
Nyní už víte, co je to ta relační databáze, a zbývá jen říct, co je to to záhadné SQL.
Jak již bylo řečeno, máme tu jednu serverovou aplikaci, která se stará o databáze a mnoho klientských aplikací, které z jedné strany komunikují se serverovou aplikací a z druhé strany s Vámi. SQL je tzv. dotazovací jazyk, který slouží k ovládání relačních databází. Tímto jazykem se server domlouvá s klientem. To zaručuje jistou hardwarovou i softwarovou nezávislost, pokud doručíte serveru požadavek v jazyce SQL, bude mu rozumět.
Existuje mnoho firem, které vytvářejí aplikace na bázi jazyka
SQL (PostgreSQL, MySQL, Oracle atd.). Ačkoli je tu snaha o vytvoření
univerzálního jazyka a vytvářejí se normy jazyka SQL, kterým by měl
rozumět každý program založený na SQL, stále existují drobné
rozdíly mezi různým softwarem. Například databáze PostgreSQL
vyžadují na konci příkazu středník, jiné zase ne. Tyto drobné
rozdíly by vás mohly vyvést z míry, pokud zde probírané příklady
budte zkoušet na jiném SQL softwaru, než je PostgreSQL.
Případné nesrovnalosti by jste měli dohledat v dokumentaci k vašemu
databázovému systému. V Linuxu, distribuci Debian, existuje balíček
postgresql-doc-8.4 (za 8.4 dosaďte čislo aktuální verze).
Po jeho nainstalování najdete informace o
PostgreSQL v adresáři /usr/share/doc/postgresql-doc-8.4/
(začněte dokumentem html/index.html)
Na internetu se můžete podívat například na
http://www.pgsql.cz/index.php/PostgreSQL
nebo oficiální zdroj (v angličtině)
http://www.postgresql.org/docs/8.4/interactive/.
Pozn: Některé rozdíly nejsou zase až tak drobné. Například mohou v nějaké odrůdě SQL existovat datové typy nebo celé SQL konstrukce, které v jiné nejsou. Třeba zde probrané vytváření uživatele a databáze v PostgreSQL a MysSQL se liší až odstrašujícím způsobem, ale nebojte, většinou to není tak zlé.
| PostgreSQL | Začínáme s PostgreSQL → |
