Sunteți pe pagina 1din 18

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

PROIECT
la disciplina
Introducere in Baze de Date

Rent a car
Muresan Cristian Marius
si
Iuonas Ovidiu Claudiu
An academic: 2014 2015

PROIECT de SEMESTRU
Catedra de Calculatoare
Disciplina : Introducere in Baze de Date
Coordonator: s.l. ing. Cosmina IVAN
Data 13.01.2015

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Cuprins
1. Introducere
Introducere, argumente, scop si obiective specifice
2. Analiza cerintelor utilizatorilor ( Specificatiile de proiect)

Ipoteze specifice domeniului ales pentru proiect ( cerinte,


constrangeri )

Organizare structurata( tabelar) a cerintelor utilizator

Determinarea si caracterizarea de profiluri de utilizatori


( admin, user intern, user externdiversi alti actori)
3. Modelul de date si descrierea acestuia

Entitati si atributele lor ( descriere detaliata implementarea


fizica)

Diagrama EER/UML pentru modelul de date complet

Normalizarea datelor
4. Detalii de implementare

Descrierea functionala a modulelor ( organizarea logica a


acestora- de ex . structura claselor Java, cod HTML, JSP, ASP,
PhP)

Manual de utilizare/instalare (diferentiat pe tipuri de actori)

Elemente de securizare a aplicatiei


5. Concluzii limitari si dezvoltari ulterioare

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

1. Introducere
Acest document are in vedere prezentarea in ansamblu a proiectului `Rent a
car`, realizat in cadrul cursului de Introducere in Baze de Date, semestrul I, an
universitar 2014-2015. In acest document sunt descrisi pasii urmati in realizarea
proiectului, o descriere a versiunii finale a proiectului si o urmatoare etapa la care
poate fi dus acest proiect.

2. Analiza cerintelor utilizatorilor ( Specificatiile de proiect)


Ipoteze specifice domeniului ales pentru proiect ( cerinte, constrangeri )
O mare importanta o are aplicatia web, iar aceasta trebuie construita astfel ca
utilizatorul sa o poata utiliza cu mare usurita. Design-ul site-ului este foarte
important fiindca ajuta utilizatorul sa navigheze cat mai usor, obtinand astfel
informatiile necesare.
Organizare structurata (tabelar) a ceritelor utilizator
Informatiile din baza de date se pastreaza in mai multe tabele, iar in cazul
aplicatiei `Rent a car` avem nevoie de tabele pentru rezervare, clienti, agentiile de
la care se pot face rezervarile si pentru masinile care se pot inchiria.

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

3. Modelul de date si descrierea acestuia


Pentru ca informatiile puse la dispozitie de aplicatia `Rent a car` sa fie
structurate cat mai clar, in baza de date exista 9 tabele :

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Tabela principala este Booking care are cheia primara ID si care contine
data inceperii inchirierii, si data returnarii produsului. Tot aici se gasesc cheile
straine care fac legatura cu tabela Cars si cu tabea Agency. Mai este si tabea
Extra_stuff in care sunt niste produse suplimentare ale inchrierii.
Tabela Customer stocheaza datele clientului si care are o cheie straina in
tabela Customer_address, tabela in care se stocheaza adresa clientului.
Tabela Car retine informatii despre masina precum numarul de
inmatriculare, anul fabricatiei, culoarea si contine cheie straina din tabela
Car_type care retine tipul masinii inchiriate.
Fiecare masina poate fii disponibila la o sucursala a unei agentii. Astfel in
tabela Car se gaseste o cheie straina din tabela Branch. Tabela Branch contine
numele sucursalei, iar in tabela Branch_address este stocata adresa sucursalei.
Interogari (Queries) utilizate pe baza de date:
#1. Producatorii de masini
SELECT PRODUCER
FROM car_type
ORDER BY PRODUCER ASC;
#2. Numele si producatorul masinilor fabricate dupa anul 2008 ordonate dupa
nume
SELECT NAME as 'Nume',PRODUCER as 'Producator'
FROM car_type,car
where DATE_OF_MANUFACTURING>'2008' and
car_type.ID = car.CAR_TYPE_ID
Order by NAME;
#3. Numele si producatorul masinilor al caror pret zilnic este mai mic decat 150
Select PRODUCER as 'Producator',NAME as 'Nume'
from car_type,car
where car.BASE_PRICE_PER_DAY<'150' and
car.CAR_TYPE_ID= car_type.ID;
#4. Numele si producatorul masinilor albastre
Select PRODUCER as 'Producator',NAME as 'Nume'
from car_type,car
1

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

where car.COLOR='Blue' and


car.CAR_TYPE_ID= car_type.ID;
#5. Numele si producatorul masinilor inchiriate pentru minim 15 zile
Select PRODUCER as 'Producator',NAME as 'Nume'
from booking,car,car_type
where car.ID = booking.CAR_ID and
car.ID = car_type.ID and
datediff(booking.RETURN_DATE, booking.BOOKING_DATE) >= '15';
#6. Strazile sucursalelor Budget din Bucuresti
SELECT STREET_NAME
FROM branch_address,branch,agency
WHERE agency.NAME='Budget' and
agency.ID = branch.AGENCY_ID and
branch.BRANCH_ADDRESS_ID = branch_address.ID and
branch_address.CITY_NAME='Bucuresti';
#7. Numerele de telefon de la sucursalele din Ploiesti
SELECT branch_address.PHONE_NUMBER AS 'Numar de telefon - Ploiesti'
FROM branch_address
WHERE CITY_NAME='Ploiesti';
#8. Email-ul clientilor din Alba Iulia SI NUMELE LOR
SELECT EMAIL as 'Adresa de e-mail'
FROM customer,customer_address
WHERE customer.ID = customer_address.CUSTOMER_ID AND
customer_address.CITY = 'Alba Iulia';
#9. Clientii care au peste 21 de ani
SELECT First_name,Surname ,DATE_OF_BIRTH
FROM CUSTOMER;
#10. Numele agentiilor si numerele de telefon
SELECT NAME as 'Nume', PHONE_NUMBER as 'Numar de telefon'
FROM AGENCY
2

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

ORDER BY NAME ASC;


#11. Media preturilor de inchiriere pe zile
SELECT AVG(BASE_PRICE_PER_DAY) as 'Pretul mediu de inchiriere'
FROM CAR;
#12. Lista clientilor, fiecare cu ce masina a inchiriat
SELECT FIRST_NAME as 'Prenume', SURNAME as 'Nume', PRODUCER as
'Producator', NAME as 'Model'
FROM CAR, CAR_TYPE, BOOKING, CUSTOMER
WHERE BOOKING.CUSTOMER_ID = CUSTOMER.ID
AND car_type.id = car.car_type_id
AND car.id = booking.car_id
ORDER BY SURNAME ASC;
#13. Lista sucursalelor cu masinile disponibile
SELECT BRANCH.NAME, CAR_TYPE.PRODUCER, CAR_TYPE.NAME
FROM BRANCH, CAR, CAR_TYPE
WHERE BRANCH.ID = CAR.BRANCH_ID AND CAR_TYPE.ID =
CAR.CAR_TYPE_ID;

#14. Masinile si tipul lor


SELECT PRODUCER,NAME, CAR_TYPE.TYPE
FROM CAR_TYPE
INNER JOIN CAR
ON CAR_TYPE.ID = CAR.CAR_TYPE_ID;
#15. Clientii cu adresa si data lor de nastere
SELECT FIRST_NAME, SURNAME, DATE_OF_BIRTH,CITY,STREET
FROM CUSTOMER JOIN CUSTOMER_ADDRESS
ON (CUSTOMER.ID=CUSTOMER_ADDRESS.CUSTOMER_ID)
ORDER BY DATE_OF_BIRTH ASC;
3

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Vederi (Views) utilizate pe baza de date:


#1. Masini inchiriate
DROP VIEW IF EXISTS Numerele_Masinilor_inchiriate;
CREATE VIEW Numerele_Masinilor_inchiriate AS
Select distinct Registration_Number from Car
Where Id in (Select Car_id from Booking)
Group by Registration_Number;

#2. Clientii care au facut rezervari


DROP VIEW IF EXISTS Clienti_rezervari;
CREATE VIEW Clienti_rezervari AS
Select distinct First_name , Surname from Customer
Where customer.id in (Select booking.customer_id from booking)
Order by Surname asc;

Normalizarea datelor
Pentru ca datele sa poata fi relationate si utilizate corect este necesara
normalizarea bazei de date. Acest lucru presupune incadrarea in formele de
normalizare de mai jos:
1. Prima forma de normalizare (1NF)
Intr-o baza de date relationala, entitatile diferite trebuie stocate in tabele
diferite. Este recomandabil ca pentru fiecare entitate sa se creeze un tabel
separat. Foarte adesea aceasta forma de normalizare este prezentata intr-un alt
mod. In aceasta formulare se spune ca valoarea unui atribut al unei entitati
(modelat, in mod normal, in baza de date printr-o coloana) nu poate lua valori
multiple (ceea ce ar insemna utilizarea mai multor coloane de acelasi fel).
4

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

2. A doua forma de normalizare (2NF)


O tabela este in a doua forma de normalizare daca si numai daca se
gaseste in prima forma de normalizare si, in plus, orice inregistrare dintr-o
tabela poate fi identificata in mod unic printr-o cheie primara si fiecare atribut
(valoare dintr-o coloana) depinde in mod direct de intreaga cheie primara.Pentru
a asigura dependenya fata de intreaga cheie primara, este necesar ca in tabelele
care au cheie compusa, fiecare atribut sa depinda de toate coloanele care
compun cheia primara. Daca un tabel are cheie unica el intra automat in a doua
forma de normalizare.
3. A treia forma de normalizare(3NF)
O tabela este in a treia forma de normalizare daca si numai daca se
gaseste in a doua forma de normalizare si, in plus, campurile care nu sunt chei
primare sunt independente unul de altul, in sensul ca nici un camp sa nu fie
obtinut prin aplicarea unei functii asupra valorii altor campuri (campurile care
nu sunt chei primare sunt independente intre ele si depind numai de cheia
primara). Incalcarea acestei forme poate fi detectata analizand care campuri
trebuie actualizate atunci cand se actualizeaza un alt camp.
In afara de aceste trei forme de normalizare, in literatura de specialitate
mai sunt descrise si altele. In general insa, acestea trei sunt acoperitoare si se
accepta ca o baza de date este normalizata daca se gaseste in a treia forma de
normalizare.

4. Detalii de implementare
Pentru realizarea site-ului am folosit mai multe limbaje de programare.
Site-ul a fost realizat folosind : PHP, SQL, CSS si JavaScript. Pentru crearea
tabelelor si popularea lor am scris cod SQL in MySQL Workbench si
phpMyAdmin folosind ca server XAMPP. Customizarea template-ului a fost
realizata folosind CSS. Mai jos sunt prezentate cateva detalii despre fiecare in
parte:
5

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

MySQL Workbench este un instrument grafic pentru a lucra cu


serverele si bazele de date MySQL. Acesta este prevazut sa lucreze cu
versiunile de MySQL Server 5.1 si mai sus si tinde sa fie un instrument ce
acopera cele mai importante activitati de gestionare a bazelor de date.
XAMPP este un pachet de programe free software, open source si crossplatform web server, care consta in Apache HTTP Server, MySQL database si
interpretoare pentru scripturile scrise in limbajele de programare PHP si Perl.
SQL (Structured Query Language - Limbaj Structurat de Interogare) este
un limbaj de programare specific pentru manipularea datelor in sistemele de
manipulare a bazelor de date relationale (RDBMS), iar la origine este un limbaj
bazat pe algebra relationala. Acesta are ca scop inserarea datelor, interogatii,
actualizare si stergere, modificarea si crearea schemelor, precum si controlul
accesului la date. A devenit un standard in domeniu (standardizat ANSI-ISO),
fiind cel mai popular limbaj utilizat pentru creearea, modificarea, regasirea si
manipularea datelor de catre SGBD-urile (Sistemele de Gestiune a Bazelor de
Date) relationale. Pe langa versiunile standardizate ale limbajului, exista o
multime de dialecte si variante, unele proprietare, fiind specifice anumitor
SGBD-uri si de asemenea continand extensii pentru a suporta SBD-urile
(Sistemele de Baze de Date) obiectuale (obiectual-relationale).
HTML(HyperText Markup Language ) este un limbaj de marcare utilizat
pentru crearea paginilor web ce pot fi afisate intr-unbrowser (sau navigator).
Scopul HTML este mai degraba prezentarea informatiilor paragrafe, fonturi,
tabele s.a.m.d. decat descrierea semanticii documentului.

CSS (Cascading Style Sheets) este un limbaj (style language) care


defineste "layout-ul" pentru documentele HTML. CSS acopera culori, font-uri,
margini (borders), linii, inaltime, latime, imagini de fundal, pozitii avansate si
multe alte optiuni. CSS foloseste stiluri, acestea inglobeaza, sub un anumit
nume, atribute de formatare care se aplica asupra unui element individual din
pagina, asupra unui grup de elemente sau la nivelul intregului document.

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

JavaScript este un limbaj de programare orientat obiect bazat pe


conceptul prototipurilor. Este folosit mai ales pentru introducerea unor
functionalitati in paginile web, codul Javascript din aceste pagini fiind rulat de
catre browser. Limbajul este binecunoscut pentru folosirea sa in construirea
siturilor web, dar este folosit si pentru acesul la obiecte incastrate (embedded
objects) in alte aplicatii. In ciuda numelui si a unor similaritati in sintaxa, intre
JavaScript si limbajul Java nu exista nicio legatura.

PHP (Hypertext Preprocessor) este un limbaj de programare folosit initial


pentru a produce pagini web dinamice. Astazi este folosit pe scara larga in
dezvoltarea paginilor si aplicatiilor web. Se foloseste in principal inglobat in
codul HTML, dar incepand de la versiunea 4.3.0 se poate folosi si in mod linie
de comanda (CLI), permitand crearea de aplicatii independente.

