Базе података 2/К1 2024 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
 
(4 међуизмене истог корисника нису приказане)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
{{nerešeno}}
'''Први колоквијум 2024. године''' је одржан 31. марта и трајао је сат времена. Било је дозвољено коришћење алата ''Relax''.
'''Први колоквијум 2024. године''' је одржан 31. марта и трајао је сат времена. Било је дозвољено коришћење алата ''Relax''.


Ред 11: Ред 10:
  Lekar(<u>IDLek</u>, Ime, JMBG, Specijalizacija)
  Lekar(<u>IDLek</u>, Ime, JMBG, Specijalizacija)
  Karton(<u>IdKar</u>, IDPac, IDBol)
  Karton(<u>IdKar</u>, IDPac, IDBol)
  Pregled(<u>IdPre</u>, Datum, ObjektivniNalaz, DIjagnoza, IDKar, IdLek)
  Pregled(<u>IdPre</u>, Datum, ObjektivniNalaz, Dijagnoza, IDKar, IdLek)
  Hospitalizacija(<u>IDHos</u>, DatumPri, DatumOtp, Dijagnoza, KlinickaSlika, IDPac, IDBol)
  Hospitalizacija(<u>IDHos</u>, DatumPri, DatumOtp, Dijagnoza, KlinickaSlika, IDPac, IDBol)
  Overa(<u>IDKar</u>, <u>RedBr</u>, DatumOd, NazivPoslodavca)
  Overa(<u>IDKar</u>, <u>RedBr</u>, DatumOd, NazivPoslodavca)
Ред 24: Ред 23:
& \Pi_{IDLek, IDPac, IDBol} (Pregled~\infty~Karton) \rightarrow Pomocna \\
& \Pi_{IDLek, IDPac, IDBol} (Pregled~\infty~Karton) \rightarrow Pomocna \\


& \Pi_{IDPac} ( (\rho \, P1(Pomocna)) \, \infty_{P1.IDPac =P2.IDPac,\: P1.IDBol \neq P2.IDBol, \: P1.IDLek = P2.IDLek} \, (\rho \, P2(Pomocna))) \rightarrow Resenje \\
& \Pi_{IDPac} ( (\rho \, P1(Pomocna)) \, \infty_{P1.IDPac =P2.IDPac\: and \:P1.IDBol \neq P2.IDBol\: and \: P1.IDLek = P2.IDLek} \, (\rho \, P2(Pomocna))) \rightarrow Resenje \\
\end{align*}
\end{align*}
</math>
</math>


== 2. задатак ==
== 2. задатак ==
{{делимично решено}}
Написати исказ релационе алгебре који даје шифре пацијената који су тачно два пута били хоспиталозовани због исте дијагнозе, без обзира у којој болници. Дозвољено је коришћење оператор за преименовање, али не и за груписање.
Написати исказ релационе алгебре који даје шифре пацијената који су тачно два пута били хоспиталозовани због исте дијагнозе, без обзира у којој болници. Дозвољено је коришћење оператор за преименовање, али не и за груписање.
=== Решење ===
=== Решење ===
<math>
\begin{align*}
& \Pi_{H1.IDPac, H1.IDHos \rightarrow H1, H2.IDHos \rightarrow H2} ( (\rho \, H1(Hospitalizacija)) \, \infty_{H1.IDPac = H2.IDPac and H1.Dijagnoza > H2.Dijagnoza} \, (\rho \, H2(Hospitalizacija))) \rightarrow Bar2 \\
& \Pi_{H1.IDPac} ( (\rho \, P1(Bar2)) \, \infty_{P1.IDPac =P2.IDPac\: and \:P1.H2 \neq P2.H2} \, (\rho \, P2(Bar2))) \rightarrow Bar3  \\
& \Pi_{H1.IDPac} (Bar2) \rightarrow Pomocna \\
& Pomocna - Bar3 \rightarrow Resenje
\end{align*}
</math>


== 3. задатак ==
== 3. задатак ==
Ред 50: Ред 61:
</syntaxhighlight>
</syntaxhighlight>
=== Решење ===
=== Решење ===
Дати упит дохвата све пацијенте старије од 40 година који имају картон у свакој од болница. Могуће решење у релационој алгреби је дато испод:
'''Објашњење упита:''' Најдубљи упит дохвата све болнице у којима пацијент има отворен картон. Први окружујићи упит дохвата све болнице које нису ту, тј. све болнице у којима пацијент нема картон. Самим тим, цео упит дохвата све пацијенте старије од 40 година који имају картон у свакој болници.
 
Као што је и познато са предавања, "сви-све" одмах сигнализира да је у решењу потребно одрадити дељење. Могуће решење се налази испод.


<math>
<math>

Тренутна верзија на датум 6. април 2024. у 14:26

Први колоквијум 2024. године је одржан 31. марта и трајао је сат времена. Било је дозвољено коришћење алата Relax.

Поставка

У систему болничког лечења прате се информације о лекарима који раде у болници и прегледима који су ти лекари обавили. Сваки пацијент може имати највише један картон у свакој од болница. Сваки картон се повремено оверава када се уписује назив послодавца преко кога је пацијент осигуран. У случајевима када је то потребно пацијенти могу бити хоспитализовани, тј. примљени на болничко лечење (датум отпуштања се попуњава тек након што се лечење заврши, а до тада је NULL).
Одговарајућа шема базе је:

Mesto(IDMes, Naziv)
Bolnica (IDBol, Naziv, Kapacitet, Iskoriscenost, IDMes)
Pacijent(IDPac, Ime, JMBG, GodineStarosti, IDMes)
Lekar(IDLek, Ime, JMBG, Specijalizacija)
Karton(IdKar, IDPac, IDBol)
Pregled(IdPre, Datum, ObjektivniNalaz, Dijagnoza, IDKar, IdLek)
Hospitalizacija(IDHos, DatumPri, DatumOtp, Dijagnoza, KlinickaSlika, IDPac, IDBol)
Overa(IDKar, RedBr, DatumOd, NazivPoslodavca)
Radi(IDLek, IDBol)
Iskoriscenost: N- Niska, S - Srednja, V - Visoka

1. задатак

Написати исказ релационе алгебре који даје шифре пацијената који је лечио исти лекар, али у различитим болницама.[1]

Решење

2. задатак

Написати исказ релационе алгебре који даје шифре пацијената који су тачно два пута били хоспиталозовани због исте дијагнозе, без обзира у којој болници. Дозвољено је коришћење оператор за преименовање, али не и за груписање.

Решење

3. задатак

За дати SQL упит дати еквивалентан исказ релационе алгебре.[2]

SELECT IDPac
FROM Pacijent P
WHERE P.GodineStarosti>40 AND NOT EXISTS(
	SELECT IDBol
    FROM Bolnica B
    WHERE B.IDBol NOT IN(
    	SELECT K.IDBol
        FROM Knjizica K
        WHERE K.IDPac = P.IDPac
    )
)

Решење

Објашњење упита: Најдубљи упит дохвата све болнице у којима пацијент има отворен картон. Први окружујићи упит дохвата све болнице које нису ту, тј. све болнице у којима пацијент нема картон. Самим тим, цео упит дохвата све пацијенте старије од 40 година који имају картон у свакој болници.

Као што је и познато са предавања, "сви-све" одмах сигнализира да је у решењу потребно одрадити дељење. Могуће решење се налази испод.

Напомене

  1. При обилаксу професор је напоменуо да се упит односи на истог пацијента.
  2. Овде је било могуће користити све операторе.