2. fejezet - Megoldások

2.1. Tervezési, modellezési feladatok

2.1.1. ER modell készítése

2.1.1.1. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktárhelyeinek ER modelljét.

2.1. ábra - ER modell

ER modell

Az egyes elemek elnevezésénél célszerű beszédes azonosítókat alkalmazni, az ábra terjedelme miatt viszont célszerű az elnevezéseket lerövidíteni. Néhány elnevezés magyarázata: Tkód: termékkód, Rhkód: raktárhely kód, Rkód: raktár kód, MEgys: mennyiségi egység (darab, liter, kg…), BeDat: betárolási dátum, LeDat: lejárati dátum. Ahol lehetséges, a kapcsolatokat is a tartalmukról kell elnevezni, ha ezt nem lehet megvalósítani, célszerű a kapcsolatokat az egyedek kezdőbetűivel azonosítani.

2.1.1.2. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég számlázási rendszerének ER modelljét.

2.2. ábra - ER modell

ER modell

A tétel gyenge egyed, azonosítása a sorszámból és a számlaszámból képzett összetett kulccsal történik. A TermékB egyed az egységár mező miatt különbözik az előző feladat TermékR egyedétől, ahol az egységár lényegtelen, itt viszont lényeges.

2.1.1.3. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktári megrendeléseinek ER modelljét.

2.3. ábra - ER modell

ER modell

Ha egy rendelésben csak egy beszállító szerepel, akkor az R-B kapcsolat 1:N típusú, ha több beszállító szerepelhetne, akkor viszont N:M típusú lenne.

2.1.1.4. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktári beszállításainak ER modelljét.

2.4. ábra - ER modell

ER modell

2.1.1.5. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég dolgozói adatbázisának ER modelljét.

2.5. ábra - ER modell

ER modell

2.1.1.6. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég webáruházának ER modelljét.

2.6. ábra - ER modell

ER modell

2.1.1.7. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég bolti átszállításának egyszerűsített ER modelljét.

2.7. ábra - ER modell

ER modell

2.1.2. EER modell készítése

2.1.2.1. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktárának EER modelljét.

2.8. ábra - EER modell

EER modell

2.1.2.2. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég dolgozói adatbázisának EER modelljét.

2.9. ábra - EER modell

EER modell

2.1.2.3. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég ajándékkosarainak EER modelljét.

2.10. ábra - EER modell

EER modell

2.1.2.4. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég számlázási rendszerének EER modelljét.

2.11. ábra - EER modell

EER modell

2.1.3. Hierarchikus adatmodel készítése

2.1.3.1. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég dolgozói adatbázisának hierarchikus modelljét.

2.12. ábra - Hierarchikus modell

Hierarchikus modell

2.1.3.2. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktári beszállításainak hierarchikus modelljét.

2.13. ábra - Hierarchikus modell

Hierarchikus modell

2.14. ábra - Hierarchikus modell

Hierarchikus modell

2.1.4. Konvertálás ER modellről hierarchikusra

2.1.4.1. Alakítsa át az alábbi ER modellt hierarchikus modellé! Készítse el mind a klasszikus mind a fejlettebb változat modelljét.

2.15. ábra - Hierarchikus modell

Hierarchikus modell

2.16. ábra - Hierarchikus modell

Hierarchikus modell

2.1.4.2. Alakítsa át az alábbi ER modellt hierarchikus modellé! Készítse el mind a klasszikus mind a fejlettebb változat modelljét.

2.17. ábra - Hierarchikus modell

Hierarchikus modell

2.18. ábra - Hierarchikus modell

Hierarchikus modell

2.1.5. Hálós adatmodell készítése

2.1.5.1. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktárának hálós adatmodelljét.

2.19. ábra - Hálós modell

Hálós modell

2.1.5.2. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég számlázási rendszerének hálós modelljét.

2.20. ábra - Hálós modell

Hálós modell

2.1.5.3. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég autóflotta nyilvántartási rendszerének hálós modelljét.

2.21. ábra - Hálós modell

Hálós modell

2.1.6. Konvertálás ER modellről hálósra

2.1.6.1. Alakítsa át az ER modellt hálós modellé!

2.22. ábra - Hálós modell

Hálós modell

2.1.6.2. Alakítsa át az ER modellt hálós modellé!

2.23. ábra - Hálós modell

Hálós modell

2.1.7. Relációs adatmodell készítése

2.1.7.1. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég tanfolyamainak relációs adatmodelljét.

2.24. ábra - Relációs modell

Relációs modell

Dolgozó [ Dkód (PK) ,Dnév ]

