Proiect baze de date

24
PROIECT BAZE DE DATE Gestionarea unui portavion DESCRIERE 1

description

Proiect baze de date Universitate din Bucuresti

Transcript of Proiect baze de date

Page 1: Proiect baze de date

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

Page 2: Proiect baze de date

PILOT (sub entitate), membru al echipajului care piloteaza aeronave, cheia primara este cod_echipajMECANIC (sub entitate), membru al echipajului care repara aeronave, cheia primara este cod_echipajAERONAVA (entitate independenta), reprezinta orice aeronava care se gaseste pe portavion , cheia primara este cod_aeronavaAVION (sub entiate) reprezinta aeronavele care sunt avioane, cheia primara este cod_aeronavaVANATOARE (sub sub entiate) reprezinta avioanele de vanatoare din cadrul avioanelor de pe portavion, cheia primara este cod_aeronavaTRANSPORT (sub sub entiate) reprevinta avioanele de transport din cadrul avioanelor de pe portavion, cheia primara este cod_aeronavaELICOPTER (sub entiate),reprezinta elicopterele din cadrul aeronavelor de pe portavion, cheia primara este cod_aeronavaARMAMENT (entitate dependenta), reprezinta armamentul care poate fi folosit de un avion de vanatoare, cheia primara este cod_armamentMISIUNE (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:0REPARA 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:1FOLOSESTE 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:1PARTICIPA 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

ECHIPAJcod_echipaj# - caracter(10) – codul care identifica un membru al echipajuluinume - caracter(20) – numele mebrului echipajuluiprenume - caracter(40) – prenumele mebrului echipajuluigrad - caracter(20) – gradul militar al mebrului echipajuluifunctie - caracter(30) – functia indeplinita la bordul portavionului

PILOTcod_echipaj# - caracter(10) – codul care identifica un membru al echipajuluiore_de_zbor – intreg (4) – numarul de ore de zbor corespunzatoare pilotului

2

Page 3: Proiect baze de date

cod_aeronava# - caracter(10) – codul care identifica o aeronava de la bordul portavionului

MECANICcod_exhipaj# - caracter(10) – codul care identifica un membru al echipajuluispecializare - caracter(30) – specializarea mecanicului

AERONAVAcod_aeronava# - caracter(10) – codul care identifica o aeronava de la bordul portavionuluidenumire - caracter(30) – denumirea aeronaveitip - caracter(10) – tipul aeronavei (avion, elicopter, etc)greutate - intreg(4) – greutatea aeronavei exprimata in toneautonomie - intreg(4) – timpul de zbor in cazul unui consum mediu exprimat in orean_fabricatie - intreg(4) – anul fabricatiei

AVIONcod_aeronava# - caracter(10) – codul care identifica o aeronava de la bordul portavionuluiscop - caracter(10) – scopul in care aeronava este folosita (vanatoare,transport,etc)viteza maxima –intreg(4) – viteza maxima exprimata in km/h

VANATOAREcod_aeronava# - caracter(10) – codul care identifica o aeronava de la bordul portavionuluiraza_de_actiune

TRANSPORTcod_aeronava# - caracter(10) – codul care identifica o aeronava de la bordul portavionuluinumar_locuri – intreg(4) – numarul de locuri disponibile pentru transport

ELICOPTERcod_aeronava# - caracter(10) – codul care identifica o aeronava de la bordul portavionuluirol – caracter (20) – rolul pe care il indeplineste elicopterulnumar_locuri – intreg(4) – numarul de locuri disponibile pentru transport

ARMAMENTcod_armament# - caracter(10) – codul care identifica un tip de armament de la bordul portavionuluiadenumire –caracter(30) – denumirea tipului de armaagreutate – intreg(4) – greutatea exprimata in kgascop – caracter(20) - scopul in care aceasta arma este utilizata (aer-sol,aer-aer,aer-apa)

MISIUNEcod_misiune# - caracter(10) – codul care identifica misiunile pe care trbuie sa le

indeplineasca avioanele de la bordul portavionuluidenumirem – caracter(20) - denumirea misiuniidata_inceput – data calendaristica – data calendaristica la care incepe misiuneadata_sfarsit - data calendaristica – data calendaristica la care se incehie misiunea

DIAGRAMA ENTITATE/RELATIE

3

Page 4: Proiect baze de date

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)

