Tato stránka vyžaduje podporu CSS stylů
Semestrální práce z předmětu 36SQL
"Lázeňský ústav"
Oto Válek
letní semestr 2002/2003, cvičení Čt 16:15
 
1. Popis
Databáze modeluje situaci v jednoduchých lázních, zejména organizaci léčby -
vyšetření a léčebných procedur.
Sleduje hosty, odborné zaměstnance -
lékaře a sestry
a vybrané místnosti - pokoje
a léčebny.
Součástí je i číselník typů procedur,
který je společný pro více entit.
2. Datový model
Datový model se skládá z 10 entit svázaných ISA hiearchií a 9 vztahů.
Následuje přehled entit:
| 
Osoba
 | 
Eviduje se jméno, příjmení a datum narození.
Primárním klíčem všech osob v systému je speciální číslo.
Rodné číslo jím být nemůže kvůli zahraničním návštěvníkům.
 |  
| 
Host
 | 
U hostů je navíc nutné evidovat číslo jejich zdravotní pojišťovny a pohlaví.
Může být ubytován v maximálně jednom pokoji a během pobytu se zúčastní většího
počtu vyšetření.
 |  
| 
Lékař
 | 
Lékař provádí vyšetření pacientů a předepisuje jim procedury, ovšem zatím bez
místa a sestry, zato ale specifikuje jejich typ a počet.
 |  
| 
Sestra
 | 
Sestra provádí procedury, které ji systém přidělí. Může ale provádět jen ty, pro které
má kvalifikaci. Kvalifikací může mít několik, ale také žádnou.
 |  
| 
Pokoj
 | 
Na pokoji může být ubytováno několik hostů až do jeho kapacity. Relace ubytování je zde pouze
informativní a nezaznamenává historii. Lze ale zavést požadavek stajného pohlaví
hostů na jednom pokoji.
 |  
| 
Léčebna
 | 
Léčebna je vybavena pro vykonávání několika druhů procedur. V jednom čase se v ní může konat
procedur více, a to až do počtu daného její kapacitou.
 |  
| 
Vyšetření
 | 
Vyšetření je provedeno právě jedním lékařem na právě jednom pacientovi. Výsledkem může být
popis diagnózy a předepsání několika procedur s daným druhem, ale bez konkrétní doby.
 |  
| 
Procedura
 | 
Procedura musela být předepsána při určitém vyšetření a musí mít přiřazen druh.
Pacient je jednoznačně přiřazen přes entitu Vyšetření.
Atribut Provedena slouží pro potvrzení vykonání procedury.
 |  
| 
Druh procedury
 | 
Jednoduchý číselník typů procedur.
 |  
  | 
ER-model vytvořený programem ER modeller (odkazuje na větší verzi):
3. Integritní omezení
Byla navržena na začátku semestru a jsou implementována  v procedurálním rozšíření PL/SQL.
| 
rodná čísla
 | 
při vkládání osoby do databáze i editaci je vyžadováno, aby bylo rodné číslo
dělitelné 11, je-li vyplňeno.
 |  
| 
kapacita pokoje
 | 
kontrola, že počet pacientů ubytovaných na pokoji nepřekročí jeho kapacitu
 |  
| 
kapacita léčebny
 | 
kontrola, že není kapacita léčebny překročena v jednom čase
 |  
| 
kvalifikace sestry
 | 
sestra musí mít kvalifikaci k dané proceduře, než databáze povolí
zápis do rozvrhu procedur
 |  
| 
vybavení léčebny
 | 
podobně léčebna musí být k proceduře vybavena
 |  
| 
pohlaví hostů
 | 
jedná se o puritánské lázně, hosté na jednom pokoji musí být stejného
pohlaví
 |  
  | 
4. Implementace
Byla navržena na začátku semestru a jsou implementována  v procedurálním rozšíření PL/SQL.
| 
rodná čísla
 | 
Jednoduchý trigger nad tabulkou Osoba
 |  
| 
kapacita pokoje
 | 
Obsazení pokoje se mění zápisem do tabulky Ubytovani, kterou je zároveň nutno
číst pro ověření integritního omezení. To vyvolává chybu
ORA-04091: table is mutating, trigger/function may not see it. 
Problém byl vyřešen sadou tří triggerů, kdy FOR EACH ROW připraví informace o tom, 
které pokoje je třeba ověřit, a uloží je do globální proměnné ve spec. package. Trigger
AFTER INSERT OR UPDATE pak realizuje kontrolu, uloženou v této globální proměnné jako seznam
(table) čisel pokojů. Tento trigger je postaven nad celou tabulkou, a chybu ORA-04091 nevyvolává.
 |  
| 
kapacita léčebny
 | 
Zde se vyskytl obdobný problém a řešení je obdobné. Jen konání procedury je identifikováno dvěma údaji
- datem a místem, tak je třeba v pomocných tabulkách uchovávat oba.
 |  
| 
kvalifikace sestry
 | 
Trigger nad tabulkou Provedeni_p.
Provede dotaz do tabulky Kvalifikace na kvalifikaci dané sestry rovnou
druhu požadované procedury. Je-li vyvolána výjimka NO_DATA_FOUND, je převedena
na chybu aplikace.
 |  
| 
vybavení léčebny
 | 
Obdobný trigger nad tabulkou Konani.
 |  
| 
pohlaví hostů
 | 
Opět jsou k ověření vyžadovány informace z tabulky Ubytovani, nad kterou je trigger
postaven. Řešení se skládá ze tří triggerů jako u prvních dvou integritních omezení.
 |  
  | 
5. Soubory
Přiložené soubory:
lazne_cr.sql - SQL skript pro vytvoření tabulek
lazne_in.sql - SQL skript pro naplnění daty
lazne_ch.sql - SQL skript pro definici triggerů a procedur,
obsahuje též testovací SQL příkazy vyvolávající chyby integrity
lazne_te.sql - SQL skript s těmito testovacími příkazy
lazne_te.log - a log jeho použití
lazne.zip - ZIP archiv projektu