602SQL-┌plnß dokumentace Index   Tisk  

Vztah M:N

Pro vyjßd°enφ tohoto vztahu pomocφ nßstroj∙ relaΦnφ algebry pot°ebujeme krom∞ tabulek TA a TB jeÜt∞ t°etφ spojovacφ tabulku, kterou nazveme TSPOJ. TSPOJ musφ obsahovat nejmΘn∞ dva sloupce SPOJA a SPOJB. SPOJA je stejnΘho typu jako sloupec A, SPOJB jako B. Dva zßznamy v tabulkßch TA a TB jsou propojeny prßv∞ tehdy, pokud existuje zßznam v tabulce TSPOJ takov², ₧e A=SPOJA a zßrove≥ B=SPOJB.

Vytvß°enφ a ruÜenφ vazeb

Vazby mezi zßznamy v TA a TB se vytvß°ejφ tak, ₧e se do tabulky TSPOJ vklßdajφ novΘ zßznamy, a ruÜφ se tak, ₧e se v TSPOJ ruÜφ zßznamy. Na rozdφl od vztahu 1:N se tedy p°i vytvß°enφ a ruÜenφ vazeb nep°episujφ ·daje v TA nebo TB.

Na vazby mezi zßznamy lze hled∞t bu∩ globßln∞, anebo od jednΘ tabulky sm∞rem k druhΘ. Formulß°e od TA k TB a od TB k TA jsou zcela symetrickΘ, proto je nebudeme popisovat zvlßÜ¥.

Spojenφ tabulek

Pomocφ dotazu SELECT * FROM TA, TSPOJ, TB WHERE TA.A=TSPOJ.SPOJA and TSPOJ.SPOJB=TB.B lze zφskat celkov² p°ehled o vÜech vazbßch mezi zßznamy. V formulß°i do odpov∞di na tento dotaz:

Formulß° od jednΘ tabulky k druhΘ

P°i pohledu od jednΘ tabulky k druhΘ vidφme v hlavnφm formulß°i zßznamy z jednΘ tabulky a ka₧d² z t∞chto zßznam∙ mß v subformulß°i p°ipojenΘ zßznamy z druhΘ tabulky. Situace vypadß podobn∞, jako p°i vazb∞ 1:N, avÜak pro r∙znΘ zßznamy hlavnφho formulß°e se v subformulß°φch mohou opakovat stejnΘ zßznamy.

Realizace subformulß°e je pon∞kud slo₧it∞jÜφ, ne₧ v p°φpad∞ 1:N. Subformulß° toti₧ vede do spojenφ dvou tabulek. P°edpoklßdejme, ₧e hlavnφ formulß° vede do TA. Pak vytvo°φte dotaz SELECT * FROM TSPOJ, TB WHERE TSPOJ.SPOJB=TB.B a subformulß° vytvo°φte nad tφmto dotazem. P°i navrhovßnφ hlavnφho formulß°e v popisu slo₧ky Subpohled zadßte jako propojovacφ hodnotu sloupec A a jako v²b∞rovou podmφnku sloupec TSPOJ.SPOJA resp. v²raz TSPOJ.SPOJA=%.

RelaΦnφ formulß° pro editaci vazeb

Do subformulß°e nelze vklßdat zßznamy ani ruÜit je, lze ovÜem p°episovat hodnoty v zßznamech. Editace propojenφ mezi zßznamy z TA a TB se d∞je pomocφ specißlnφho relaΦnφho formulß°e, kter² otev°ete stiskem tlaΦφtka. V tomto relaΦnφm formulß°i jsou zatr₧enΘ ty zßznamy, kterΘ jsou p°ipojeny k vybranΘmu zßznamu v hlavnφm formulß°i (tj. ty, kterΘ vidφte v subformulß°i). Kliknutφm na oznaΦovacφ tlaΦφtka (nebo stiskem klßvesy F8) m∙₧ete vytvß°et a ruÜit vazby. Lze zde takΘ vklßdat zßznamy do TB a ruÜit je. Na rozdφl od relaΦnφho formulß°e p°i vazb∞ 1:N zde m∙₧e b²t souΦasn∞ zatr₧en vφce ne₧ jeden zßznam.

P°i zadßvßnφ parametr∙ akce, kterou se otevφrß relaΦnφ formulß°, je nutno vyplnit dv∞ relace: jmΘno relace od TA k TSPOJ a jmΘno relace od TSPOJ k TB.

DalÜφ sloupce spojenφ

Tabulka TSPOJ m∙₧e mφt i dalÜφ sloupce, kterΘ dopl≥ujφ informace o vazb∞ mezi TA a TB. Tyto sloupce lze editovat v subformulß°i. Nap°φklad pokud TA je tabulka pacient∙, TB tabulka lΘk∙ a tabulka TSPOJ vyjad°uje vztah "pacientu byl p°edepsßn lΘk", pak dalÜφ sloupec tabulky TSPOJ m∙₧e obsahovat datum p°edepsßnφ a poΦet p°edepsan²ch balenφ.

Pozor: Propojovßnφ relaΦnφm formulß°em se nehodφ pro p°φpad, kdy mezi zßznamy z TA a TB lze vytvß°et multivazby (vφcenßsobnΘ vazby - jeden pacient dostal tent²₧ lΘk vφcekrßt). Stiskem propojovacφho tlaΦφtka v relaΦnφm formulß°i by se nedala vytvo°it druhß a dalÜφ vazba ani zruÜit jedna z mnoha vazeb. Zobrazenφ p°ipojen²ch zßznam∙ v subformulß°i vÜak funguje i v tomto p°φpad∞: zßznamy vφcenßsobn∞ p°ipojenΘ se zobrazφ vφcekrßt, poka₧dΘ s jin²mi hodnotami dodateΦn²ch sloupc∙ z TSPOJ.

RelaΦnφ formulß° nelze otev°φt na fiktivnφm zßznamu v hlavnφm formulß°i. Propojovßnφm na fiktivnφm zßznamu by toti₧ doÜlo k poruÜenφ referenΦnφ integrity databßze.