Anda di halaman 1dari 18

PROIECT BAZE DE DATE

Gestionarea unui portavion

DESCRIERE
Baza de date prezentata prin acest proiect, furnizeaza informatii legate de aeronavele, echipajul, armamentul si misiunile in care participa un portavion.

ENTITATILE BAZEI DE DATE


ECHIPAJ (entitate independenta), reprezinta orice membru al echipajului portavionului, cheia primara este cod_echipaj 1

PILOT (sub entitate), membru al echipajului care piloteaza aeronave, cheia primara este cod_echipaj MECANIC (sub entitate), membru al echipajului care repara aeronave, cheia primara este cod_echipaj AERONAVA (entitate independenta), reprezinta orice aeronava care se gaseste pe portavion , cheia primara este cod_aeronava AVION (sub entiate) reprezinta aeronavele care sunt avioane, cheia primara este cod_aeronava VANATOARE (sub sub entiate) reprezinta avioanele de vanatoare din cadrul avioanelor de pe portavion, cheia primara este cod_aeronava TRANSPORT (sub sub entiate) reprevinta avioanele de transport din cadrul avioanelor de pe portavion, cheia primara este cod_aeronava ELICOPTER (sub entiate),reprezinta elicopterele din cadrul aeronavelor de pe portavion, cheia primara este cod_aeronava ARMAMENT (entitate dependenta), reprezinta armamentul care poate fi folosit de un avion de vanatoare, cheia primara este cod_armament MISIUNE (entiate independenta), reprezinta orice misiune la care participa aeronavele de pe portavion, cheia primara este cod_misiune

RELATIILE BAZEI DE DATE


PILOTEAZA leaga entitaile PILOT si AERONAVA. O aeronava poate fi pilotata de mai multi piloti dar un pilot poate pilota o singura aeronava. De asemenea un pilot nu trebuie sa piloteze neaparat o aeronava, si nici o aeronava nu trebuie sa aiaba neaparata pilot. Cardinalitatea Maxima este m:1 iar cea minima este 0:0 REPARA leaga entiatile MECANIC si AERONAVA. O aeronava poate fi reparata de mai multi mecanici iar mai multi mecanici pot repara o aeronava. De asemenea o aeronava trebuie reparata de cel putin un mechanic dar un mechanic nu e obligat sa repare o aeronava. Cardinalitatea maxima e m:m iar cea minima este 0:1 FOLOSESTE leaga entitatile VANATOARE si ARMAMENT . Un avion poate avea mai multe tipuri de armament iar un tip de armament poate corespunde mai multor avioane. De asemenea un avion de vanatoare trebuie sa aiba cel putin un tip de armament iar un tip de armament trebuie sa ii corespunda cel putin unui avion. Cardinalitatea maxima este m:m iar cea minima este 1:1 PARTICIPA leaga entiateile AERONAVA si MISIUNE. Intr-o misiune pot participa mai multe aeronave iar o aeronava poate participa la mai multe misiuni. De asemenea la o misiune trebuie sa participe cel putin o aeronava, dar o aeronava nu e obligata sa participe la o misiune. Cardinalitatea maxima este m:m iar ce mainima 1:0.

ATRIBUTELE ENTITATILOR
ECHIPAJ cod_echipaj# - caracter(10) codul care identifica un membru al echipajului nume - caracter(20) numele mebrului echipajului prenume - caracter(40) prenumele mebrului echipajului grad - caracter(20) gradul militar al mebrului echipajului functie - caracter(30) functia indeplinita la bordul portavionului PILOT cod_echipaj# - caracter(10) codul care identifica un membru al echipajului ore_de_zbor intreg (4) numarul de ore de zbor corespunzatoare pilotului 2

