Extras din proiect
1. Descrierea temei
O pensiune își propune să monitorizeze activitățile proprii, mai exact se dorește gestionarea datelor de contact ale clienților, înregistrarea fiecărui serviciu preferat de aceștia și datele angajaților care intră în contact cu oaspeții pensiunii. Prin intermediul bazei de date se urmărește stocarea următoarelor informații:
- datele personale de contact ale clienților, ceea ce duce la o ușoară reactivare a acestora la revenire;
- stocarea preferințelor fiecărui client în parte: tipul camerei (simplă, dublă, matrimonială), tarifele aferente fiecărei camere;
- datele privind rezervările făcute de oaspeți cum ar fi: data în care s-a făcut rezervarea, numărul de personae cazate, perioada cazării și data decazării;
- gestionarea serviciilor, prețurilor acestora și discountul aferent fiecărui serviciu;
- datele în parte ale fiecărei camere, respectiv tarifele acestora, avansul plătit pentru fiecare camera, precum și modul de plată al avansului (numerar sau bancar);
Politica pensiunii impune un timp de cazare de minim două zile, iar tarifele camerelor sunt cuprinse între 100 RON și 425 RON pentru o cameră matrimonială. Clienții sunt obligați să plătească un avans ce reprezintă garanția ulterioarei cazări. În ceea ce privește angajații pensiunii, aceștia dispun de un salariu mai mare de 1000 ron.
Baza de date va conține 6 tabele: Clienți, Rezervări, Cazare, Personal, Servicii și Rand sevicii. În tabela Clienți vor fi înregistrate atributele următoare: id_client, denumire, tip, adresa, telefon_client, e_mail. Tabela Rezervări conține atributele: id_rezervare, data_rezervare, persone_cazate, tip_camera, tarif_camera, avans, modal_plata_avans, id_client. Între tabelele Clienți si Rezervări există o relație de asociere “unul-la-multe” sau one-to-many. Este asocierea prin care unui element din mulțimea Clienți îi corespund unul sau mai multe elemente din mulțimea Rezervări, dar unui element din mulțimea Rezervări îi corespunde un singur element în mulțimea Clienți.
Tabela Cazare va fi definită de entitățile: id_cazare, data_cazare, timp_cazare, data_plecare, achitare, id_client, id_rezervare. Această tabelă se află într-o relație de “unul-la-unul” sau one-to-one față de tabela Clienți. Este asocierea prin care unui element (entitate) din mulțimea Clienți îi corespunde un singur element din mulțimea Cazare, și reciproc. De altfel tabela se află într-o asociere de one-to-many față de tabela Rezervări .
Tabela Personal va fi formată din înregistrările: id_angajat, nume, prenume, adresa, functie, salariu. Tabela se află în relație de 1:n cu tabela Servicii care conține următoarele atribute: id_serviciu, denumire_serv, pret_serviciu, id_angajat, id_client. Tabela Servicii se află într-o asociere de “multe-la-multe” sau many-to-many față de tabela principală Clienți. Este asocierea prin care unui element din mulțimea Servicii îi corespund unul sau mai multe elemente din mulțimea Clienți, și reciproc.
Asocierea binară M:N dintre cele două mulțimi de entități se realizează prin intermediul unei noi relații, numită relație de asociere (‘Rand servicii’). Această nouă relație se află în asociere M:1, respectiv N:1 cu fiecare din cele două relații prin intermediul a două chei străine (id_angajat și id_client) care referă cheile primare din relațiile Clienți și Servicii.
Cheia primară a relației de asociere ‘Rand servicii’ poate fi o cheie artificială sau poate fi compusă din cheile străine care referă cele două relații asociate. Cheia primară a relației ‘Rand servicii’ este formată din cele două chei străine pe care le conține.
2. Schema conceptuală
3. Construirea bazei de date
- Comenzi de creare a tabelelor, restricții de integritate
● CREATE TABLE clienti ( id_client NUMBER(5,2), denumire VARCHAR2(20) NOT NULL,
tip CHAR, adresa VARCHAR2(30), telefon VARCHAR2(10), e_mail VARCHAR2(20),
CONSTRAINT pk_clienti PRIMARY KEY(id_client),
CONSTRAINT nn_tip CHECK (tip IS NOT NULL),
CONSTRAINT ck_tip CHECK(tip IN ('F','J')),
CONSTRAINT uq_mail UNIQUE (e_mail)) ;
• CREATE TABLE Rezervari(id_rezervare NUMBER(5,0), data_rezervare DATE NOT NULL,
persoane_cazate NUMBER(5,0),tip_camera VARCHAR2(20),tarif_camera NUMBER(7,2),
avans NUMBER(5,0),modal_plata_avans VARCHAR2(10),id_client NUMBER(5,0),
CONSTRAINT pk_idrezervare PRIMARY KEY(id_rezervare),
CONSTRAINT nn_data CHECK(data_rezervare IS NOT NULL),
CONSTRAINT ck_persoane CHECK (persoane_cazate>0),
CONSTRAINT ck_camera CHECK (tip_camera IN ('dubla','simpla','matrimoniala')),
CONSTRAINT ck_tarif CHECK (tarif_camera BETWEEN 100 AND 425),
CONSTRAINT ck_modal_plata CHECK (modal_plata_avans IN('NUMERAR','BANCAR')),
CONSTRAINT fk_rezervari FOREIGN KEY(id_client) REFERENCES Clienti(id_client));
● CREATE TABLE Cazare (id_cazare NUMBER(5),data_cazare DATE NOT NULL,
timp_cazare NUMBER(5), data_plecare DATE, achitare VARCHAR2(10),
id_client NUMBER(5),id_rezervare NUMBER(5),
CONSTRAINT pk_cazare PRIMARY KEY (id_cazare),
CONSTRAINT ck_timp CHECK(timp_cazare>2),
CONSTRAINT ck_achitare CHECK(achitare IN ('NUMERAR','BANCAR')),
CONSTRAINT fk_cazare FOREIGN KEY (id_client) REFERENCES Clienti(id_client),
CONSTRAINT fk_idrezervare FOREIGN KEY(id_rezervare) REFERENCES Rezervari(id_rezervare));
● CREATE TABLE Personal( id_angajat NUMBER(5),Nume VARCHAR2(10) NOT NULL,
Prenume VARCHAR2(10) NOT NULL, Adresa VARCHAR2(30),
Functie VARCHAR2(10),Salariu NUMBER(6),
CONSTRAINT pk_personal PRIMARY KEY(id_angajat),
CONSTRAINT ck_salariu CHECK (salariu>1000));
● CREATE TABLE Servicii( id_serviciu NUMBER(5),denumire_serviciu VARCHAR2(10) NOT NULL,
pret_serviciu NUMBER(7,2),id_angajat NUMBER(5), id_client NUMBER(5),
CONSTRAINT pk_servicii PRIMARY KEY(id_serviciu),
CONSTRAINT fk_ang FOREIGN KEY(id_angajat) REFERENCES Personal(id_angajat),
CONSTRAINT fk_client1 FOREIGN KEY(id_client) REFERENCES Clienti(id_client));
● CREATE TABLE Rand_servicii(id_client NUMBER(5),
id_serviciu NUMBER(5),discount VARCHAR2(10),
CONSTRAINT fk_client2 FOREIGN KEY (id_client) REFERENCES Clienti(id_client),
CONSTRAINT fk_serviciu1 FOREIGN KEY (id_serviciu) REFERENCES Servicii (id_serviciu),
CONSTRAINT pk_compusa PRIMARY KEY (id_client, id_serviciu)).
Preview document
Conținut arhivă zip
- Baze de Date - Gestiune Pensiune.doc