PHP (77) - Portál, databáze a relace
Dnes navrhneme na našem "PHP hudebním portálu" databázové struktury pro alba a písně.
10.12.2004 15:00 |
Petr Zajíc
| Články autora
| přečteno 27382×
Dosti bylo na našem portálu koncertů. Dejme tomu, že toto téma máme
již uspokojivě vyřešeno, a pojďme se věnovat dalším věcem. Bude to
ztvárnění diskografie.
Alba a písně
Připomeňme, že portál by měl být schopen následujících věcí:
- Názvy alb a písní by se měly zadat do databáze
- Půjdou zobrazit buď jen alba, nebo alba a písně
- Vyhledávání - podle názvu písně najít album nebo alba, na nichž
byla uvedena
- Jedna píseň bude moci být na více albech
To nás vede k závěru, že budeme muset přidat další tabulky do
databáze (zatím tam máme jen tabulku pro uživatele a tabulku pro
koncerty). Kromě toho, že budeme muset přidat tabulky, musíme si
rozmyslet jaké a jak na sebe budou navazovat. Tabulka uživatelů a
tabulka koncertů totiž byly na svém okolí relativně nezávislé, zatímco
tabulky s alby, písněmi a také s texty písní budou vzájemně záviset.
Již jsme o tom mluvili v díle o uložení dat
v databázi. Na
takovou situaci platí staré české přísloví:
Dvakrát měř, jednou řež
Uvědomme si, že špatně navržená databáze obyčejně aplikaci pohřbí.
Začátečník by mohl například uvažvat takto: Máme alba, na každém albu
budou nějaké písně. Založíme tedy tabulku alb a tabulku písní, a u
každé písně bude odkaz na album, na němž je uvedena. Dalo by se to
graficky znázornit takto:
A zhruba tomu odpovídající definice tabulek by mohla být:
CREATE TABLE alba (
id int NOT NULL auto_increment,
nazev varchar(50) NOT NULL default '',
PRIMARY KEY (id)
);
CREATE TABLE pisne (
id int NOT NULL auto_increment,
album int NOT NULL default 0,
nazev varchar(50) NOT NULL default '',
PRIMARY KEY (id)
);
Na první pohled to vypadá dobře. Co se však stane, jestliže bude
jedna píseň na více albech? V tom případě naše koncepce selže, protože
nebudeme vědět, co napsat do sloupce album. Jistě, dalo by se pro
stejnou píseň přidat více řádků, ale to má několik nevýhod - duplikují
se data v tabulce a nastane problém s přidáváním textů písní.
Musíme tedy na celou věc jinak. Jelikož může být více písní na
jednom albu a zároveň jedna píseň na více albech, bude potřeba
sestrojit třetí tabulku, která tuto situaci postihne. Můžeme ji nazvat
třeba "obsahyalb" a schéma pak bude následující:
A tomu odpovídající definice tabulek bude tato:
CREATE TABLE alba (
id int NOT NULL auto_increment,
nazev varchar(50) NOT NULL default '',
PRIMARY KEY (id)
);
CREATE TABLE obsahyalb (
id int NOT NULL auto_increment,
album int NOT NULL default 0,
pisen int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE pisne (
id int NOT NULL auto_increment,
nazev varchar(50) NOT NULL default '',
PRIMARY KEY (id)
);
Něco názvosloví
Kdybyste se chtěli zabývat světem databází trochu do hloubky, možná
se Vám bude následujících pár řádků. To, co jsme demonstrovali na
albech a písních se vznešeně nazývá "návrh
struktury databáze". Vztahům mezi alby a písněmi se odborně říká
relace (odtud relační
databáze). V našem prvním příkladu se jednalo o tzv. relaci 1:N, neboli "jeden k mnoha".
Popisuje to situaci, kdy jednomu "rodičovskému" záznamu odpovídá
teoreticky neomezený počet "dceřinných" záznamů. Tato situace je celkem
běžná - jedna faktura může více položek, jeden tým může sehrát více
zápasů, v jednom bytě může bydlet více lidí.
Ve druhém případě se jednalo o tzv. relaci N:N (mnoho k mnoha). Tato
relace se obvykle vyjadřuje vloženou tabulkou, tak jak jsme to udělali
v našem případě. I ta je v reálném svěce celkem běžná: Více písní na
více albech, můžete montovat různá auta ze stejných součástek (tedy
jedna součástka ve více autech a zároveň více součástek v jednom autě)
a tak dále.
Někomu by se mohlo zdát, že vložení té "prostřední" tabulky celou
databázi zpomalí. Většinou to tak není, protože databázový software
bývá na podobné zpracování (které nazýváme tvorba spojení) vysoce
optimalizován. Rovněž odstraňování záznamů je v takovém případě výrazně
zjednodušeno.
Pozn.: U alb a písní to není moc
dobrý příklad, ale třeba u těch aut a součástek ano. Pokud byste totiž
z nějakých důvodů přestali do daného auta montovat danou součástku
(protože byla dejme tomu zbytečná), stačí odstranit záznam z té
"prostřední" tabulky a je to!
V dalším díle se zaměříme zpátky na náš portál a uplatníme relace v
praxi
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
17.4.2018 0:46 /František Kučera Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář
16.3.2018 22:01 /František Kučera Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář
13.2.2018 0:41 /František Kučera Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář
11.2.2018 23:11 /Petr Ježek Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář
11.2.2018 20:35 /Redakce Linuxsoft.cz Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář
15.1.2018 0:51 /František Kučera První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.
Přidat komentář
14.11.2017 16:56 /František Kučera Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář
12.11.2017 11:06 /Redakce Linuxsoft.cz PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
20.2.2018 18:48 /
Ivan Majer portal
20.2.2018 15:57 /
Jan Havel Jak využíváte služby cloudu v podnikání?
16.1.2018 1:08 /
Ivan Pittner verejna ip od o2 ubuntu
15.1.2018 17:26 /
Mira Harvalik Re: Jak udělat HTML/Javascript swiping gallery do mobilu?
30.12.2017 20:16 /
Michal Knoll odmocnina
Více ...
|