2006. őszi félév:
Adatbázis-kezelés (IKP-ABE)
Beadandó feladat (1N):
Tetszőleges relációs algebrai
kifejezés kiértékelése
Feladatleírás:
C++ nyelven írjunk egy
programot, amely a relációs algebrai alapműveletekből
felépített kifejezéseket
kiértékeli. A
programot fordítsuk le MS Windows alatt.
A program neve abcdefg EHA kód
esetén a következő
legyen:
1nabcdefg.exe
A program MS Windows parancssorból futtatható legyen 2
paraméter, az input és az output fájl nevének
megadásával:
1nabcdefg input.txt output.txt
A programot, és a forráskódo(kat) az ab2006@inf.elte.hu címre kell
elküldeni a megadott határidő előtt.
A csatolt állományokat nem kell
összetömöríteni. Mindenki egy levelet küldjön,
és ahhoz legyen minden csatolva.
A levél subject-je abcdefg EHA kód esetén
1nabcdefg legyen. A levélbe nem kell semmit
írni!
A program egy szöveges input fájlból olvassa be a táblákat,
és a relációs algebrai kifejezést, majd a kiértékelés
eredményét a végéhez csatolja. Szintaktikai
ellenőrzést nem muszáj végezni, feltehetjük,
hogy az input fájl helyes, azaz a kifejezés
helyes, a kifejezésben előforduló összes tábla
szerepel az input fájlban, a rekordok
megfelelnek a sémáknak,
stb.
Például az input1n.txt
fájlt beolvasva, (ami egy természetes összekapcsolásnak
felel meg), a programnak az output1n.txt fájlt kell
előállítania.
Alapműveletek a következő
formában lesznek megadva:
- union(r,s), ahol r és s sémája megegyezik,
- minus(r,s), ahol r és s sémája megegyezik,
- product(r,s), ahol r és s sémájában nincs azonos nevű attribútum,
- project(r,A1,…,Ak), ahol A1,…,Ak az r sémájában szereplő
attribútumok,
- rename(r,s(B1,…,Bn), ahol r
relációt s-re nevezzük át, melynek
sémája B1,…,Bn attribútumokat
tartalmazza,
- select(r,F), ahol F egy helyes logikai
kifejezés. Helyes logikai kifejezés az EQ(x,y), NEQ(x,y), LT(x,y), LTE(x,y), GT(x,y), GTE(x,y), melyek jelentése
=,<>,<, <=,>,>=, és ahol x és y az r attribútumai, vagy
az egyik az r egy attribútuma, a másik pedig konstans. Az
AND(F1,F2), OR(F1,F2), NOT(F1) is helyes logikai
kifejezés, ha F1 és F2 is helyes logikai
kifejezés.
A könnyebbség és
egyértelműség érdekében a megvalósításhoz
feltesszük a következőket:
- A
táblákban az oszlopok
típusa egész (int) vagy legfeljebb 100 hosszú karakter
(char(100)).
- A karaktersorozatok
egyszeres idézőjelek között
szerepelnek a táblák
soraiban, illetve a kiválasztás
összehasonlításaiban, például select(r,EQ(r.A,’alma’)).
- A
relációnevek, attribútumnevek.char(30) típusúak.
- Az
input relációk, valamint a részeredményekhez
használt relációk mindegyike
legfeljebb 50 attribútumot, és legfeljebb 10000 sort tartalmaz.
- A
relációk sorainak
komponenseit vesszők
választják el egymástól.
- A kis-
és nagybetűket különbözőeknek
tekintjük.
- Az
input és output fájlokban a kifejezés,
a relációk, és az eredmény között
1-1 üres sor szerepel.
- A select(r,F) esetén az F feltételben a zárójelezés mélysége
legfeljebb 20.
- A
relációs algebrai kifejezésben a
műveletek legfeljebb 30 mélységben
ágyazhatók egymásba.
- Az
input fájlban a relációk sorai balról
jobbra lexikografikus sorrendben szerepelnek,
és egy sor csak egyszer szerepel.
- Az
output fájlban az eredményül kapott
reláció sorai is balról jobbra lexikografikus
sorrendben szerepeljenek, és egy sor csak
egyszer szerepeljen.
2006. október 2.