cod_aeronava# - caracter(10) codul care identifica o aeronava de la bordul portavionului MECANIC cod_exhipaj# - caracter(10) codul care identifica un membru al echipajului specializare - caracter(30) specializarea mecanicului AERONAVA cod_aeronava# - caracter(10) codul care identifica o aeronava de la bordul portavionului denumire - caracter(30) denumirea aeronavei tip - caracter(10) tipul aeronavei (avion, elicopter, etc) greutate - intreg(4) greutatea aeronavei exprimata in tone autonomie - intreg(4) timpul de zbor in cazul unui consum mediu exprimat in ore an_fabricatie - intreg(4) anul fabricatiei AVION cod_aeronava# - caracter(10) codul care identifica o aeronava de la bordul portavionului scop - caracter(10) scopul in care aeronava este folosita (vanatoare,transport,etc) viteza maxima intreg(4) viteza maxima exprimata in km/h VANATOARE cod_aeronava# - caracter(10) codul care identifica o aeronava de la bordul portavionului raza_de_actiune TRANSPORT cod_aeronava# - caracter(10) codul care identifica o aeronava de la bordul portavionului numar_locuri intreg(4) numarul de locuri disponibile pentru transport ELICOPTER cod_aeronava# - caracter(10) codul care identifica o aeronava de la bordul portavionului rol caracter (20) rolul pe care il indeplineste elicopterul numar_locuri intreg(4) numarul de locuri disponibile pentru transport ARMAMENT cod_armament# - caracter(10) codul care identifica un tip de armament de la bordul portavionului adenumire caracter(30) denumirea tipului de arma agreutate intreg(4) greutatea exprimata in kg ascop caracter(20) - scopul in care aceasta arma este utilizata (aer-sol,aer-aer,aer-apa)

MISIUNE cod_misiune# - caracter(10) codul care identifica misiunile pe care trbuie sa le indeplineasca avioanele de la bordul portavionului denumirem caracter(20) - denumirea misiunii data_inceput data calendaristica data calendaristica la care incepe misiunea data_sfarsit - data calendaristica data calendaristica la care se incehie misiunea

DIAGRAMA ENTITATE/RELATIE

ECHIPAJ cod echipaj nume prenume grad functie

AERONAVA cod aeronava denumire tip AVION scop

ISA

PILOT ore zbor

piloteaza M(0) 1(0)


ISA

ISA

VANATOARE raza de actiune

M(1)

ISA

MECANIC specializare

repara M(0) M(1)

ISA

TRANSPORT numar locuri

viteza maxima

ELICOPTER
ISA

MISIUNE cod misiune denumirem data inceput data sfarsit participa M(1) M(0)

rol numar locuri

greutate autonomie an fabricatie ARMAMENT cod armament adenumire agreutate ascop foloseste M(1)

SCHEME RELATIONALE
ECHIPAJ(cod_echipaj#,nume,prenume,grad,functie) PILOT(cod_echipaj#,ore_de_zbor,cod_aeronava) MECANIC(cod_exhipaj#,specializare) REPARA(cod_echipaj#,cod_aeronava#) AERONAVA(cod_aeronava#,denumire,tip,greutate,autonomie,an_fabricatie) AVION(cod_aeronava#,scop,viteza maxima) VANATOARE(cod_aeronava#,raza_de_actiune) 4

TRANSPORT(cod_aeronava#,numar_locuri) ELICOPTER(cod_aeronava#,rol,numar_locuri) ARMAMENT(cod_armament#,adenumire,agreutate,ascop) FOLOSESTE(cod_aeronava#,cod_armament#) MISIUNE(cod_misiune#,denumirem,data_inceput,data_sfarsit) PARTICIPA(cod_aeronava#,cod_misiune#)


ECHIPAJ cod echipaj nume prenume grad

DIAGRAMA CONCEPTUALA
AERONAVA cod aeronava denumire tip AVION scop PILOT ore zbor piloteaza VANATOARE raza de actiune

functie

MECANIC specializare

TRANSPORT numar locuri viteza maxima

REPARA cod echipaj cod aeronava

ELICOPTER rol numar locuri

MISIUNE cod misiune denumirem data inceput data sfarsit

PARTICIPA cod misiune cod aeronava

ARMAMENT greutate autonomie cod armament an fabricatie adenumire agreutate ascop FOLOSESTE cod aeronava cod armamaent

TABELE

AERONAVA cod_aeronava# A1 A2 A3 A4

denumire F/A 18 F 35 Sea Harrier AH-64

tip avion avion avion elicpoter

greutate 20 15 10 8

autonomie 12 35 8 5

an fabricatie 1978 2003 1992 1987 5

A5 AVION cod_aeronava # A1 A2 A3 A5 VANATOARE cod_aeronava# A1 A2 A3 TRANSPORT cod_aeronava# A5 ELICOPTER cod_aeronava# A4 ECHIPAJ cod_echipaj# E1 E2 E3 E4 E5 E6 PILOT cod_echipaj# E1 E2 E5

A 101 scop vanatoare vanatoare vanatoare transport

avion viteza maxima 1500 1600 900 800

50

20

1975

raza_de_actiune 5000 8000 12000 numar_locuri 150 rol atac nume Brown Parry Irwin Cook Berry Muffin ore_de_zbor 1200 800 2000 numar_locuri 150 prenume John James Steve David Ian Eric grad locotenent sergent sergent civil locotenent civil cod_aeronava A1 A2 A4 functia pilot pilot navigator mecanic pilot mecanic

MECANIC cod_echipaj# E4 E6

specializare reparatii motor reparatii tren aterizare data_inceput data_sfarsit 10.02.2006 15.05.2008 21.12.2005 13.01.2006 6

MISIUNE cod_misiune# denumirem M1 Furtuna in desert 2 M2 Exercitiu NATO

M3 M4 ARMAMENT cod_armament# BB1 BB2 BB3 FOLOSESTE cod_aeronava # A1 A2 A2 A3 A4 PARTICIPA cod aeronava# M1 M3 M2 M1 M4 M2 M4 M1 REPARA cod_echipaj# E4 E4 E4 E6 E6 E6 E6 E6 E4 E4

Recunoastere spatiu aerian Chinez Recuperare trupe Somalia adenumire GBU-15 SideWinder Maverick cod_armamaent# BB3 BB1 BB3 BB2 BB2 cod_aeronava# A1 A2 A2 A3 A3 A4 A4 A5 cod_aeronava# A1 A2 A3 A4 A5 A1 A2 A3 A4 A5 agreutate 500 10 14

22.12.2005 22.12.2005 ascop aer-sol aer-aer aer-sol

04.01.2006 08.01.2006

OPERATORI
1) PROJECT obtine o lista cu denumirea, tipul, greutatea, si anul de fabricatie al aeronavelor. AERONAVA cod_aeronava# denumire tip greutate autonomie an fabricatie 7

A1 A2 A3 A4 A5

F/A 18 F 35 Sea Harrier AH-64 A 101

avion avion avion elicpoter avion

20 15 10 8 50

12 35 8 5 20

1978 2003 1992 1987 1975

Proiectie in algebra relationala: Rezultat = PROJECT(AERONAVA,denumirea,tip,greutate,an_fabricatie) Proiectie in SQL(cu dubluri): SELECT denumirea,tip,greutate,an_fabricatie FROM aeronava; Proiectie in SQL(fara dubluri): SELECT DISTINCT denumirea,tip,greutate,an_fabricatie FROM aeronava; Rezultatul: denumire F/A 18 F 35 Sea Harrier AH-64 tip avion avion avion elicopter greutate 20 15 10 8 an fabricatie 1978 2003 1992 1987

2) SELECT obtine o lista cu armamentul care are o greutate mai mica de 400 de kilograme ARMAMENT cod_armament# BB1 BB2 BB3 adenumire GBU-15 SideWinder Maverick agreutate 500 10 14 ascop aer-sol aer-aer aer-sol

Selectie in algebra relationala: Rezultat =SELECT(ARMAMENT,agreutate<400) Selectie in SQL SELECT * FROM armament WHERE agreutate<400; Rezultatul: cod_armament# adenumire BB2 SideWinder BB3 Maverick agreutate 10 14 ascop aer-aer aer-sol

3) UNION obtine lista echipamemntelor de lupta (avioane si armament) de pe portavion AERONAVA cod_aeronava# A1 A2 A3 adenumire F/A 18 F 35 Sea Harrier tip avion avion avion greutate 20 15 10 autonomie 12 35 8 an fabricatie 1978 2003 1992 8

A4 A5

AH-64 A 101 ARMAMENT cod_armament# BB1 BB2 BB3

elicpoter avion adenumire GBU-15 SideWinder Maverick

8 50 agreutate 500 10 14

5 20 ascop aer-sol aer-aer aer-sol

1987 1975

Reuniune in algebra relationala: R=PROJECT(AERONAVA,denumire); S=PROJECT(ARMAMENT,adenumire); Rezultat=UNION(R,S) Reuniune in SQL: SELECT denumire FROM aeronava UNION SELECT adenumire FROM armamaent; Rezultat: denumire F/A 18 F 35 Sea Harrier AH-64 GBU-15 SideWinder Maverick 4) DIFFERENCE obtine o lista cu membrii echipajului care au gradul de sergent dar nu sunt piloti ECHIPAJ cod_echipaj# E1 E2 E3 E4 E5 nume Brown Parry Irwin Cook Berry prenume John James Dan David Ian grad locotenent sergent sergent civil locotenent functia pilot pilot navigator mecanic pilot

Diferenta in algebra relationala: R=PROJECT(SELECT(ECHIPAJ, grad=sergent),cod_echipaj,nume,prenume,grad,funtia); S=PROJECT(SELECT(ECHIPAJ, funtia=pilot),cod_echipaj,nume,prenume,grad,funtia); Rezultat = DIFFERENCE(R, S) Diferenta in SQL: SELECT * FROM echipaj WHERE grad=sergent MINUS 9

SELECT * FROM echipaj WHERE functia=pilot Rezultat: cod_echipaj# E3 nume Irwin prenume Dan grad sergent functia navigator

5) INTERSECT obtine o lista cu codurile sergentilor care sunt piloti si au mai mult de 1500 de ore de zbor ECHIPAJ cod_echipaj# E1 E2 E3 E4 E5 nume Brown Parry Irwin Cook Berry prenume John James Dan David Ian ore_de_zbor 1200 800 2000 grad locotenent sergent sergent civil locotenent cod_aeronava A1 A2 A4 functia pilot pilot navigator mecanic pilot

PILOT cod_echipaj# E1 E2 E5

Intersectie in algebra relationala: R=PROJECT(SELECT(ECHIPAJ,grad=sergent),cod_echipaj); S=PROJECT(SELECT(PILOT,ore_de_zbor>1500),cod_echipaj); Rezultat= INTERSECT(R,S) Intersectie in SQL: SELECT cod_echipaj FROM echipaj WHERE grad=sergent INTERSECT SELECT cod_echipaj FROM pilot WHERE ore_de_zbor>1500; Rezultat: cod_echipaj# E5

6) PRODUCT obtine o lista cu toate posibilitatile de participare la misiuni a aeronavelor de pe portavion AERONAVA cod_aeronava# denumire A1 F/A 18 tip avion greutate 20 autonomie 12 an fabricatie 1978 10

A2 A3 A4 A5

F 35 Sea Harrier AH-64 A 101 MISIUNE cod_misiune# M1 M2 M3 M4

avion avion elicpoter avion

15 10 8 50

35 8 5 20

2003 1992 1987 1975

denumirem Furtuna in desert 2 Exercitiu NATO Recunoastere spatiu aerian Chinez Recuperare trupe Somalia

data_inceput 10.02.2006 21.12.2005 22.12.2005 22.12.2005

data_sfarsit 15.05.2008 13.01.2006 04.01.2006 08.01.2006