ECHIPAJcod echipajnumeprenumegrad functie PILOT

ore zbor

MECANICspecializare

ISA

ISA

ARMAMENT cod armamentadenumireagreutateascop

AERONAVAcod aeronavadenumire tip

greutateautonomiean fabricatie

ISA

ISA

ELICOPTER

rolnumar locuri

AVION scop

viteza maxima

VANATOAREraza de actiune

TRANSPORTnumar locuri

ISA

ISA

piloteaza

M(0) 1(0)

repara

M(0) M(1)

MISIUNEcod misiunedenumiremdata inceputdata sfarsit

M(1)

M(1)

foloseste

M(1) M(0)

participa

4

Page 5: Proiect baze de date

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#)

DIAGRAMA CONCEPTUALA

TABELE

AERONAVAcod_aeronava# denumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992

ECHIPAJcod echipajnumeprenumegrad functie PILOT

ore zbor

MECANICspecializare

ARMAMENT cod armamentadenumireagreutateascop

AERONAVAcod aeronavadenumire tip

greutateautonomiean fabricatie

ELICOPTER

rolnumar locuri

AVION scop

viteza maxima

VANATOAREraza de actiune

TRANSPORTnumar locuri

piloteaza

MISIUNEcod misiunedenumiremdata inceputdata sfarsit

PARTICIPAcod misiunecod aeronava

REPARAcod echipajcod aeronava

FOLOSESTEcod aeronavacod armamaent

5

Page 6: Proiect baze de date

A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 1975

AVIONcod_aeronava# scop viteza maximaA1 vanatoare 1500A2 vanatoare 1600A3 vanatoare 900A5 transport 800

VANATOAREcod_aeronava# raza_de_actiuneA1 5000A2 8000A3 12000

TRANSPORTcod_aeronava# numar_locuriA5 150

ELICOPTERcod_aeronava# rol numar_locuriA4 atac 150

ECHIPAJcod_echipaj# nume prenume grad functiaE1 Brown John locotenent pilotE2 Parry James sergent pilotE3 Irwin Steve sergent navigatorE4 Cook David civil mecanicE5 Berry Ian locotenent pilotE6 Muffin Eric civil mecanic

PILOTcod_echipaj# ore_de_zbor cod_aeronavaE1 1200 A1E2 800 A2E5 2000 A4

MECANICcod_echipaj# specializareE4 reparatii motorE6 reparatii tren aterizare

MISIUNEcod_misiune# denumirem data_inceput data_sfarsitM1 Furtuna in desert 2 10.02.2006 15.05.2008M2 Exercitiu NATO 21.12.2005 13.01.2006

6

Page 7: Proiect baze de date

M3 Recunoastere spatiu aerian Chinez 22.12.2005 04.01.2006M4 Recuperare trupe Somalia 22.12.2005 08.01.2006

ARMAMENTcod_armament# adenumire agreutate ascopBB1 GBU-15 500 aer-solBB2 SideWinder 10 aer-aerBB3 Maverick 14 aer-sol

FOLOSESTEcod_aeronava# cod_armamaent#A1 BB3A2 BB1A2 BB3A3 BB2A4 BB2

PARTICIPAcod aeronava# cod_aeronava#M1 A1M3 A2M2 A2M1 A3M4 A3M2 A4M4 A4M1 A5

REPARAcod_echipaj# cod_aeronava#E4 A1E4 A2E4 A3E6 A4E6 A5E6 A1E6 A2E6 A3E4 A4E4 A5

OPERATORI

1) PROJECT – obtine o lista cu denumirea, tipul, greutatea, si anul de fabricatie al aeronavelor.

AERONAVAcod_aeronava# denumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978

7

Page 8: Proiect baze de date

A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 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 tip greutate an fabricatieF/A 18 avion 20 1978F 35 avion 15 2003Sea Harrier avion 10 1992AH-64 elicopter 8 1987

2) SELECT – obtine o lista cu armamentul care are o greutate mai mica de 400 de kilograme

ARMAMENTcod_armament# adenumire agreutate ascopBB1 GBU-15 500 aer-solBB2 SideWinder 10 aer-aerBB3 Maverick 14 aer-sol

Selectie in algebra relationala: Rezultat =SELECT(ARMAMENT,agreutate<400)Selectie in SQL

SELECT * FROM armament WHERE agreutate<400;

Rezultatul:

