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:

 

  1. union(r,s), ahol r és s sémája megegyezik,
  2. minus(r,s), ahol r és s sémája megegyezik,
  3. product(r,s), ahol r és s sémájában nincs azonos nevű attribútum,
  4. project(r,A1,…,Ak), ahol A1,…,Ak az r sémájában szereplő attribútumok,
  5. rename(r,s(B1,…,Bn), ahol r relációt s-re nevezzük át, melynek sémája B1,…,Bn attribútumokat tartalmazza,
  6. 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.