Adatbázisok AB160119 megoldás

Adott szálloda foglalásait tartjuk nyilván. A szobatípusokba sorolt szobákat a *szobaszámukkal*, a szobákat lefoglaló megrendelő ügyfeleket (egyének, cégek, intézmények) pedig generált *kóddal* azonosítjuk. A lefoglalt szobákba beköltöző vendégek (igazolványszámmal rendelkező egyének) szintén *ügyfelek*.

A szobaár éjszakánként értendő; a dátumtól és a dátumig, az érkezés és a távozás dátum típusú.

## Az adatbázis:

A betűstílusok jelentése: **EGYED**, *kulcs*, egyéb tulajdonság.

## Alapfogalmak

1.    Adja meg a külső kulcsokat és a kapcsolatokat a fenti adatbázisban!

Kulcsok:

* SZOBA.SZTIPUS
* LAKIK.SZ\_SZÁM
* LAKIK.VENDÉG
* FOGLALÁS.SZ\_SZÁM
* FOGLALÁS.MEGRENDELŐ

KAPCSOLAT:

* SZTIPUS : SZOBA 1:N
* SZOBA : LAKIK 1:N
* ÜGYFÉL : LAKIK 1:N
* ÜGYFÉL : FOGLALÁS 1:N
* FOGLALÁS : LAKIK 1:N

   2.    Indokolja meg, hogy igaz-e az alábbi egyértelmű meghatározás:

```
       {sz_szám, vendég}-->{érkezés, távozás}

```

Nem, mert egy vendég egy adott számú szobát akárnyhányszor lakhat

3.    Mi a feltétele egy foglalás felvitelének?

Kell lennie szabad szobának, annak típusának, megrendelőnek, mai nap vagy nagyobb 'dátumtól' és 'dátumig' dátumnak.

4.    Írjon mintasorokat a köv. eseményekre:

*Kati és Pali2 éve* ismerkedtek meg, amikor a szüleikkel voltak itt a szállodában. A legutolsó évvégét már kettesben töltötték itt egy 2-ágyas szobában.

Ügyfél:

```
1 Kati
2 Kati Apu
3 Kati Anyu
4 Pali
5 Pali Apu
6 Pali Anyu

```

Szoba:

```
1 3ágyas
2 3ágyas
3 2ágyas

```

2 éve az 1-es és 2-es szobában laktak a családok, tavaly évvégét meg a 3-as
szobában töltötték ketten.

Lakik:

```
2015.07.10 sz_szám: 1 vendég: 1 érkezés: 2015.07.10 távozás: 2015.07.20
2015.07.10 sz_szám: 1 vendég: 2 érkezés: 2015.07.10 távozás: 2015.07.20
2015.07.10 sz_szám: 1 vendég: 3 érkezés: 2015.07.10 távozás: 2015.07.20
2015.07.10 sz_szám: 2 vendég: 4 érkezés: 2015.07.12 távozás: 2015.07.22
2015.07.10 sz_szám: 2 vendég: 5 érkezés: 2015.07.12 távozás: 2015.07.22
2015.07.10 sz_szám: 2 vendég: 6 érkezés: 2015.07.12 távozás: 2015.07.22
2016.12.28 sz_szám: 3 vendég: 1 érkezés: 2016.12.28 távozás: 2016.12.31
2016.12.28 sz_szám: 3 vendég: 4 érkezés: 2016.12.28 távozás: 2016.12.31

```

Foglalás:

```
2015.07.10 sz_szám: 1 dátumig: 2015.07.20 megrendelő: 2
2015.07.12 sz_szám: 2 dátumig: 2015.07.22 megrendelő: 5
2016.12.28 sz_szám: 3 dátumig: 2016.12.28 megrendelő: 4

```

5.    Bővítse a szerkezetet *az árváltozások nyilvántartásának* lehetőségével!

Új tábla:

## SQL-lekérdezések

1. hány foglalt szoba van jelenleg a szállodában?

```
SELECT count(*)
FROM foglalás
WHERE dátumtól <= DATE() and dátumig > DATE()

```

2. melyik megrendelő hány foglalást tett eddig?

```
SELECT megrendelő, COUNT(*) AS Foglalások_száma
FROM foglalás
GROUP by megrendelő

```

3. leghamarabb hány nap múlva szabadul fel egy 4-ágyas szoba?

```
SELECT MIN(dátumig - DATE())
FROM foglalás, sztipus, szoba
WHERE sztipus.sztípus = szoba.sztipus
AND ágy = 4
AND szoba.sz_szám = foglalás.sz_szám dátumig > DATE()

```

4. hányan laktak tavaly a legdrágább szobában?

```
SELECT count(vendég)
FROM lakik, szoba, sztipus
WHERE sztipus.sztípus = szoba.sztipus
AND szoba.sz_szám = lakik.sz_szám
AND YEAR(dátumtól) = YEAR(DATE())-1
AND ár=(SELECT MAX(ár) FROM sztipus)

```

5. kik távoztak idén hamarabb a szobájukból, mint ameddig az le volt foglalva?

```
SELECT Lakik.vendég
FROM Lakik, Foglalás
WHERE Foglalás.dátumtól = lakik.dátumtól
AND Foglalás.sz_szám = lakik.sz_szám
AND Lakik.távozás < Foglalás.dátumig
AND YEAR(távozás) = YEAR(DATE())

```