cod_armament# adenumire agreutate ascopBB2 SideWinder 10 aer-aerBB3 Maverick 14 aer-sol

3) UNION – obtine lista echipamemntelor de lupta (avioane si armament) de pe portavion

AERONAVAcod_aeronava# adenumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992A4 AH-64 elicpoter 8 5 1987

8

Page 9: Proiect baze de date

A5 A 101 avion 50 20 1975

ARMAMENTcod_armament# adenumire agreutate ascopBB1 GBU-15 500 aer-solBB2 SideWinder 10 aer-aerBB3 Maverick 14 aer-sol

Reuniune in algebra relationala:R=PROJECT(AERONAVA,denumire);S=PROJECT(ARMAMENT,adenumire);Rezultat=UNION(R,S)

Reuniune in SQL:SELECT denumire FROM aeronava UNIONSELECT adenumire FROM armamaent;

Rezultat:

denumireF/A 18F 35Sea HarrierAH-64GBU-15SideWinderMaverick

4) DIFFERENCE – obtine o lista cu membrii echipajului care au gradul de sergent dar nu sunt piloti

ECHIPAJcod_echipaj# nume prenume grad functiaE1 Brown John locotenent pilotE2 Parry James sergent pilotE3 Irwin Dan sergent navigatorE4 Cook David civil mecanicE5 Berry Ian locotenent 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’ MINUSSELECT * FROM echipaj WHERE functia=’pilot’

9

Page 10: Proiect baze de date

Rezultat:

cod_echipaj# nume prenume grad functiaE3 Irwin Dan sergent navigator

5) INTERSECT – obtine o lista cu codurile sergentilor care sunt piloti si au mai mult de 1500 de ore de zbor

ECHIPAJcod_echipaj# nume prenume grad functiaE1 Brown John locotenent pilotE2 Parry James sergent pilotE3 Irwin Dan sergent navigatorE4 Cook David civil mecanicE5 Berry Ian locotenent pilot

PILOTcod_echipaj# ore_de_zbor cod_aeronavaE1 1200 A1E2 800 A2E5 2000 A4

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’ INTERSECTSELECT 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

AERONAVAcod_aeronava# denumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003

10

Page 11: Proiect baze de date

A3 Sea Harrier avion 10 8 1992A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 1975

MISIUNEcod_misiune# denumirem data_inceput data_sfarsitM1 Furtuna in desert 2 10.02.2006 15.05.2008M2 Exercitiu NATO 21.12.2005 13.01.2006M3 Recunoastere spatiu aerian Chinez 22.12.2005 04.01.2006M4 Recuperare trupe Somalia 22.12.2005 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 denumire tip cod_misiune denumiremA1 F/A 18 avion M1 Furtuna in desert 2A1 F/A 18 avion M2 Exercitiu NATOA1 F/A 18 avion M3 Recunoastere spatiu aerian ChinezA1 F/A 18 avion M4 Recuperare trupe SomaliaA2 F 35 avion M1 Furtuna in desert 2A2 F 35 avion M2 Exercitiu NATOA2 F 35 avion M3 Recunoastere spatiu aerian ChinezA2 F 35 avion M4 Recuperare trupe SomaliaA3 Sea Harrier avion M1 Furtuna in desert 2A3 Sea Harrier avion M2 Exercitiu NATOA3 Sea Harrier avion M3 Recunoastere spatiu aerian ChinezA3 Sea Harrier avion M4 Recuperare trupe SomaliaA4 AH-64 elicpoter M1 Furtuna in desert 2A4 AH-64 elicpoter M2 Exercitiu NATOA4 AH-64 elicpoter M3 Recunoastere spatiu aerian ChinezA4 AH-64 elicpoter M4 Recuperare trupe SomaliaA5 A 101 avion M1 Furtuna in desert 2A5 A 101 avion M2 Exercitiu NATOA5 A 101 avion M3 Recunoastere spatiu aerian ChinezA5 A 101 avion M4 Recuperare trupe Somalia

7) DIVISION – obtine codul pilotilor care zboara pe avioane fabricate dupa 1990

AERONAVAcod_aeronava# denumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992

11

Page 12: Proiect baze de date

A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 1975

PILOTcod_echipaj ore_de_zbor cod_aeronavaE1 1200 A1E2 800 A2E5 2000 A4

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)

ECHIPAJcod_echipaj# nume prenume grad functiaE1 Brown John locotenent pilotE2 Parry James sergent pilotE3 Irwin Dan sergent navigatorE4 Cook David civil mecanicE5 Berry Ian locotenent pilot

PILOTcod_echipaj# ore_de_zbor cod_aeronavaE1 1200 A1E2 800 A2E5 2000 A4

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

Page 13: Proiect baze de date

nume prenume grad ore_de_zbor cod_aeronavaBrown John locotenent 1200 A1Parry James sergent 800 A2Berry Ian locotenent 2000 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

AERONAVAcod_aeronava# denumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 1975

ARMAMENTcod_armament# denumire agreutate ascopBB1 GBU-15 500 aer-solBB2 SideWinder 10 aer-aerBB3 Maverick 14 aer-sol

FOLOSESTEcod_aeronava# cod_armamaent#A1 BB3A2 BB1A2 BB3A3 BB2A4 BB2

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_aeronava

denumire

tip greutate

autonomie

an fabricatie

cod_armament

denumire greutate

ascop

A1 F/A 18 avion 20 12 1978 BB3 Maverick 14 aer-solA2 F 35 avion 15 35 2003 BB1 GBU-15 500 aer-solA3 Sea avion 10 8 1992 BB2 SideWinder 10 aer-aer

13

Page 14: Proiect baze de date

HarrierA4 AH-64 elicpoter 8 5 1987 BB2 SideWinder 10 aer-aer

10) SEMI-JOIN – obtine informatia despre pilotul care zboara intr-o aeronava F/A 18

AERONAVAcod_aeronava# denumire tip greutate autonomie an_fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 1975

PILOTcod_echipaj# ore_de_zbor cod_aeronavaE1 1200 A1E2 800 A2E5 2000 A4

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 ore_de_zbor cod_aeronavaE1 1200 A1

11) OUTER JOIN – obtine o lista cu denumirea aeronavelor si viteza maxima (acolo unde este cazul)

AERONAVAcod_aeronava# denumire tip greutate autonomie an_fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 Sea Harrier avion 10 8 1992A4 AH-64 elicpoter 8 5 1987A5 A 101 avion 50 20 1975

AVIONcod_aeronava# scop viteza_maximaA1 vanatoare 1500A2 vanatoare 1600A3 vanatoare 900A5 transport 800

Semi compunere in algebra relationala:

14

Page 15: Proiect baze de date

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 viteza_maximaF/A 18 1500F 35 1600Sea Harrier 900AH-64 NULLA 101 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

Page 16: Proiect baze de date

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

nume,prenume

REPARAT

denumire=‘Furtuna in desert 2’

MISIUNE

cod_misiune

PARTICIPATscop=’recun

oastere’

ELICOPTER

cod_aeronava

cod_aeronava

ECHIPAJ

Rezultat

16

Page 17: Proiect baze de date

Graful dependentelor functionale:

Anomalii:

AERONAVAcod_aeronava denumire tip greutate autonomie an fabricatieA1 F/A 18 avion 20 12 1978A2 F 35 avion 15 35 2003A3 F/A 18 avion 20 12 1979A5 A 101 avion 50 20 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)AERONAVA1=JOIN(R1,R2)

cod_echipaj functie

ore_zbor

specializare

numeprenumegrad

cod_aeronava tip

scop

rolnumar locuri

raza de actiune

numar de locuri

viteza maxima

denumiredata_inceputdata sfarsit

cod_misiune

cod_aeronava

greutateautonomiean fabricatie

denumiredata_inceputdata sfarsit

cod_armament

17

Page 18: Proiect baze de date

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# cod_ pilot#

A1 P1,P2,P3A2 P4A3 P5,P6,P7

Modelul atomic va fi :cod_client# cod_pilot#

A1 P1A1 P2A1 P3A2 P4A3 P5A3 P6A3 P7

FORMA NORMALA 2 (FN2):

Fie tabelul:cod_echipaj# ore_de_zbor grad cod_aeronava#E1 1200 soldat A1E2 800 sergent A2E5 2000 capitan A4E5 2000 locotenent A3

pentru a ajunge la FN2 se va transforma in:

R1:cod_echipaj# ore_de_zborE1 1200E2 800E5 2000

R2:cod_echipaj# grad cod_aeronava#E1 soldat A1E2 sergent A2E5 capitan A4E5 locotenent A3

18