Végzettség [ Dkód, Leírás ]

Tanfolyam [ Tkód (PK), Téma ]

Képzés [ Dkód, Dátum, Hely, Tkód ]

Oktató [ Okód (PK), Onév, IrSz, Város, UHsz ]

T-O [ Tkód, Okód ]

2.1.7.2. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktárának relációs adatmodelljét.

2.25. ábra - Relációs modell

Relációs modell

Kategória [ Kkód (PK), Leírás ]

Termék [ Tkód (PK), Tnév, MEgys, Kkód ]

Raktár [ Rkód (PK), Leírás, Aktív ]

Raktárhely [ Rhkód (PK), Aktív, Rkód ]

Készlet [ Tkód, Menny, Bedat, Ledat, Rhkód ]

2.1.7.3. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég számlázási rendszerének relációs adatmodelljét.

2.26. ábra - Relációs modell

Relációs modell

Vevő [ Vkód (PK), Vnév, IrSz, Város, UHsz ]

Dolgozó [ Dkód (PK), Dnév ]

Számla [ SzSzám (PK), Dkód, Dátum, Összár, Vkód ]

Termék [ Tkód (PK), Tnév, MEgys, EgysÁr ]

Tétel [ SzSzám, Sorszám, Tkód, Menny, Összeg ]

2.1.7.4. Tervezze meg a VaKer – élelmiszerekkel kereskedő cég raktári megrendeléseinek relációs adatmodelljét.

2.27. ábra - Relációs modell

Relációs modell

2.1.8. Konvertálás ER modellről relációsra

2.1.8.1. Alakítsa át az alábbi ER modellt relációs modellé!

2.28. ábra - Relációs modell

Relációs modell

2.1.8.2. Alakítsa át az alábbi ER modellt relációs modellé!

2.29. ábra - Relációs modell

Relációs modell

2.1.8.3. Alakítsa át az alábbi ER modellt relációs modellé!

2.30. ábra - Relációs modell

Relációs modell

2.1.9. Normalizálás

2.1.9.1. Normalizálja az alábbi sémát 3NF-ig: R(X,Y,Z,Q,W) ahol Y → W, X → (Q,Z), Z → Y.

A szétvághatósági szabály alapján:  

X → (Q,Z) ↔ X → Q és X → Z

Armstrong 3. axiómája alapján:

X → Z és Z → Y ↔ X → Y

X → Y és Y → W ↔ X → W

A mezők atomiságát feltételezve:

1NF: R(X,Y,Z,Q,W)

2NF: = 1NF

3NF: R1(X,Q,Z) R2(Z,Y) R3(Y,W)

2.1.9.2. Normalizálja az alábbi sémát BCNF-ig: R(A,B,C,D,E) ahol C→E, A→D, E→B, (A,E)→A.

Armstrong 1. axiómája alapján:        

(A,E) → A és (A,E) → E

Armstrong 3. axiómája alapján:

(A,E) → A és A → D ↔ (A,E) → D

(A,E) → E és E → B ↔ (A,E) → B

De C → E, ezért (A,C) a kulcs.

A mezők atomiságát feltételezve:

1NF: R(A,C,B,D,E)

2NF: R1(A,C) R2(A,D) R3(C,E,B)

3NF: R1(A,C) R2(A,D) R3(C,E) R4(E,B)

BCNF: = 3NF

2.1.9.3. Normalizálja az alábbi sémát BCNF-ig: R(X,Y,Z,Q,R,S) ahol (Y,Q) → Y , Q → Z, Y → S,  (Y,Q) → R, S → X.

Armstrong 1. axiómája alapján:        

(Y,Q) → Y és (Y,Q) → Q

Armstrong 2. axiómája alapján:

Q → Z ↔ (Y,Q) → (Y,Z)

A szétvághatósági szabály alapján:

(Y,Q) → (Y,Z) ↔ (Y,Q) → (Y) és (Y,Q) → (Z)

Armstrong 3. axiómája alapján:        

(Y,Q) → Y és Y → S ↔ (Y,Q) → S

 (Y,Q) → S és S → X ↔ (Y,Q) → X

A mezők atomiságát feltételezve:

1NF: R(Y,Q,X,Z,R,S)

2NF: R1(Y,Q,R) R2(Y,S,X) R3(Q,Z)

3NF: R1(Y,Q,R) R2(Y,S) R3(S,X) R4(Q,Z)

BCNF: = 3NF

2.1.9.4. Normalizálja az alábbi sémát BCNF-ig: R(A,B,C,D,E,F) ahol A → C, E → B, C → (F,C),  (A,E) → D.

Armstrong 1. axiómája alapján:

