LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> 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 27217×

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

pridej.cz

 

DISKUZE

nefunkcnost 12.12.2004 21:55 David Gajdos
L Re: nefunkcnost 13.12.2004 21:03 Petr Zajíc
  L Re: nefunkcnost 13.12.2004 22:14 David Gajdos
špatný příklad 23.4.2005 11:06 Filip Krejčí
  L Re: špatný příklad 4.4.2007 18:35 Michal Bůžek




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

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ář

13.9.2017 8:00 /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 – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /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, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

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

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze