Академический Документы
Профессиональный Документы
Культура Документы
PROIECT
BAZE DE DATE
ORACLE
ENUNT:
S se creeze o baz de date care s in evidena unei firme care nchiriaz maini. Firma are pe stoc un numr de maini ce au un numr de nmatriculare, nr. de km parcuri, data fabricaiei, o marc, tip i pre pe or. Fiecare marc are nume i detalii. Fiecare tip are nume i detalii. Fiecare main se afl ntr-o clas (compact, limuzin etc.). Fiecare clas are nume i descriere. Exist o list de clieni care au nume prenume, email, telefon, adres. Se pstrez o istorie a nchirierilor (ce client a nchiriat ce main, de cnd i pn cnd). Pentru fiecare main se va pstra statusul su actual (nchiriat, nenchiriat).
OBIECTIVUL:
Implementarea unei baze de date in ORACLE
CERINTE:
1. S se realizeze modelul entitate-legtur 2. S se fac trecerea la modelul relaional (s se detalieze operaiile effectuate pentru fiecare entitate n parte) 3. S se creeze o baz de date care s conin: a. Legturi ntre tabele; b. Integritatea referenial pentru a efectua corect operaiile de actualizare (adugare, tergere, modificare); c. Chei primare i chei externe; d. Reguli de tergere i modificare n cascad pentru entitile cu chei externe. 4. S se verifice calitatea proiectrii bazei de date cu ajutorul formelor normale (se va normaliza baza de date pn la FNBC - inclusiv). 5. S se indexeze baza de date creat (crearea minim a unui index). 6. S se fac testarea bazei de date prin efectuarea de diferite operaii asupra ei. Trebuie s existe cel puin o interogare din fiecare tip (n total minim 15 interogri), 2 funcii diferite (care s nu fac un simplu select), 2 proceduri stocate, i 1 trigger.
Pentru realizarea proiectului s-au creat 10 tabele: PERSOANA MASINA INCHIRIERI MANAGEMENT COMPANIE MARCA TIP CLASA STATUS ADRESA
Fiecare dintre aceste tabele contine informatiile cerute (cerinte proiect) si campuri suplimentare adaugate pentru a se realiza legaturile dintre tabele.
Tabelul PERSOANA: ID nume prenume email telefon NUMBER varchar varchar varchar varchar
Campul ID este cheia primara a tabelului, reprezentand un numarul unic asociat fiecarei persoane din baza de date. In campul nume se retine numele persoanei (ex: Popescu). In campul prenume se retine prenumle persoanei (ex: Mihai). In campul email se retine adresa de email a persoanei (ex: mihai@email.com) In campul telefon se va retine un numar de telefon al persoanei.
Tabelul MASINA: NR_INMATRICULARE id_tip id_marca id_clasa nr_km data_fabr id_comp pret_ora
Cheaia primara a acestui tabel este nr_inmatriculare, camp ce reprezinta numarul de inmatriculare al unei masini (numar ce este unic). id_tip este o cheie exterioara ce indica catre o cheie primara a tabelul TIP, reprezentand tipul masinii (ex: Logan). id_marca este o cheie exterioara ce indica catre o cheie primara a tabelul MARCA, reprezentand marca masinii (ex: Dacia). id_clasa este o cheie exterioara ce indica catre o cheie primara a tabelul CLASA, reprezentand clasa masinii (ex: limuzina). id_comp este o cheie exterioara ce indica catre o cheie primara a tabelul COMPANIE, reprezentand compania de care apartine masina (ex: Company1). Campul nr_km specifica numarul de km ai unei masini. Campul data_fabr specifica data de fabricatie a unei masini (ex: 12-05-2002); Capul pret_ora specifica pretul practicat de companie pe ora de inchiriere a masinii respective.
ID_COMPANIE este cheia primara a acestui tabel. Acest numar reprezinta codul unci al fiecarei companii. Campul nume reprezinta numele companiei. Campul profil indica profilul companiei (ex: auto). Tabelul ADRESA: ADDRESS_ID country city street no
ADDRESS_ID este cheia primara a acestui tabel, reprezentand un cod unic prin care este identificata fiecare adresa din tabel. Campul country reprezinta tara. Campul city reprezinta orasul. Campul street reprezinta strada. Campul no reprezinta numarul strazii.
ID este cheia primara a acestui tabel, reprezentand un numar unic prin care este identificata fiecare clasa. Campul nume indica numele clasei (ex: limuzina). Campul descriere contine o descriere a unei clase.
ID este cheia primara a acestui tabel, reprezentand un numar unic prin care este identificata fiecare marca.
5
Campul nume indica numele marcii de autoturisme (ex: OPEL). Campul detalii contine cateva detalii despre marca respectiva. Tabelul TIP: ID nume detalii
ID este cheia primara a acestui tabel, reprezentand un numar unic prin care este identificata fiecare tip de masina. Campul nume indica numele autoturismului (ex: Logan). Campul detalii contine cateva detalii despre tipul respectiv.
number varchar(40)
nr_inmatr este cheia primara a acestui tabel. Se face referinta la tabelul de masini. Campul status ofera detalii despre statusul unei masini (ex: inchiriata).
number number
address_id face legatura cu tabelul address. person_id face legatura cu tabelul persoana. Ambele chei alcatuiesc cheia primara a tabelului.
Tabelul INCHIRIERI: ID_CLIENT NR_INMATRICULARE data_inceput data_sfarsit number varchar(80) date date
Campul ID_CLIENT reprezinta o cheie externa ce face legatura cu tabelul Persoana. Face parte din cheia primara a acestui tabel. Campul nr_inmatriculare reprezinta o cheie externa ce face legatura cu tabelul masina. Face parte din cheia primara a acestui tabel. Campurile data_inceput si data_sfarsit contin data de inceput a inchirierii, respectiv data la care masina va fi predata (sfarsitul perioadei de inchiriere).
comp_id reprezinta o cheie externa care face legatura cu tabelul companie. person_id reprezinta o cheie externa ce face legatura cu tabelul persoana. Ambele campuri alcatuiesc cheia primara.
Nr_inmatriculare
aparti ne
CLASA
ID
detalii
Nr_km
est e
MARCA
ID
detali i
inchiria za
est e
TIP
ID
NUME
PRENU ME TELEF ON
ID
NUME
EMAIL PERSOANA
condu ce
COMPANIE
PROFIL ID
ar e
MANAGEMENT ADRESA PK ADDRESS_ID COUNTRY CITY STREET NO PK MARCA ID NUME DETALII PK,FK2 PK,FK1 COMP_ID CLIENT_ID PK
FK3 FK4
Legaturile sunt:
Intre persoana si adresa exista o legatura mai multi la mai mai multi.
O persoana poate avea mai multe adrese si mai multe persoane pot avea aceeasi adresa. Aceasta legatura este reprezentata in modelul relational prin tabelul evidenta_adresa. Intre masina si model exista o legatura una la una. Fiecare masina este reprezentata de un singur model. Acelasi tip de legatura exsita si intre masina si tip si intre masina si clasa. Intre companie si persoana exista o legatura mai multi la mai multi. O persona poate fi director la mai multe firme si o firma poate avea mai multi directori. Aceasta legatura este reprezentata in modelul relational prin tabelul management. Intre masina si persoana exista o legatura mai multi la mai multi. Fiecare masina poate fi inchiriata de mai multe persoane si o persoana poate inchiria mai multe masini. Aceasta legatura este reprezentata in modelul relational de tabelul inchirieri.
Modelul relational: PERSOANA(ID, nume, prenume, mail, telefon) MASINA(nr_inmatriculare, id_tip, id_marca, nr_km, data_fabr, id_comp, pret_ora, id_clasa) ADDRESS(address_id, country, city, street, no) MANAGEMENT(comp_id, person_id) INCHIRIERI(id_client, nr_inmatriculare, data_inceput, data_sfarsit) STATUS(nr_inmatr, status) MARCA(id, nume, detalii) TIP(id, nume, detalii) CLASA(id, nume, descriere) COMPANIE(id_companie, nume, profil) EVIDENTA_ADRESA(address_id, person_id)
Normalizarea relatiilor Tabelele prezentate mai sus sunt deja normalizate si nu mai prezinta anomalii deoarece: - relatiile respecta FN1 deoarece toate atributele au valori atomice(nu exitsta atribute compuse sau multivaloare); - relatiiile respecta FN2 deoarece contin un singur atribut ca si cheie primara si deci nu au cum sa existe dependente functionale partiale; - relatiile respecta FN3 deoarece nu exista dependente functionale tranzitive;
10