(A,E) → A és (A,E) → E

A szétvághatósági szabály alapján:

C → (F,C) ↔ C → (F) és C → (C)

Armstrong 3. axiómája alapján:

(A,E) → A és A → C ↔ (A,E) → C

(A,E) → C és C → F ↔ (A,E) → F

(A,E) → E és E → B ↔ (A,E) → B

A mezők atomiságát feltételezve:

1NF: R(A,E,B,C,D,F)

2NF: R1(A,E,D) R2(A,C,F) R3(E,B)

3NF: R1(A,E,D) R2(A,C) R3(C,F) R4(E,B)

BCNF: = 3NF

2.1.9.5. Normalizálja az alábbi sémát BCNF-ig: R(A,B,C,D,E) ahol A → B, A → C, B → A,  B → C, C → D, D → E.

Armstrong 3. axiómája alapján:

B → C és C → D ↔ B → D

B → D és D → E ↔ B → E

De A → B, tehát A vagy B lehet a kulcs.

A mezők atomiságát feltételezve:

1NF: R(B,A,C,D,E)

2NF: = 1NF

3NF: R1(B,A) R2(A,C) R3(C,D) R4(D,E)

BCNF: R1(B,A,C) R2(C,D) R3(D,E)

2.1.10. Lekérdezési feladatok a hálós adatmodellben

2.1.10.1. Mely raktárhelyeken van 10000 Ft-nál drágább termék?

   
   p1 EgysÁr>10000 (Termék)
   while (db_status = = 0) {
     m1 (Tk, Készlet)
     while (db_status == 0) {
       o (Rh, Készlet)
       print(Rhkód)
       mn (Tk, Készlet)
     }
     pn EgysÁr>10000 (Termék)
   }
      

2.1.10.2. Mely raktárhelyeken mekkora mennyiség van a Gumikolbász nevű termékből?

   p1 Tnév=’Gumikolbász’ (Termék)
   while (db_status == 0) {
     m1 (Tk, Készlet)
     while (db_status == 0) {
       o (Rh, Készlet)
       print(Rhkód, Menny)
       mn (Tk, Készlet)
     }
     pn Tnév=’Gumikolbász’ (Termék)
   }
            

2.1.10.3. Hányféle termék van az A40-es raktárhelyen?

   db=0
   p1 Rhkód=’A40’ (Raktárhely)
   m1 (Rh, Készlet)
   while (db_status == 0) {
     db=db+1
     mn (Rh, Készlet)
   }
   print(db)
      

2.1.10.4. Mekkora értékű készlet van az A40-es raktárhelyen?

   Érték=0
   p1 Rhkód=’A40’ (Raktárhely)
   m1 (Rh, Készlet)
   while (db_status = = 0) {
     o (Tk, Készlet)
     Érték=Érték+Menny*EgysÁr
     mn (Rh, Készlet)
   }
   print(Érték)

2.1.11. Relációs algebra

Adott a következő relációs modell, a feladatokat ezen kell megoldani.

2.31. ábra - Relációs modell

Relációs modell

2.1.11.1. Adja meg az osztályok nevét!

П {Onév (Osztály)}

2.1.11.2. Adja meg a könyvelés dolgozóinak nevét, alapbérét!

П {Dnév, Alapbér} (σ {Onév=’könyvelés’} (Dolgozó >< {Dolgozo,okod = Osztaly.okod} Osztály))

2.1.11.3. Hány Osztály van?

Γ {}{count(*) }(Osztály) – Azt írja ki, hány darab rekord van az Osztály relációban.

2.1.11.4. Hányan dolgoznak a könyvelésen?

Γ {}{count(*)}(σ {Onév=’könyvelés’ }(Dolgozó >< {Dolgozo,okod = Osztaly.okod} Osztály))

A dolgozó és az osztály rekordpárosaiban hányszor fordul elő olyan rekord, ahol az osztálynév könyvelés.

2.1.11.5. Kik vettek részt a 2010 májusi raktártakarítás projektben?

П {Dnév} (σ {Pnév=’raktártakarítás’ AND Dátum=’2010.05.01’ } ((Dolgozó >< {Dolgozo.dkod = Resztvesz.dkod} Résztvesz) >< {Projekt,pkod = Resztvesz.pkod} Projekt ))

2.1.11.6. Adja meg a legnagyobb teljesítménybérű projektben részt vevők nevét!

П {Dnév} (σ {Tbér= Γ {}{max(Tbér)} (Projekt) }((Dolgozó >< {Dolgozo.dkod = Resztvesz.dkod} Résztvesz) >< {Projekt,pkod = Resztvesz.pkod} Projekt ))

