up::



Diagram (6p)

( ER model )


Transformace (4p)

( ER RA schema )


RA - Query (10p)

Sample test

Lab 4

( No )

( Easy )

( Harder )

FIT

26.11.2025

( řešení jsou možná špatně )

Vyberte id zvířete které bylo krmeno všemi ošetřovateli (id_zvire).

{
 Krmeni[id_zvire, id_osetrovatel]
 ÷ 
 Osetrovatel[id_osetrovatel]
}[id_zvire]

(1) Vyberte jména zvířat a datum narození, která byla již někdy nakrmena(mají záznam o krmení), tak že ve výsledku budete mít tabulku s názvy sloupců (jmeno zvirete, datum narozeni zvirete). Pro ??? např. “počet mladat” (nepoužívejte diakritiku)

{krmeni*>zvire}[
	jmeno_zvire -> jmeno zvirete, 
	datum_narozeni -> datum narozeni zvirete
]

Vyberte jména zvířat (jmeno_zvire). Vybíráme pouze krmená zvířata tak, abychom měli požadovaná jména na výstupu.

{ Krmeni * Zvire }[jmeno_zvire] //???
// ---
{ Krmeni *> Zvire }[jmeno_zvire] //???

Vyberte všechny atributy zvířat (id_zvire, jmeno_zvire, druh, datum_narozeni, id_kmotr) se jménem ‘Azor’, kterým nedělá kmotra ošetřovatel se jménem ‘Huml’.

{
 {
  Zvire(jmeno_zvire = 'Azor')
 }
\
 {
  Zvire(jmeno_zvire = 'Azor')
  *
  Osetrovatel(jmeno_osetrovatel = 'Huml')
 }
}[id_zvire, jmeno_zvire, druh, datum_narozeni, id_kmotr]

(2) Zjistěte atributy pacientů, které ošetřoval bud lékař s ID=1 nebo lékař s ID=2

{
  VIS(DID = 1DID = 2) * PAT
}

28.11.2025

1

Mějme fragment relačního schématu:
Osetrovatel (id_osetrovatel, jmeno_osetrovatel, adresa, plat)
Krmeni (id_osetrovatel, id_zvire, datum, cas, typ_krmiva, mnozstvi)
Zvire (id_zvire, jmeno_zvire, druh, datum_narozeni, id_kmotr)
IO: Krmeni[id_osetrovatel] ⊆ Osetrovatel[id_osetrovatel] 
       Krmeni[id_zvire] ⊆ Zvire[id_zvire]
       Zvire[id_kmotr] ⊆ Osetrovatel[id_osetrovatel]

Vztah mezi ošetřovatelem a zvířetem ( Zvire[id_kmotr] ⊆ Osetrovatel[id_osetrovatel]) nazývejme kmotrovství. Tedy ošetřovatel může dělat kmotra některému zvířeti. Tento vztah nesouvisí s krmením.
1)

Pomocí relační algebry vyberte jméno kmotra, jméno zvířete a jejich datum narození (jmeno_kmotra, jmeno_zvire, datum_narozeni), které mají nějakého kmotra. Pozor, kmotr je ošetřovatel.

{ 
Osetrovatel[id_osetrovatel -> id_kmotr, jmeno_osetrovatel -> jmeno_kmotra] 
* Zvire 
}[jmeno_kmotra, jmeno_zvire, datum_narozeni]

2

Let us have a hospital database. Primary keys are underlined, foreign keys are described using RA.

PAT (PID, PNA, PAD, PDB)

DOC (DID, DNA, SPE)

VIS (PID, DID, DVI, DIA)

VIS[PID] ⊆ PAT[PID]

VIS[DID] ⊆ DID [DID]
2)

Zjistěte atributy pacientů, které ošetřoval buď lékař s ID=1 nebo lékař s ID=2

PAT <* VIS(DID='1' ∨ DID='2')
3)

Pomocí relační algebry vyberte id a jména ošetřovatelů (id_osetrovatel,jmeno_osetrovatel), kteří nedělají nikomu kmotry.

{ 
	Osetrovatel 
	!<* 
	Zvire[id_kmotr -> id_osetrovatel]
}[id_osetrovatel, jmeno_osetrovatel]
4)
  • Pomocí relační algebry vyberte jména ošetřovatelů (jmeno_osetrovatel), kteří krmili slony, ale nekrmili lasice. 
  • Nápověda - druhy se jmenují ‘slon’ a ‘lasice’. Přemýšlejte co od čeho odečítáte pokud využijete množinový rozdíl.
{
  {Osetrovatel <* {Krmeni * Zvire(druh='slon')}}
  \
  {Osetrovatel <* {Krmeni * Zvire(druh='lasice')}}
}[jmeno_osetrovatel]
5)
  • Pomocí relační algebry vyberte jména zvířat a jejich data krmení  (jmeno_zvire, datum). 
  • Vybíráme pouze krmená zvířata abychom měli obě požadované hodnoty na výstupu.
{Zvire * Krmeni}[jmeno_zvire, datum]