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.
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.
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.
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 ]
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 ]
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 ]
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)
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
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
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
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)
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)
}
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)
}
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)
Adott a következő relációs modell, a feladatokat ezen kell megoldani.
П {Dnév, Alapbér} (σ {Onév=’könyvelés’} (Dolgozó >< {Dolgozo,okod = Osztaly.okod} Osztály))
Γ {}{count(*) }(Osztály) – Azt írja ki, hány darab rekord van az Osztály relációban.
Γ {}{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.
П {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 ))
П {Dnév} (σ {Tbér= Γ {}{max(Tbér)} (Projekt) }((Dolgozó >< {Dolgozo.dkod = Resztvesz.dkod} Résztvesz) >< {Projekt,pkod = Resztvesz.pkod} Projekt ))
П {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.+
Γ {}{sum(Tbér)}( σ {Pnév=’fásítás’} (Résztvesz >< {Projekt,pkod = Resztvesz.pkod} Projekt ))
Γ{Pnév} {Pnév, count(*)}(σ {Dátum=’2010.05.01’} (Résztvesz >< {Projekt,pkod = Resztvesz.pkod} Projekt ))
П {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!
П Dolgozó.Név, Alapbér (σ Osztály.Név=’könyvelés’ (Dolgozó >< {Oszt=Osztály.Kód} Osztály))
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 ))
П {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 ))
Γ{Osztály.Név} {Osztály.név, count(*)}(σ {Város=’Miskolc’} (Dolgozó >< {Oszt=Osztály.Kód} Osztály))
Γ{Projekt.Név} {Projekt.név, avg(Kor)}((Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) >< {Résztvesz.Proj=Projekt.Kód} Projekt ))
П {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 ))
П {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 ))
П {Dolgozó.Név, Alapbér} ( σ {Alapbér= Γ {}{max(Alapbér)} (Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz) Dolgozo )
Γ{Dolgozó.Név} {DolgozóNév, count(*)}(Dolgozó >< {Dolgozó.Kód=Résztvesz.Dolg} Résztvesz)