» Poradna » Programy

Databáze a funkční závislosti

 |   |  Microsoft Windows XP Firefox 4.0

Zdravím,
i když jsem našel na webu hromadu podkladů o Databázích a funkčních závislostech tak si nedokáži poradit s příkladem....Nechci aby mi jej někdo vyřešil...ale aby mi někdo poradil jak do něj

Př : Je zadána relace :

Návštěva(Pacient,Lékař, Čas, Budova, Oddělení, Nemoc, Medikace)

Jsou zadány funkční závislosti
F={L->O, LČ->PN, PČ->LM, M->N, O->B}

Ukoly
1. Určete všechny klíče
2. Určete vsechny redundantní atributy a závislosti
3. Určete minimální pokrytí

četl jsem o Amstrongových zákonech, ale nevidím v tom souvislosti
díky když da někdo vědět :)

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 7 Firefox 4.0.1

Zdravim..
Pod pojmem "relace" si představuji tabulku, která realizuje vazbu M:N. Ve vašem případě je to vazba mezi lékařem a pacientem, který jde k tomu lékaři na vyšetření.
Jde tedy o tabulku "Návštěva" se sloupci: Pacient,Lékař, Čas, Budova, Oddělení, Nemoc, Medikace

funkční závislosti
F={L->O, LČ->PN, PČ->LM, M->N, O->B}

Pojmu funkční závislosti rozumím tak, že když známe L, víme i O. Známe-li LČ, víme i PN atd. Nicméně vaše zkratky chápu jen matně. Kdyžtak mě prosím opravte:
Lékař->Oddělení
Lékař+Čas -> Pacient+Nemoc
Pacient+Čas -> Lékař+Medikace
Medikace -> Nemoc
Oddělení -> Budova
.. V podstatě je tím načrtnuto schéma databáze, abyste věděl, jaké informace můžete dohledat v okolních tabulkách a není tedy nutné je zapisovat do tabulky Návštěva.

Když víme tyto relace, víme, které sloupce jsou v naší tabulce zbytečné. Protože když se z lékaře dostaneme na jeho oddělení a z oddělení na budovu (což je z databázového hlediska logické a každá DB tak musí fungovat, je-li správně navržena) tak v tabulce "Návštěva" můžeme zlikvidovat sloupce Oddělení a Budova. Protože se k nim můžeme dostat přes toho uvedeného lékaře. (dohledáním v jiných tabulách)
Tímto způsobem je potřeba promyslet všechny závislosti.

Z funkčních vztahů chápu i to, že:
když víme lékaře a čas, dohledáme pacienta a nemoc.
Když víme pacienta a čas, dohledáme lékaře medikaci
Víme-li medikaci, dohledáme nemoc

Když tedy budeme znát Pacienta a Čas, dohledáme Lékaře, Medikaci a tedy i Nemoc
Z nalezeného lékaře potom podle pravidel výše uvedených dohledáme Budovu a Oddělení.

Z toho mi vyplývá, že sloupce Medikace a Nemoc jsou taktéž zbytečné. Jsou uvedeny jinde v DB a je možné je dohledat. A patrně bude zbytečné uvádět i Lékaře.

Znamenalo by to tedy, že tabulka Návštěva by mohla teoreticky obsahovat jen sloupce Pacient a Čas (které by zárpveň byly primárním klíčem - ten samý pacient může přijít vícekrát). Ale jde o to, jestli správně chápu pojem a význam funkčních závislostí.

Pod Ukázat celý příspěvek

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 4.0.2

Takze:

postup
1. abych mohl urcit klic RU, musim spocitat tranizitivni uzever pro F (tj. mnozinu funkcnich zavislosti).

tj. L+,Č+,...LČ+,PČ+,..
Teoretickych mel jej počitat pro vsechny kombinace, ale staci jen pro vsechny jednoduche atributy a por slozene, ktere jsou na levych stranach a vsechny jejich podkombinace.

klicem je pak takovy atribut/atributy ze kterych lze odvodit vsechny ostatni atributy. Pokud to nemuze byt jeden, tak musim najit takovy aby co nejmin atributu pokrylo vsechny.

2. nasleduje vypocet minimalniho neredundantniho pokryti.
obecne musi platit ze F+ = F'+ kde F'+ je uzaver modifikovane mnoziny FU.

a) nejprve prevedu vsechny FZ do elementarni formy tj. tak aby na prave strane byl jen 1 atribut. -
pomoci dekompozice dle Armstrongovych axiomu. A-> CD => A->C & A-> D

b) provedu minimalizaci tj. resim takove FZ, kde na leve strane je 2 a vice atributy. tj. napr AB->C, XYZ->D
vyberu si tedy napr. AB->C a testuji zda odebranim A se nezmeni uzaver B+ s touto novou mnozinou.
pokud ano, tak A nelze odebrat, pokud zustane B+ stejne jako v puvodnim pripade, tak lze odebrat a je nadbytecny.

v tomto pripade vzdy plati ze F_i+ >= F+. tj. odebranim atributu se vzdy zvetsi uzaver. je potreba si to predstavit tak, ze odeberu cast klice, tj. v tom okamziku odvodim vice atributu.

d) v okamziku kdy mam poresenou minimalizaci resim redundanci. V tomto pripade odebiram cele funkcni zavislosti. a pocitam opet F_i ale tentokrat pro atribut leve strany, odebrane FZ.
tj. napr. pokud odebiram A->B, tak pocitam nove A+. Opet musi platit, ze se uzaver modifikovane mnoziny nesmi zmenit. pokud se nezmeni odeberu a zkousim nad touto novou mnozinou odebrat dalsi FZ.
kontrolni pravidlo je, ze v tomto pripade bude vzdy nove F_i <= F+. tj. odebranim FZ se bud mnozina atributu zmensi nebo zustane stejna.
pro predstavu jde o to, ze prijdu o nejakou informaci. napr. ze z rodneho cisla odvodim jmeno pacienta.

V okamziku kdy mam minimalni neredundanti Ukázat celý příspěvek

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Lékař, Pacient, Návštěva, Nemoc, Budova, Redundantní, Oddělení