2.1.11.7. Kik nem vettek még részt projektben?

П {Dnév} (Dolgozó) \ П {Dnév} (Dolgozó >< {Dolgozo.dkod = Resztvesz.dkod} Résztvesz)

Az összes dolgozó nevéből kivonjuk a projektekben részt vettek nevét.+

2.1.11.8. Összesen mennyibe került már a fásítás projekt?

Γ {}{sum(Tbér)}( σ {Pnév=’fásítás’} (Résztvesz >< {Projekt,pkod = Resztvesz.pkod} Projekt ))

2.1.11.9. Hányan vettek részt a 2010 májusi projektekben projektenként?

Γ{Pnév} {Pnév, count(*)}(σ {Dátum=’2010.05.01’} (Résztvesz >< {Projekt,pkod = Resztvesz.pkod} Projekt ))

2.1.11.10. Ki vett részt már legalább ötször projektekben?

П {Dnévn (σ {db>=5} (Γ {Dnév} {Dnév, count(*) db }(Dolgozó >< {Dolgozo.dkod = Resztvesz.dkod} Résztvesz)))

A relációk ugyanazok, de a mezőnevek megváltoztak!

2.32. ábra - Relációs modell

Relációs modell

2.1.11.11. Adja meg a könyvelés dolgozóinak nevét, alapbérét!

П Dolgozó.Név, Alapbér (σ Osztály.Név=’könyvelés’ (Dolgozó >< {Oszt=Osztály.Kód} Osztály))

2.1.11.12. A pénztárosok mely projektekben vettek részt 2010 májusában?

Megoldás az alap join felhasználásával:

П {Projekt.Név} (σ {Dátum=’2010.05.01’ AND Beosztás=’pénztáros’ AND Dolgozó.Kód=Résztvesz.Dolg AND Résztvesz.Proj=Projekt.Kód} (Dolgozó x Résztvesz x Projekt ))

Megoldás szelekciós joinnal:

П {Projekt.Név} (σ {Dátum=’2010.05.01’  AND Beosztás=’pénztáros’} ((Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz >< {Résztvesz.Proj=Projekt.Kód} Projekt ))

2.1.11.13. Mennyi volt a fizetése Kiss Dezsőnek 2010 májusában?

П {Dolgozo.Alappber}( σ{Dolgozó.Név=’Kiss Dezső’} Dolgozo) + Γ {}{sum(Tbér)} ({σ Dátum=’2010.05.01’ AND Dolgozó.Név=’Kiss Dezső’ } ((Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) >< {Résztvesz.Proj=Projekt.Kód} Projekt ))

2.1.11.14. Az egyes osztályokon hány miskolci dolgozó van?

Γ{Osztály.Név} {Osztály.név, count(*)}(σ {Város=’Miskolc’} (Dolgozó >< {Oszt=Osztály.Kód} Osztály))

2.1.11.15. Az egyes projekteken dolgozóknak mennyi az átlagéletkora?

Γ{Projekt.Név} {Projekt.név, avg(Kor)}((Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) >< {Résztvesz.Proj=Projekt.Kód} Projekt ))

2.1.11.16. Van olyan projekt, amelynek neve megegyezik egy osztály nevével?

П {Osztály.Név} (σ {Osztály.Név=Projekt.Név} (((Osztály >< {Osztály.Kód=Oszt} Dolgozó) >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) >< {Résztvesz.Proj=Projekt.Kód} Projekt ))

2.1.11.17. Ki (név és osztály) és mikor vett részt fásítás projekten?

П {Osztály.Név, Dolgozó.Név, Dátum} ( σ {Projekt.Név=’fásítás’} (((Osztály >< {Osztály.Kód=Oszt Dolgozó}) >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) >< {Résztvesz.Proj=Projekt.Kód} Projekt ))

2.1.11.18. A projekteken részt vettek közül kinek a legmagasabb az alapbére?

П {Dolgozó.Név, Alapbér} ( σ {Alapbér= Γ {}{max(Alapbér)} (Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) Dolgozo )

2.1.11.19. Ki hány projekten vett már részt?

Γ{Dolgozó.Név} {DolgozóNév, count(*)}(Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz)

2.1.11.20. Adja meg annak a dolgozónak a nevét, aki 2010 májusában az alapbére felénél több jövedelmet szerzett projektekből!

П {Dolgozó.Név} ( σ {Dátum=’2010.05.01’ AND Alapbér/2< Γ {}{sum(Tbér)} (σ {D.kód=Dolg} (Résztvesz) >< {Résztvesz.Proj=Projekt.Kód} Projekt ) Dolgozó D)