Objasněme si, jak jsou data v databázi uložena, jaké máme typy sloupců a jak se označují nezadané hodnoty.
9.8.2004 15:00 | Petr Zajíc | přečteno 87623×
Abychom mohli nějak účinně pracovat s databázemi, představme si nyní, jak jsou data v těchto databázích uložena.
Data jsou v databázích uložena v celcích, kterým se říká tabulky. Mějme například tabulku autorů, kteří přispívají na portál Linuxsoftu. Tato tabulka by mohla vypadat následujícím způsobem:
Jmeno |
Prijmeni |
Email |
Petr |
Zajíc |
petr@xzajic.cz |
Pavel |
Adam |
pa@pajus.com |
Někdo |
Jiný |
kdosi@kdesi.cz |
Pakliže jste někdy pracovali například s OpenOffice, můžete si to představit jako list aplikace OOCalc. Naše tabulka má tři sloupce a nějaký počet řádků (taky tři, v našem případě). Každý řádek v tabulce obsahuje určitou skupinu dat, tedy například údaje o jedné osobě. Když budeme přidávat řádky, znamená to, že měníme data v tabulce, budeme-li přidávat sloupce, znamená to, že měníme strukturu tabulky.
Pozn.: Databázovému řádku se také někdy říká věta nebo záznam (record).
To bylo poměrně jednoduché. Teď si představte, že budete chtít mít jinou tabulku, která bude obsahovat údaje o tom, kdo napsal na Linuxsoft jaké články. To už je zajímavější problém. Jde totiž o to (a většinou to tak bývá), že jeden autor napíše více článků. Jak by mohla taková tabulka vypadat? Mohla by vypadat třeba takhle:
Jmeno |
Prijmeni |
Email |
Nazev |
URL |
Petr |
Zajíc |
petr@xzajic.cz |
PHP (1) historie a budoucnost |
http://www.linuxsoft.cz/article.php?id_article=171
|
Petr |
Zajíc |
petr@xzajic.cz |
PHP (2) jak to funguje |
http://www.linuxsoft.cz/article.php?id_article=172
|
Pavel |
Adam |
pa@pajus.com |
Úvod do C++ |
http://www.linuxsoft.cz/article.php?id_article=196
|
Někdo |
Jiný |
kdosi@kdesi.cz |
Dohoní někdy Bill Linuse ? |
http://www.utopie.cz/nikdy/se_to_nestane.php
|
To nás přivádí k zajímavému problému - jméno, příjmení a e-mail autora tam máme zbytečně v obou tabulkách. Mít v tabulce článků kompletní informace o autorech nemusí být z několika důvodů výhodné. Tak například:
Asi tušíte, že se to tak v praxi opravdu nedělá - a máte pravdu. V praxi se řádky v tabulce autorů očíslují a namísto toho, aby se údaje opisovaly do tabulky článků se v této tabulce uvede jen odkaz na související záznam. Asi bude nejlepší to ukázat:
ID |
Jmeno |
Prijmeni |
Email |
1 |
Petr |
Zajic |
petr@xzajic.cz |
2 |
Pavel |
Adam |
pa@pajus.com |
3 |
Někdo |
Jiný |
kdosi@kdesi.cz |
Autor |
Nazev |
URL |
1 |
PHP (1) historie a budoucnost | http://www.linuxsoft.cz/article.php?id_article=171 |
1 |
PHP (2) jak to funguje | http://www.linuxsoft.cz/article.php?id_article=172 |
2 |
Úvod do C++ | http://www.linuxsoft.cz/article.php?id_article=196 |
3 |
Dohoní někdy Bill Linuse ? | http://www.utopie.cz/nikdy/se_to_nestane.php |
Z toho můžeme vidět, že se nám tabulka článků smrskla z pěti polí na tři a že namísto toho, abychom uváděli podrobnosti o každém autorovi, uvádíme jen číslo záznamu v související tabulce. Vztahu mezi tabulkou autorů a článků se říká odborně relace a právě proto, že lze data v tabulkách takto organizovat, nazývají se tyto databáze relační.
Zhruba řečeno se do tabulky dá ukládat to, co se v PHP dá ukládat do proměnných. Takže řetězce (jedno či vícepísmenné), logické hodnoty, datumy a různě přesná čísla. Každý sloupec tabulky má při jejím založení určen typ dat, které se do něj budou ukládat. Když se pokusíte do sloupce uložit hodnotu jiného datového typu, mohou databáze reagovat různě - někdy provedou cosi jako přetypování, někdy to skončí chybou. V MySQL se nejčastěji používají následující typy sloupců (tady byste našli kompletní seznam):
Typ sloupce |
Co do něj |
Rozsah |
int |
Celá čísla |
-2147483648 až -2147483647 |
char (n) |
Řetězce |
Právě n znaků dlouhý řetězc |
varchar (n) |
Řetězce |
Nejvýše n znaků dlouhý řetězec |
date |
Datumy |
1.1.1000 až 31.12.9999 |
tam smrt sice nebere, ale databáze ano. Zvykněte si na to, že v tabulkách nebývají všechna pole povinná. Dejme tomu, že bychom v databázi autorů u někoho nevyplnili e-mail, protože ho nevíme. V tom případě mohou nastat při uložení řádku zhruba dvě situace:
NULL není rovno ničemu, co jsme až dosud poznali. Nerovná se nule, prázdnému řetězci ani logické hodnotě false. S NULL se dají dělat databázové operace, o nichž si povíme někdy příště. Ale už teď byste měli mít na paměti, že to je zvláštní věc.
Příště zanecháme suché teorie a ukážeme si, jak se z PHP k databázi vůbec napojit.