Soud∞ podle ohlasu mnoh²ch z vßs, Φtenß°∙ naÜeho serißlu, se dnes dostaneme k tΘmatu, kterΘ vßs velmi zajφmß. Je to celkem pochopitelnΘ. PryΦ jsou doby, kdy pro kvalitnφ prezentaci firmy na Webu staΦilo pßr statick²ch strßnek provßzan²ch odkazy. Dφky silnΘ konkurenci je dnes nezbytnΘ podbφzet se zßkaznφk∙m dalÜφmi u₧iteΦn²mi slu₧bami. Na firemnφm Webu by tedy nem∞l chyb∞t cenφk produkt∙ s mo₧nostφ vyhledßvßnφ, strßnka slou₧φcφ k objednßnφ v²robk∙ apod. MnohΘ firmy jdou jeÜt∞ dßl a na webov²ch technologiφch majφ postaveny celΘ svΘ informaΦnφ systΘmy. VÜechny zmφn∞nΘ aplikace pracujφ s velk²m mno₧stvφm dat, kterß se obvykle uklßdajφ do databßzφ. V nßsledujφcφch dφlech serißlu se proto budeme podrobn∞ zab²vat tφm, jak zp°φstupnit databßze pomocφ Webu. Krom∞ popisu obecn²ch princip∙ a postup∙ si ukß₧eme praktickou prßci s databßzemi v prost°edφch PHP a ASP.
Stojφm te∩ p°ed nelehk²m ·kolem vysv∞tlit na omezenΘm prostoru naÜeho serißlu mnoho d∙le₧it²ch pojm∙ z oblasti zpracovßnφ dat. P°itom toto tΘma by samo o sob∞ vydalo na nejednu tlustou knihu. Seznßmφme se tedy pouze s tφm, co je pro nßs nezbytnΘ. Zßjemce o detailn∞jÜφ a ucelen∞jÜφ informace odkß₧i na odbornou literaturu a na serißl kolegy PokornΘho, kter² vychßzφ na strßnkßch Computerworldu ji₧ n∞kolik let.
Databßzi si m∙₧eme p°edstavit jako mφsto, kam se uklßdajφ vÜechny pot°ebnΘ ·daje. P°φstup k ·daj∙m ulo₧en²m v databßzi obstarßvß program, kterΘmu se °φkß S╪BD -- SystΘm ╪φzenφ Bßze Dat. Tento pon∞kud krkolomn² nßzev vznikl p°elo₧enφm p∙vodnφho anglickΘho termφnu DBMS -- DataBase Management System. Mezi S╪BD pat°φ takovΘ programy jako Oracle, MS SQL Server, Sybase, Informix, Progress. Nejednß se o programy nikterak levnΘ. Jejich cena se pohybuje v desφtkßch a v∞tÜinou spφÜe i ve stovkßch tisφc korun. NaÜt∞stφ i na poli S╪BD existujφ programy Üφ°enΘ zdarma jako freeware -- nap°. mSQL, MySQL a PostgreSQL.
P°evß₧nß v∞tÜina dnes pou₧φvan²ch S╪BD p°i uspo°ßdßnφ ·daj∙ v databßzi vychßzφ z relaΦnφho modelu dat. Nßzev tohoto modelu vychßzφ z relaΦnφ algebry, co₧ je matematick² aparßt, na kterΘm relaΦnφ model dat stavφ. V tomto modelu jsou ·daje uspo°ßdßny do tabulek. Tabulka zpravidla shroma₧∩uje ·daje o jednom druhu objekt∙. M∙₧eme tak mφt nap°φklad tabulku s osobnφmi ·daji zam∞stnanc∙. JednotlivΘ °ßdky odpovφdajφ jednotliv²m zam∞stnanc∙m. Sloupce pak obsahujφ informace o pracovnφcφch -- v naÜem p°φpad∞ by to mohly b²t nßsledujφcφ ·daje: osobnφ Φφslo, jmΘno, rodnΘ Φφslo, adresa a v²Üe platu. Sloupc∙m tabulky obvykle °φkßme v databßzovΘ terminologii polo₧ky nebo atributy. JednotlivΘ °ßdky se pak naz²vajφ zßznamy. VÜe se nßm pokusφ p°iblφ₧it obrßzek 1.
Aby Ülo s tabulkami a v nich ulo₧en²mi ·daji pracovat, musφ b²t n∞jak
jednoznaΦn∞ identifikovßny. Ka₧d² sloupec je proto pojmenovßn -- mß sv∙j
nßzev. Tento nßzev pak pou₧φvßme, kdy₧ se odvolßvßme na obsah urΦitΘho
atributu a ne na cel² zßznam. JmΘnem atributu jsou v naÜφ tabulce nap°.
JmΘno
a Plat
.
╚astou operacφ provßd∞nou v tabulkßch je zm∞na obsahu jednoho
atributu u urΦitΘho zßznamu. Pro provedenφ tΘto operace vÜak musφme mφt
k dispozici zp∙sob, jak jednoznaΦn∞ urΦit po₧adovan² zßznam. Pro tyto
·Φely by ka₧dß tabulka m∞la obsahovat tzv. primßrnφ klφΦ.
Primßrnφ klφΦ je atribut, jeho₧ hodnota je pro ka₧d² zßznam jedineΦnß. V
naÜem p°φpad∞ tedy jako primßrnφ klφΦ m∙₧e poslou₧it atribut
Osobnφ Φφslo
, proto₧e ka₧d² zam∞stnanec mß svΘ vlastnφ
osobnφ Φφslo. NaÜim po₧adavk∙m na primßrnφ klφΦ vyhovφ i rodnΘ Φφslo --
to mß ka₧d² obΦan ╚eskΘ republiky jedineΦnΘ.
Chybou by vÜak bylo za primßrnφ klφΦ zvolit nap°. atribut
JmΘno
. Na prvnφ pohled se jmΘna zam∞stnanc∙ liÜφ. Nenφ vÜak
problΘm, aby se ve v∞tÜφ firm∞ vyskytli dva JanovΘ Novßci. Pak bychom
je podle jmΘna rozliÜili velice t∞₧ko.
Pro ka₧d² atribut tabulky musφme urΦit jak² typ dat m∙₧e obsahovat. Mezi nejb∞₧n∞ji pou₧φvanΘ typy pat°φ celß Φφsla, znakovΘ °et∞zce a logickΘ hodnoty (ano/ne). DalÜφ velmi Φasto pou₧φvanΘ typy jsou reßlnß Φφsla, m∞novΘ ·daje, datum a Φas. Mnoho S╪BD podporuje i slo₧it∞jÜφ typy jako je obrßzek, video Φi audio klip.
Databßze m∙₧e samoz°ejm∞ obsahovat v∞tÜφ mno₧stvφ tabulek -- zßle₧φ
na tom, co vÜe za ·daje chceme do databßze zaznamenat. Ka₧dß tabulka mß
proto svΘ jmΘno, kterΘ ji v rßmci databßze jednoznaΦn∞ identifikuje. V
naÜem p°φpad∞ by tabulka m∞la nejspφÜe nßzev Zam∞stnanci
.
N∞kdy se pou₧φvß pouze jednotnΘ Φφslo, potom by naÜe tabulka m∞la jmΘno
Zam∞stnanec
. JmΘno tabulky by v₧dy m∞lo odpovφdat jejφmu
obsahu, usnadnφme si tak pozd∞jÜφ orientaci ve v∞tÜφm mno₧stvφ tabulek.
Vidφme, ₧e tabulka obvykle obsahuje ucelenΘ informace. To vÜak
neznamenß, ₧e nijak nesouvisφ s ostatnφmi tabulkami. P°edstavme si, ₧e v
naÜφ fiktivnφ firm∞ chceme evidovat informace o odb∞ratelφch. U ka₧dΘho
odb∞ratele budeme chtφt evidovat jeho I╚O, nßzev, sφdlo a naÜeho
zam∞stnance, kter² mß styk s odb∞ratelem na starosti. Je jasnΘ, ₧e
tabulka Odb∞ratelΘ
musφ obsahovat atributy I╚O, nßzev a
sφdlo. Mß vÜak u ka₧dΘho odb∞ratele obsahovat kompletnφ informace o
zam∞stnanci (tj. jeho jmΘno, rodnΘ Φφslo, rodnΘ Φφslo, adresu a v²Üi
platu . To by jist∞ nebylo nejefektivn∞jÜφ -- pokud by n∞kdo m∞l na
starosti vφce odb∞ratel∙, informace by se v tabulce zbyteΦn∞ opakovaly.
V²Üe zmφn∞nΘ p°φpady se °eÜφ pomocφ vztah∙ mezi tabulkami. V
naÜem p°φpad∞ m∙₧e mφt jeden zam∞stnanec na starosti n∞kolik odb∞ratel∙
a hovo°φme tedy o vztahu 1:N. V praxi se tento vztah °eÜφ tak, ₧e
tabulka Odb∞ratelΘ
mß atribut, kter² obsahuje primßrnφ klφΦ
urΦujφcφ zam∞stnance pov∞°enΘho stykem s firmou. Primßrnφ klφΦ v tabulce
zam∞stnanci je osobnφ Φφslo, u ka₧dΘho odb∞ratele tedy uvedeme osobnφ
Φφslo zam∞stnance pov∞°enΘho jednat za naÜi firmu (viz obr. 2).
Vidφme, ₧e pou₧itΘ uspo°ßdßnφ ·daj∙ do tabulek nßm dßvß k dispozici
vÜechny informace. Pokud chceme zjistit, kdo mß na starosti firmu
Omicron, podφvßme se do tabulky Odb∞ratelΘ
. V nφ zjistφme,
₧e se jednß o zam∞stnance s osobnφm Φφslem 2021
. Podφvßme
se do tabulky zam∞stnanci a zjistφme, ₧e osobnφ Φφslo 2021
mß AdΘla Klßdovß.
M∙₧eme postupovat i opaΦn∞. Pokud nßs zajφmß, kte°φ odb∞ratelΘ
spadajφ do pΘΦe Josefa Klφmy, zjistφme jeho osobnφ Φφslo --
1230
. P°φsluÜnφ odb∞ratelΘ v tabulce
Odb∞ratelΘ
majφ toto Φφslo ulo₧eno v atributu
Zßstupce
.
Atributu, kter² slou₧φ jako odkaz na jinou tabulku a obsahuje tedy primßrnφ klφΦe jinΘ tabulky, °φkßme cizφ klφΦ. Pokud se tabulka ·Φastnφ vφce vztah∙ s ostatnφmi tabulkami m∙₧e obsahovat vφce cizφch klφΦ∙. Primßrnφ klφΦ je vÜak v ka₧dΘ tabulce v₧dy jen jeden.
Mezi tabulkami mohou existovat i jinΘ vztahy ne₧ 1:N, i kdy₧ nejsou tak ΦastΘ. Vztah 1:1 vyjad°uje p°φpady, kdy zßznam jednΘ tabulky odpovφdß jednomu zßznamu jinΘ tabulky. Tyto vztahy se obvykle °eÜφ jako specißlnφ p°φpad vztahu 1:N s vyu₧itφm cizφho klφΦe.
JistΘ komplikace p°inßÜφ vztahy typu M:N. Jak takov² vztah vypadß?
P°edstavme si, ₧e naÜe fiktivnφ firma zpracovßvß najednou n∞kolik
projekt∙. Na ka₧dΘm projektu m∙₧e pracovat n∞kolik zam∞stnanc∙, ale
zßrove≥ m∙₧e jeden zam∞stnanec pracovat na vφce projektech. Vztah mezi
tabulkami Projekty
a Zam∞stnanci
je prßv∞
vztahem M:N.
Na prvnφ pohled se vztah M:N nedß do relaΦnφho modelu dat napasovat. NaÜt∞stφ lze ka₧d² vztah M:N rozlo₧it na dva vztahy 1:N s vyu₧itφm pomocnΘ tabulky. Uka₧me si vÜe na naÜem p°φklad∞.
Informace o projektech budeme uklßdat do tabulky
Projekty
. P°edpoklßdejme, ₧e ka₧d² projekt je identifikovßn
sv²m ID-Φφslem, kterΘ zvolφme jako primßrnφ klφΦ tabulky. Vztahy mezi
projekty a zam∞stnanci zachytφme v tabulce Proj-Zam
. Ka₧d²
zßznam tΘto tabulky obsahuje ID projektu a Φφslo zam∞stnance, kter² na
n∞m pracuje. Pokud na n∞jakΘm projektu pracuje vφce zam∞stnanc∙, bude v
tabulce n∞kolik zßznam∙ se stejn²m ID projektu a rozdφln²m Φφslem
zam∞stnance. Zcela obdobn∞ to bude platit pro zam∞stnance. Pokud jeden
zam∞stnanec pracuje na vφce projektech, bude v tabulce n∞kolik °ßdk∙ se
stejn²m osobnφm Φφslem zam∞stnance a r∙zn²m ID projektu (viz obr. 3).
Pomocφ tabulky Proj-Zam
snadno zjistφme, ₧e Josef Klφma
pracuje na projektech X97013 a X97020. Stejn∞ snadnΘ je i zjiÜt∞nφ, ₧e
na projektu X98007 pracujφ Klßdovß a PluhßΦek.
Mezi tabulkami Projekty
a Proj-Zam
je vztah
1:N. Stejn² vztah je i mezi tabulkami Zam∞stnanci
a
Proj-Zam
. Vidφme tedy, ₧e p∙vodnφho vztahu M:N jsme se
celkem jednoduÜe zbavili. Nov∞ vzniklΘ tabulka Proj-Zam
obsahuje pouze cizφ klφΦe z tabulek Projekty
a
Zam∞stnanci
. Primßrnφ klφΦ tabulky je tvo°en dohromady
ob∞ma cizφmi klφΦi.
Z tΘto ukßzky je vid∞t, ₧e primßrnφ klφΦ nemusφ b²t tvo°en pouze jednφm atributem, ale i n∞kolika dohromady. Pro ka₧d² zßznam vÜak stßle platφ, ₧e jeho primßrnφ klφΦ je jedineΦn². Ka₧d² zßznam tedy musφ obsahovat jedineΦnou kombinaci hodnot atribut∙, kterΘ jsou souΦßstφ primßrnφho klφΦe.
V p°φÜtφm dφle si povφme, jak²m zp∙sobem m∙₧e naÜe aplikace pomocφ S╪BD pracovat s tabulkami v databßzi. Z p°evß₧nΘ v∞tÜiny si proto budeme povφdat o jazyce SQL. Pokud je pro vßs zkratka SQL magick²m zaklφnadlem, urΦit∞ si poΦkejte na dalÜφ dφl serißlu a dozvφte se, o co jde.