Paginile .php ale aplicatiei `Rent a cat sunt urmatoarele: Agency,


Booking,
BookingRaspuns,
BookingRaspuns2,
Cars,
Customers,
CustomersRaspuns, CustomerRaspuns2, index si Query. Pagina principala este
pagina index. Pe pagina Query sunt exemplificate niste Interogari utilizate pe
baza de date, pe pagina Cars sunt prezentate masinile care pot fi inchiriate
impreuna cu niste date descriptive, iar pe pagina Agency gasim agentiile de la
care putem inchiria, impreuna cu datele de contact. Pe pagina Booking putem
insera sau sterge o comanda, daca inserarea a reusit se va sari la pagina
BookingRaspuns, iar daca stergerea a reusit se va sari la pagina
BookingRaspuns2. Din pagina Customers se va face inserarea unui nou client si
inserarea adresei clientului introdus. Daca inserarea clientului a reusit se va sari
pe pagina CustomersRaspuns, iar daca inserarea adresei a reusit se va sari pe
pagina CustomersRaspuns2.

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Exemplu de cod PHP:

Proceduri utilizate pe baza de date:


1.Inserare client
DELIMITER //
DROP PROCEDURE IF EXISTS INSERT_NEW_CLIENT//
CREATE PROCEDURE `INSERT_NEW_CUSTOMER`(IN `ID`
INT(11) UNSIGNED, IN `LOGIN_NAME` VARCHAR(45), IN `EMAIL`
VARCHAR(45), IN `FIRST_NAME` VARCHAR(45), IN `SURNAME`
VARCHAR(45), IN `DATE_OF_BIRTH` DATE, IN `PASSWORD`
VARCHAR(45), IN `COMPANY_NAME` VARCHAR(45))
BEGIN
8

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

INSERT INTO CUSTOMER


(LOGIN_NAME,EMAIL,FIRST_NAME,SURNAME,DATE_OF_BIRTH,PAS
SWORD,COMPANY_NAME) VALUES
(LOGIN_NAME,EMAIL,FIRST_NAME,SURNAME,DATE_OF_BIRTH,PAS
SWORD,COMPANY_NAME);
END//
DELIMITER;

2.Inserare adresa client


DELIMITER //
DROP PROCEDURE IF EXISTS INSERT_CUSTOMER_ADDRESS//
CREATE PROCEDURE `INSERT_CUSTOMER_ADDRESS`(IN `ID`
INT(11) UNSIGNED, IN `STREET` VARCHAR(45), IN `CITY`
VARCHAR(45), IN `STREET_NUMBER` VARCHAR(45), IN `ZIP_CODE`
VARCHAR(10), IN `COUNTRY` VARCHAR(45), IN `PHONE_NUMBER`
VARCHAR(45), IN `CUSTOMER_ID` INT(11) UNSIGNED)
BEGIN
INSERT INTO CUSTOMER_ADDRESS
(STREET,CITY,STREET_NUMBER,ZIP_CODE,COUNTRY,PHONE_
NUMBER,CUSTOMER_ID)
VALUES
(STREET,CITY,STREET_NUMBER,ZIP_CODE,COUNTRY,PHONE_
NUMBER,CUSTOMER_ID);
END//
DELIMITER;

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

3.Inserare rezervare
DELIMITER //
DROP PROCEDURE IF EXISTS INSERT_BOOKING//
CREATE PROCEDURE `INSERT_BOOKING`(IN
`BOOKING_NUMBER` INT(11) UNSIGNED, IN `BOOKING_DATE`
DATE, IN `RETURN_DATE` DATE, IN `CAR_ID` INT(11), IN
`AGENCY_ID` INT(11), IN `CUSTOMER_ID` INT(11))
BEGIN
INSERT INTO
BOOKING(BOOKING_DATE,RETURN_DATE,CAR_ID,AGENCY_ID,CUS
TOMER_ID) VALUES
(BOOKING_DATE,RETURN_DATE,CAR_ID,AGENCY_ID,CUSTOMER_I
D);
END//
DELIMITER;

4.Stergere rezervare

DELIMITER //
DROP PROCEDURE IF EXISTS DELETE_BOOKING//
CREATE PROCEDURE `DELETE_BOOKING`(NUMBER INT(11))
BEGIN
DELETE FROM BOOKING WHERE
BOOKING_NUMBER=NUMBER;
END// DELIMITER;
10

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Aceasta este pagina Home a website-ului:

Pe aceasta pagina se pot vizualiza masinile care se pot inchiria impreuna


cu datele descriptive:

11

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Pe aceasta pagina se poate adauga sau sterge o rezervare:

Pe aceasta pagina se poate inregistra un nou client:

12

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

Aici se pot vizualiza datele de contact al agentiilor si al sucursalelor


acestora:

Aplicatia Rent a car este securizata folosind urmatoarele elemente:


1. Unul dintre triggere este folosit pentru a nu putea adauga in tabelul
Car_type decat dupa ce sa facut o adaugare in tabelul Car;
2. Al doilea trigger este folosit pentru a nu putea adauga o rezervare care
contine aceeasi data de rezervare si de returnare pentru aceeasi masina;
3. Cel de-al treilea trigger nu permite adaugarea unui nou client care are
aceeasi adresa de email;
4. Cheile primare nu permit utilizatorului introducerea unui nou element al
carui id este deja in baza de date.

13

FACULTATEA DE AUTOMATICA SI CALCULATOARE


CATEDRA CALCULATOARE

5. Concluzii, limitari si dezvoltari ulterioare


Dezvoltarea ulterioara poate aparea atat in partea bazei de date prin
introducerea unor noi tabele sau campuri, cat si in partea de interfata.
In partea de interfata se poate realiza un Log in cu username si parola sau
un Log in pentru un administrator care poate modifica orice informatie in baza
de date.
Se pot realiza mai multe proceduri pentru introducerea, stergerea sau
modifiarea datelor din baza de date.
Se poate trece intr-un mediu online pentru a vedea principiul de
functionare.

14