Proiect baze de date
-
Upload
serban-var -
Category
Documents
-
view
131 -
download
3
Embed Size (px)
description
Transcript of 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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