Produs cartezian in algebra relationala: R=PROJECT(AERONAVA,cod_aeronava,denumire,tip); S=PROJECT(MISIUNE,cod_misiune,denumirem); Rezultat=PRODUCT(R,S) Produs cartezian in SQL: SELECT cod_aeronava,denumire,tip,cod_misiune,denumirem FROM aeronava,misiune; Rezultat: cod_aeronava A1 A1 A1 A1 A2 A2 A2 A2 A3 A3 A3 A3 A4 A4 A4 A4 A5 A5 A5 A5 denumire F/A 18 F/A 18 F/A 18 F/A 18 F 35 F 35 F 35 F 35 Sea Harrier Sea Harrier Sea Harrier Sea Harrier AH-64 AH-64 AH-64 AH-64 A 101 A 101 A 101 A 101 tip avion avion avion avion avion avion avion avion avion avion avion avion elicpoter elicpoter elicpoter elicpoter avion avion avion avion cod_misiune M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4 M1 M2 M3 M4 denumirem Furtuna in desert 2 Exercitiu NATO Recunoastere spatiu aerian Chinez Recuperare trupe Somalia Furtuna in desert 2 Exercitiu NATO Recunoastere spatiu aerian Chinez Recuperare trupe Somalia Furtuna in desert 2 Exercitiu NATO Recunoastere spatiu aerian Chinez Recuperare trupe Somalia Furtuna in desert 2 Exercitiu NATO Recunoastere spatiu aerian Chinez Recuperare trupe Somalia Furtuna in desert 2 Exercitiu NATO Recunoastere spatiu aerian Chinez Recuperare trupe Somalia

7) DIVISION obtine codul pilotilor care zboara pe avioane fabricate dupa 1990 AERONAVA cod_aeronava# denumire A1 F/A 18 A2 F 35 tip avion avion greutate 20 15 autonomie 12 35 an fabricatie 1978 2003 11

A3 A4 A5

Sea Harrier AH-64 A 101 PILOT cod_echipaj E1 E2 E5

avion elicpoter avion ore_de_zbor 1200 800 2000

10 8 50

8 5 20 cod_aeronava A1 A2 A4

1992 1987 1975

Diviziune in algebra relationala: R= PROJECT(PILOT,cod_echipaj,cod_aeronava); S= PROJECT(SELECT(AERONAVA,an_fabricatie>1990),cod_aeronava); Rezultat=DIVISION(R,S) Diviziune in SQL: SELECT UNIQUE cod_ehipaj FROM pilot pp WHERE NOT EXISTS (SELECT * FROM aeronava aa WHERE aeronava.an_fabricatie>1990 AND NOT EXISTS (SELECT * FROM pilot ppp WHERE aa.cod_aeronava=ppp.cod_aeronava AND pp.cod_echipaj=ppp.cod_echipaj)); Rezultat: cod_echipaj# E2 8) NATURAL JOIN obtine informatia completa despre piloti (nume, prenume, grad, ore de zbor, cod aeronava) ECHIPAJ cod_echipaj# E1 E2 E3 E4 E5 nume Brown Parry Irwin Cook Berry prenume John James Dan David Ian ore_de_zbor 1200 800 2000 grad locotenent sergent sergent civil locotenent cod_aeronava A1 A2 A4 functia pilot pilot navigator mecanic pilot

PILOT cod_echipaj# E1 E2 E5

Compunere naturala in algebra relationala: R=JOIN(ECHIPAJ,PILOT) Rezultat=PROJECT(R,nume,prenume,grad,ore_de_zbor,cod_aeronava) Compunere naturala in SQL: SELECT nume,prenume,grad,ore_de_zbor,cod_aeronava FROM echipaj a,pilot b WHERE a.cod_echipaj=b.cod_echipaj; Rezultat: 12

nume Brown Parry Berry

prenume John James Ian

grad locotenent sergent locotenent

ore_de_zbor 1200 800 2000

cod_aeronava A1 A2 A4

9) -JOIN obtine informatia despre aeronave si armamentul acestora cu conditia ca greutatea aeronavei sa fie de mai mare decat cea a armamentului inmultita cu 45 AERONAVA cod_aeronava# A1 A2 A3 A4 A5 denumire F/A 18 F 35 Sea Harrier AH-64 A 101 tip avion avion avion elicpoter avion denumire GBU-15 SideWinder Maverick greutate 20 15 10 8 50 agreutate 500 10 14 cod_armamaent# BB3 BB1 BB3 BB2 BB2 autonomie 12 35 8 5 20 ascop aer-sol aer-aer aer-sol an fabricatie 1978 2003 1992 1987 1975

