Jak pracujφ databßze na Webu
Co je to databßze
Ji°φ Kosek ml.
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ß, tedy databßzφ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 Jana 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°. 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 audioklip.
Databßze m∙₧e samoz°ejm∞ obsahovat v∞tÜφ mno₧stvφ tabulek -- zßle₧φ na tom, jakΘ a kolik ·daj∙ 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, 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 1 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ßÜejφ 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 1 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 2 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.