proiect baze de date - inchirieri auto

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

Upload: murean-cristian

Post on 26-Dec-2015

288 views

Category:

Documents


21 download

DESCRIPTION

Structura unei baze de date ce reprezinta o companie de inchirieri auto.

TRANSCRIPT

Page 1: Proiect Baze de Date  - Inchirieri auto

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

Page 2: Proiect Baze de Date  - Inchirieri auto

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 extern…diversi 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

Page 3: Proiect Baze de Date  - Inchirieri auto

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.

Page 4: Proiect Baze de Date  - Inchirieri auto

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 :

Page 5: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

1

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

Page 6: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

2

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

Page 7: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

3

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;

Page 8: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

4

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

Page 9: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

5

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:

Page 10: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

6

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 cross-

platform 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.

Page 11: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

7

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.

Page 12: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

8

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

Page 13: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

9

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;

Page 14: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

10

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;

Page 15: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

11

Aceasta este pagina Home a website-ului:

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

cu datele descriptive:

Page 16: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

12

Pe aceasta pagina se poate adauga sau sterge o rezervare:

Pe aceasta pagina se poate inregistra un nou client:

Page 17: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

13

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.

Page 18: Proiect Baze de Date  - Inchirieri auto

FACULTATEA DE AUTOMATICA SI CALCULATOARE

CATEDRA CALCULATOARE

14

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.