ARMAMENT cod_armament# BB1 BB2 BB3

FOLOSESTE cod_aeronava # A1 A2 A2 A3 A4

Compunere in algebra relationala: R1=JOIN(ARMAMENT,FOLOSESTE); Rezultat=JOIN(R1,AERONAVA,AERONAVA.greutate*1000>ARMAMENT.agretuate*45) Compunere in SQL: SELECT * FROM (SELECT * FROM armamaent a,foloseste b WHERE a.cod_armament=b.cod_armament) c,aeronava d WHERE c.greutate*45<d.greutate * 1000 AND c.cod_aeronava=d_cod_aeronava;

Rezultat: cod_ae denumi ronava re A1 F/A 18 tip avion greu tate 20 autono mie 12 an fabricat ie 1978 cod_ar mame nt BB3 denumire Maverick greutat e 14 ascop aer-sol 13

A2 A3 A4

F 35 Sea Harrier AH-64

avion avion elicpoter

15 10 8

35 8 5

2003 1992 1987

BB1 BB2 BB2

GBU-15 SideWinder SideWinder

500 10 10

aer-sol aer-aer aer-aer

10) SEMI-JOIN obtine informatia despre pilotul care zboara intr-o aeronava F/A 18 AERONAVA cod_aeronava# A1 A2 A3 A4 A5 denumire F/A 18 F 35 Sea Harrier AH-64 A 101 tip avion avion avion elicpoter avion ore_de_zbor 1200 800 2000 greutate 20 15 10 8 50 autonomie 12 35 8 5 20 cod_aeronava A1 A2 A4 an_fabricatie 1978 2003 1992 1987 1975

PILOT cod_echipaj# E1 E2 E5

Semi compunere in algebra relationala: R1=SELECT(AERONAVA,denumire=F/A 18); R2=JOIN(R1,PILOT); Rezultat=PROJECT(R2,cod_echipaj,ore_de_zbor,cod_aeronava) Semi compunere in SQL: SELECT cod_echipaj,ore_de_zbor,cod_aeronava FROM aeronava a,pilot p WHERE a.denumire=F/A 18 AND a.cod_aeronava=p.cod_aeronava; Rezultat: cod_echipaj E1 ore_de_zbor 1200 cod_aeronava A1

11) OUTER JOIN obtine o lista cu denumirea aeronavelor si viteza maxima (acolo unde este cazul) AERONAVA cod_aeronava# A1 A2 A3 A4 A5 denumire F/A 18 F 35 Sea Harrier AH-64 A 101 tip avion avion avion elicpoter avion scop vanatoare vanatoare vanatoare greutate 20 15 10 8 50 autonomie 12 35 8 5 20 an_fabricatie 1978 2003 1992 1987 1975

AVION cod_aeronava # A1 A2 A3

viteza_maxima 1500 1600 900 14

A5

transport

800

Semi compunere in algebra relationala: R1=OUTERJOIN(AERONAVA,AVION); Rezultat=PROJECT(R1,denumire,viteza_maxima) Semi compunere in SQL: SELECT denumire,viteza_maxima FROM aeronava a,avion b WHERE a.cod_aeronava=b.cod_aeronava(+); Rezultat: denumire F/A 18 F 35 Sea Harrier AH-64 A 101 viteza_maxima 1500 1600 900 NULL 800

CERERI
1) Sa se gaseasca denumirea misiunii la care participa un avion de vanatoare mai nou de anul 1987, cu un pilot cu mai mult de 1000 de ore de experienta care are gradul de sergent. De asemenea avionul foloseste ca armament bombe de tipul GBU 15 cu greutatea de 400 kg. Forma algebra relationala R1=SELECT(AERONAVA,an_fabricatie>1987); R2=JOIN(R1,VANATOARE); R3=PROJECT(R2,cod_aeronava); R4=SELECT(PILOT,ore_de_zbor>1000); R5=SELECT(ECHIPAJ,grad=sergent); R6=JOIN(R4,45); R7=PROJECT(R6,cod_aeronava); R8=INTERSECT(R3,R7); R9=SELECT(ARMAMENT,adenumire=GBU 15 AND agreutate=400); R10=JOIN(R9,FOLOSESTE); R11=PROJECT(R10,cod_aeronava); R12=INTERSECT(R8,R11); R13=JOIN(PARTICIPA,R12); R14=PROJECT(R13,cod_misiune); R15=JOIN(MISIUNE,R13); Rezultat=PROJECT(R15,denumirem)

