„Adatbázisok - Relációs lekérdezések gyakorlat” változatai közötti eltérés

Ferrero (vitalap | szerkesztései)
Nincs szerkesztési összefoglaló
aNincs szerkesztési összefoglaló
 
(9 közbenső módosítás, amit 2 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
Az aktuális tematika és feladatsor elérhető a [https://www.db.bme.hu/targyak/adatbazisok/gyakorlatok/2-gyakorlat tárgyhonlapon].
==Sor- és oszlopkalkulus példák megoldása==
==Sor- és oszlopkalkulus példák megoldása==


93. sor: 95. sor:
** Azon x-ek halmaza, akikhez létezik y, akivel ((x, y) vagy (y, x) sorrendben) sort alkotnak H-ban, és létezik z, w, amikkel, és a 'tanár' konstanssal mint foglalkozással, sort alkotnak az M táblában: <math> \{x \mid (\exists y: (H(x, y)\vee H(y, x)))\wedge(\exists z, w: M(x, \text{'tanar'}, z, w))\} </math>
** Azon x-ek halmaza, akikhez létezik y, akivel ((x, y) vagy (y, x) sorrendben) sort alkotnak H-ban, és létezik z, w, amikkel, és a 'tanár' konstanssal mint foglalkozással, sort alkotnak az M táblában: <math> \{x \mid (\exists y: (H(x, y)\vee H(y, x)))\wedge(\exists z, w: M(x, \text{'tanar'}, z, w))\} </math>
* '''Kik a BjutiSzalonban dolgozó nők férjei?'''
* '''Kik a BjutiSzalonban dolgozó nők férjei?'''
** Azon x-ek halmaza, akikhez van y, hogy (y, x) házaspár, és van z, w, amik x-szel és a 'BjutiSzalon' konstanssal szerepelnek M-ben. <math> \{x \mid (\exists y: H(y, x))\wedge(\exists z, w: M(x, z, \text{'BjutiSzalon'}, w))\} </math>
** Azon x-ek halmaza, akikhez van y, hogy (x, y) házaspár, és van z, w, amik y-nnal és a 'BjutiSzalon' konstanssal szerepelnek M-ben. <math> \{x \mid (\exists y: H(x, y))\wedge(\exists z, w: M(y, z, \text{'BjutiSzalon'}, w))\} </math>
* '''Melyek azok a foglalkozások, amiket csak egy-egy ember űz?'''
* '''Melyek azok a foglalkozások, amiket csak egy-egy ember űz?'''
** Azon x-ek halmaza, amikhez létezik y, z, w, akikkel sort alkot M-ben (vagyis van ilyen foglalkozás), de nem létezik két különböző hármas (y, z, w, t, s, u), amikkel sort alkot (és a két sorban a nevek különböznek). <math> \{x \mid (\exists y, z, w: M(y, x, z, w))\wedge(\neg\exists y, z, w, t, s, u: (M(y, x, z, w)\wedge M(t, x, s, u)\wedge(y\neq t)))\} </math>
** Azon x-ek halmaza, amikhez létezik y, z, w, akikkel sort alkot M-ben (vagyis van ilyen foglalkozás), de nem létezik két különböző hármas (y, z, w, t, s, u), amikkel sort alkot (és a két sorban a nevek különböznek). <math> \{x \mid (\exists y, z, w: M(y, x, z, w))\wedge(\neg\exists y, z, w, t, s, u: (M(y, x, z, w)\wedge M(t, x, s, u)\wedge(y\neq t)))\} </math>
101. sor: 103. sor:
==Biztonságosak-e az alábbi kifejezések? A választ indokoljuk!==
==Biztonságosak-e az alábbi kifejezések? A választ indokoljuk!==


* A biztonságos sorkalkulust azért találták ki, mert a sorkalkulust nem mindig lehet véges sok lépésben kiértékelni. Pl. egy olyan kifejezést, hogy <math> s^{(m)}[1] &lt; 3 </math> végtelen sokféle sor kielégíthet, ezért előfordulhat, hogy nem fog véges sok lépésben lefutni a kiértékelése. Ezt úgy küszöbölték ki a biztonságos változatban, hogy tettek két megkötést. Ezeknek az egyszerű megfogalmazásához két dolog:
* A biztonságos sorkalkulust azért találták ki, mert a sorkalkulust nem mindig lehet véges sok lépésben kiértékelni. Pl. egy olyan kifejezést, hogy <math> s^{(m)}[1] < 3 </math> végtelen sokféle sor kielégíthet, ezért előfordulhat, hogy nem fog véges sok lépésben lefutni a kiértékelése. Ezt úgy küszöbölték ki a biztonságos változatban, hogy tettek két megkötést. Ezeknek az egyszerű megfogalmazásához két dolog:
** Egy formula domainje értékek egy halmaza. Két dologból áll össze: a formulában szereplő konstansok, illetve a formulában szereplő relációk összes sorának összes értéke. Nevezzünk "ismeretlen" sornak olyan sorokat, amiknek van domainen kívüli értéke.
** Egy formula domainje értékek egy halmaza. Két dologból áll össze: a formulában szereplő konstansok, illetve a formulában szereplő relációk összes sorának összes értéke. Nevezzünk "ismeretlen" sornak olyan sorokat, amiknek van domainen kívüli értéke.
** Független változó olyan változó, amit "kívülről kap" a kifejezés, pl. <math> \exists y^{(m)}: (R^{(m)}(y^{(m)}) \wedge y^{(m)}[1]=x^{(n)}[2]) </math>-ban x-et "kívülről" kapja a kifejezés, és ehhez keres olyan y-t, amire teljesül a feltétel.  
** Független változó olyan változó, amit "kívülről kap" a kifejezés, pl. <math> \exists y^{(m)}: (R^{(m)}(y^{(m)}) \wedge y^{(m)}[1]=x^{(n)}[2]) </math>-ban x-et "kívülről" kapja a kifejezés, és ehhez keres olyan y-t, amire teljesül a feltétel.  
112. sor: 114. sor:
* Az univerzális kvantoros kifejezéseket egzisztenciális kvantorossá kell alakítani a <math> \forall x: \omega(x) \Leftrightarrow \neg(\exists x: (\neg \omega(x))) </math> összefüggéssel.
* Az univerzális kvantoros kifejezéseket egzisztenciális kvantorossá kell alakítani a <math> \forall x: \omega(x) \Leftrightarrow \neg(\exists x: (\neg \omega(x))) </math> összefüggéssel.
'''Kvantor nélküli kifejezések:'''
'''Kvantor nélküli kifejezések:'''
* <math> s^{(m)}[1] &lt; 3 </math>
* <math> s^{(m)}[1] < 3 </math>
** Nyilván nem csak domainbeli (itt a domain csak a 3-mat tartalmazza) elemeket tartalmazó sorok elégíthetik ki, úgyhogy nem biztonságos.
** Nyilván nem csak domainbeli (itt a domain csak a 3-mat tartalmazza) elemeket tartalmazó sorok elégíthetik ki, úgyhogy nem biztonságos.
* <math> R^{(m)}(s^{(m)}) \wedge s^{(m)}[1]=3 </math>
* <math> R^{(m)}(s^{(m)}) \wedge s^{(m)}[1]=3 </math>
** Az első tagot csak domainbeli sorok elégíthetik ki, a második nem tartalmaz kvantort, ezért biztonságos.
** Az első tagot csak domainbeli sorok elégíthetik ki, a második nem tartalmaz kvantort, ezért biztonságos.
* <math> R^{(m)}(s^{(m)}) \wedge s^{(m)}[1] &lt; 3 </math>
* <math> R^{(m)}(s^{(m)}) \wedge s^{(m)}[1] < 3 </math>
** Az előzőhöz hasonlóan biztonságos.
** Az előzőhöz hasonlóan biztonságos.
* <math> \neg R^{(m)}(s^{(m)}) \wedge s^{(m)}[1]=3 </math>
* <math> \neg R^{(m)}(s^{(m)}) \wedge s^{(m)}[1]=3 </math>
124. sor: 126. sor:
'''Kvantort tartalmazó kifejezések:'''
'''Kvantort tartalmazó kifejezések:'''
* Először vizsgáljuk meg biztonságosság szempontjából az alábbi három kifejezést és negáltjaikat:
* Először vizsgáljuk meg biztonságosság szempontjából az alábbi három kifejezést és negáltjaikat:
* <math> \Phi(x, y)=R_1(x, y) \wedge y &gt; 0 </math>
* <math> \Phi(x, y)=R_1(x, y) \wedge y > 0 </math>
* <math> \Psi(x, y)=\neg R_1(x, y) \vee y &gt; 0 </math>
* <math> \Psi(x, y)=\neg R_1(x, y) \vee y > 0 </math>
* <math> \Omega(x, y)=R_1(x, y) \vee y &gt; 0 </math>
* <math> \Omega(x, y)=R_1(x, y) \vee y > 0 </math>
* <math> \Theta(x)=R_2(x) \wedge \exists y: \Phi(x, y) </math>
* <math> \Theta(x)=R_2(x) \wedge \exists y: \Phi(x, y) </math>
* <math> \Theta(x)=R_2(x) \wedge \exists y: \Psi(x, y) </math>
* <math> \Theta(x)=R_2(x) \wedge \exists y: \Psi(x, y) </math>
144. sor: 146. sor:
* '''Mi a legprimitívebb algoritmus, amit el tudsz képzelni egy biztonságos sorkalkulus kifejezés eredményhalmazának előállítására?'''
* '''Mi a legprimitívebb algoritmus, amit el tudsz képzelni egy biztonságos sorkalkulus kifejezés eredményhalmazának előállítására?'''
* '''Készíts reláció-algebrai kifejezést egy halmaz legkisebb, ill. második legkisebb elemének kiválasztására! Mi az ennek megfelelő sor- és oszlopkalkulus kifejezés?'''
* '''Készíts reláció-algebrai kifejezést egy halmaz legkisebb, ill. második legkisebb elemének kiválasztására! Mi az ennek megfelelő sor- és oszlopkalkulus kifejezés?'''
** Reláció-algebránál először vesszük a halmaz szorzatát magával, és kiszelektáljuk azokat a párokat, ahol az első kisebb, mint a második, majd projekcióval meghagyjuk a második oszlopot. Ekkor megkaptuk azon elemek halmazát, amik nagyobbak valaminél, ezt kivonva az eredetiből marad a legkisebb elem. <math> H\setminus (\pi_{2}(\sigma_{2&gt;1}(H\times H))) </math>
** Reláció-algebránál először vesszük a halmaz szorzatát magával, és kiszelektáljuk azokat a párokat, ahol az első kisebb, mint a második, majd projekcióval meghagyjuk a második oszlopot. Ekkor megkaptuk azon elemek halmazát, amik nagyobbak valaminél, ezt kivonva az eredetiből marad a legkisebb elem. <math> H\setminus (\pi_{2}(\sigma_{2>1}(H\times H))) </math>
** A második legkisebb elemet úgy kapjuk meg, hogy azon elemek halmazából, amiknél van kisebb, kivonjuk azok halmazát, amiknél legalább 2 kisebb van: <math> (\pi_{2}(\sigma_{2&gt;1}(H\times H)))\setminus (\pi_{3}(\sigma_{(2&gt;1)\wedge(3&gt;2)}(H\times H\times H))) </math>
** A második legkisebb elemet úgy kapjuk meg, hogy azon elemek halmazából, amiknél van kisebb, kivonjuk azok halmazát, amiknél legalább 2 kisebb van: <math> (\pi_{2}(\sigma_{2>1}(H\times H)))\setminus (\pi_{3}(\sigma_{(2>1)\wedge(3>2)}(H\times H\times H))) </math>
** Sorkalkulus: azon egyelemű sorok halmaza, amikhez nem létezik nála kisebb első elemmel rendelkező egyelemű sor. <math> \{s^{(1)}\mid H^{(1)}(s^{(1)})\wedge\neg\exists t^{(1)}:(H^{(1)}(t^{(1)})\wedge s^{(1)}[1]&gt;t^{(1)}[1])\} </math> Illetve a második legkisebb elem: létezik nála kisebb, de nem létezik két különböző nála kisebb. <math> \{s^{(1)}\mid H^{(1)}(s^{(1)})\wedge\exists t^{(1)}:(H^{(1)}(t^{(1)})\wedge s^{(1)}[1]&gt;t^{(1)}[1])\wedge\neg\exists t^{(1)}, u^{(1)}:(H^{(1)}(t^{(1)})\wedge H^{(1)}(u^{(1)})\wedge s^{(1)}[1]&gt;t^{(1)}[1]\wedge s^{(1)}[1]&gt;u^{(1)}[1] \wedge u^{(1)}[1]\neq t^{(1)}[1])\} </math>
** Sorkalkulus: azon egyelemű sorok halmaza, amikhez nem létezik nála kisebb első elemmel rendelkező egyelemű sor. <math> \{s^{(1)}\mid H^{(1)}(s^{(1)})\wedge\neg\exists t^{(1)}:(H^{(1)}(t^{(1)})\wedge s^{(1)}[1]>t^{(1)}[1])\} </math> Illetve a második legkisebb elem: létezik nála kisebb, de nem létezik két különböző nála kisebb. <math> \{s^{(1)}\mid H^{(1)}(s^{(1)})\wedge\exists t^{(1)}:(H^{(1)}(t^{(1)})\wedge s^{(1)}[1]>t^{(1)}[1])\wedge\neg\exists t^{(1)}, u^{(1)}:(H^{(1)}(t^{(1)})\wedge H^{(1)}(u^{(1)})\wedge s^{(1)}[1]>t^{(1)}[1]\wedge s^{(1)}[1]>u^{(1)}[1] \wedge u^{(1)}[1]\neq t^{(1)}[1])\} </math>
** Oszlopkalkulus: ugyanaz, mint az előbb, csak egyelemű sorváltozók első elemei helyett egy-egy oszlopváltozó szerepel: <math> \{s\mid H(s)\wedge\neg\exists t:(H(t)\wedge s&gt;t)\} </math> illetve <math> \{s\mid H(s)\wedge\exists t:(H(t)\wedge s&gt;t)\wedge\neg\exists t, u:(H(t)\wedge H(u)\wedge s&gt;t\wedge s&gt;u \wedge u\neq t)\} </math>
** Oszlopkalkulus: ugyanaz, mint az előbb, csak egyelemű sorváltozók első elemei helyett egy-egy oszlopváltozó szerepel: <math> \{s\mid H(s)\wedge\neg\exists t:(H(t)\wedge s>t)\} </math> illetve <math> \{s\mid H(s)\wedge\exists t:(H(t)\wedge s>t)\wedge\neg\exists t, u:(H(t)\wedge H(u)\wedge s>t\wedge s>u \wedge u\neq t)\} </math>
* '''Mondjunk minél kacifántosabb helybenhagyó műveleteket!'''
* '''Mondjunk minél kacifántosabb helybenhagyó műveleteket!'''
* '''Mikor kényelmesebb a sor- és mikor az oszlopkalkulus?'''
* '''Mikor kényelmesebb a sor- és mikor az oszlopkalkulus?'''