2) Sa se gaseasca numele mecanicului civil care repara un elicopter de recunoastere care participa la misiunea Furtuna in desert 2. Forma grafica

15

Rezultat

nume,prenume

ECHIPAJ

REPARA T

cod_aerona va

cod_aerona va

PARTICIPA T

ELICOPTER

3) Sa se afiseze numele avioanelor mai noi de 1990 care pot transporta 50 de persoane si participa la misiunea Recuperare de trupe Somalia. Forma matematica

denumire(numar_locuri=50 (TRANSPORT) an_fabricatie>1990(AERONAVA)) (PARTICIPA( denumirem=Recuperare de trupe Somalia (MISIUNE)))

FORME NORMALE
16

scop=recun oastere

cod_misiu ne

MISIUNE

denumire= Furtuna in desert 2

Graful dependentelor functionale:

ore_zbor cod_echipaj functie cod_aeronava specializare

greutate autonomie an fabricatie

nume prenume grad scop

raza de actiune

numar de locuri cod_aeronava tip viteza maxima

rol numar locuri denumire data_inceput data sfarsit cod_misiune

cod_armament

denumire data_inceput data sfarsit

Anomalii: AERONAVA cod_aeronava A1 A2 A3 A5 denumire F/A 18 F 35 F/A 18 A 101 tip avion avion avion avion greutate 20 15 20 50 autonomie 12 35 12 20 an fabricatie 1978 2003 1979 1975

Pornim de la constrangerea ca toate aeronavele care poarta aceeasi denumire au aceeeasi greutate si aceeasi autonomie. Redundanta logica: cuplul (F/A 18,avion20,12) apare de doua ori. Anomalie la insertie: pentru a adauga un nou avion F/A 18 este nevoie de definirea unei noi chei primare. Anomalie la stergere: daca se sterge inregistrarea cu cod_aeronava A2 atunci se pierde informatia ca avionul F 35 are o autonomie de 15 ore. Anomalie la modificare: modificarea autonomiei pentru un avion F/A 18, va duce la necesitatea modificarii autonomiei pentru toate celelalte intregistrari care contin avioane F/A 18 (in caz contrar se va incalca constrangerea). Problema reconexiunii: Fie schemele relationale: R1=PROJECT(AERONAVA,cod_aeronava,denumire,tip,greutate) R2=PROJECT(AERONAVA,denumire,autonomie,an_fabricatie) 17

AERONAVA1=JOIN(R1,R2) Se observa ca schema AERONAVA1 este diferita de schema aeronava ( apar tupluri noi, cum ar fi: A3, F/A 18, avion, 20, 12, 1978) Forme Normale FORMA NORMALA (FN1) Fie tabelul: cod_aeronava# A1 A2 A3 cod_ pilot# P1,P2,P3 P4 P5,P6,P7

Modelul atomic va fi : cod_client# cod_pilot# A1 P1 A1 P2 A1 P3 A2 P4 A3 P5 A3 P6 A3 P7 FORMA NORMALA 2 (FN2): Fie tabelul: cod_echipaj# E1 E2 E5 E5 ore_de_zbor 1200 800 2000 2000 grad soldat sergent capitan locotenent cod_aeronava# A1 A2 A4 A3

pentru a ajunge la FN2 se va transforma in: R1: cod_echipaj# E1 E2 E5 R2: cod_echipaj# E1 E2 E5 E5 ore_de_zbor 1200 800 2000 grad soldat sergent capitan locotenent cod_aeronava# A1 A2 A4 A3

18