Sunteți pe pagina 1din 19

Proiect la Baze de Date în Economie

Gări/Autogări, Mersul trenurilor/autobuzelor

AUTOGARA Transmoldavia

Scenariu

Proiectul are ca scop evidenta Autogarii Transmoldavia, din Piatra Neamt. Acesta contine
notiuni fundamentale de baza de date, descrierea lucrarii, tabele, atribute, relatii,restrictii,
schema tabeleleor, codul SQL pentru tabele si comenzi SQL.

Baza de date contine informatii atat despre firmele care platesc isi desfasoara activitatea,
cat si relatii despre plecari, sosiri, masini si soferi.

Tema aleasa are ca scop organizarea,evidenta si gestiunea sosirilor si plecarilor ,cat si a altor
elemente intr-o autogara. Asadar aceasta baza de date corespunde nevoilor organizatorice si
de gestiune a unei autogari deoarece:

❖ baza de date pastreaza inregistrarea intregii activitati, facand activitatea mai usor de
gestionat;

❖ prezinta legaturi logice intre principalele elemente ale proiectului;

❖ poate fi utilizata de oricine fara a avea cunostinte in domeniul bazelor de date.

Pentru aceasta am creat urmatoarele tabele :

▪ Tabela Localitati -stocheaza numele localitatilor si judetele;

▪ Tabela Sosiri-contine informatii despre masinile care vin in Autogara Transmoldavia,


precum data, ora(la care ajung in autogara beta), codul localitatii din care vin sau
id_ul soferului;

1
▪ Tabela Plercari-contine informatii despre masinile care pleaca din Autogara
Transmoldavia, precum data,ora,codul localitatii spre care pleaca, precum si id-ul
soferului;

▪ Tabela Soferi-contine informatii despre soeri.Fiecare sofer este identificat printr-un id,
dar regasim si numele,prenumele,data nasterii, data angajarii,precum si firma l acre
este angajat

▪ Tabela Masini-stocheaza informatii despre masinile firmelor care au legatura cu


aceasta autogara.In cadrul acestei tabele gasim informatii despre numerele de
inmatriculare, numarul de locuri al fiecarei masini,tipul acesteia(microbus sau
autocar) precum si firma de care apartine.

2
Diagrama ERD

LOCALITATE SOSIRE
#cod #id_sosire
*denumire *cod_localitate
*judet *data

*ora

FIRMA

#CUI
PLECARE
*nume_firma
#id_plecare
*adresa
*cod_localitate
*telefon ail
*data
⃝e-mail
*ora

SOFER
MASIAN
#id_sofer
#id_masian
*nume
*nr_inmatriculare
*prenume
*nr_locuri
*data_nasterii
*tip_masian
*data_angajarii

3
Tabelele de mapare

LOCALITATI(LCE)

Tip Cheie Opționalitate Nume coloana Observatii


CP * cod
* denumire
* judet

PLECARI(PCE)

Tip Cheie Opționalitate Nume coloana Observatii


CP * Id_plecare
CS * Cod_localitate Relatie cu tabela Localitati
* Data
* Ora
CS * Masina Relatie cu tabela Masini
CS * Soferi Relatie cu tabela Soferi

SOSIRI(SSE)

Tip Cheie Opționalitate Nume coloana Observatii


CP * Id_sosire
CS * Cod_localitate Relatie cu tabela Localitati
* Data
* Ora
CS * Masina Relatie cu tabela Masini
CS * Soferi Relatie cu tabela Soferi

SOFERI(SFR)

Tip Cheie Opționalitate Nume coloana Observatii


CP * Id_sofer
* Nume
* Prenume
* Data_nasterii

4
* Data_angajarii
CS * Firma Relatie cu tabela Firme

FIRME(FRM)

Tip Cheie Opționalitate Nume coloana Observatii


CP * CUI
* Nume_firma
* Adresa
CU * Telefon
⃝ e-mail
* Cod_localitate Relatie cu tabela Localitati
* Chirii Se adauga ulterior

MASINI(MSN)

Tip Cheie Opționalitate Nume coloana Observatii


CP * Id_masina
* Nr_inmatriculare
* Nr_locuri
* Tip_masina
CS * Firma Relatie cu tabela Firme

ANGAJAŢI (AGT)/DIRECTORI (DRR)


Tip cheie Opţionalitate Nume coloană Observaţii
CP * Marca
* Nume
* prenume
* data naşterii
o data angajării
o nr contract muncă Obligatoriu pt lăptari, necompletat pt măcelari
o salariu Obligatoriu pt lăptari, necompletat pt măcelari
o salariu orar Obligatoriu pt măcelari, necompletat pt lăptari
o experienţă Obligatoriu pt măcelari, necompletat pt lăptari
* tip_agt Pt specificarea subtipului (macelar, laptar)

5
CS o marca_drr Relaţia cu DIRECTORI (DRR)

SCHEMA BAZEI DE DATE

Creare tabele

Creare tabelă Localitati


CREATE TABLE localitati(cod NUMBER(2) PRIMARY KEY,denumire VARCHAR2(25),judet VARCHAR2(25))

Creare tabelă Firme:


CREATE TABLE firme( cui NUMBER(5) PRIMARY KEY, nume_firma
VARCHAR2(20),adresa VARCHAR2(80), telefon VARCHAR(10) UNIQUE, email VARCHAR(50))

Creare tabelă Soferi:


CREATE TABLE SOFERI(id_sofer NUMBER(3) PRIMARY KEY,nume VARCHAR(30),prenume
VARCHAR(30), data_nasterii DATE, data_angajarii DATE, firma NUMBER(5) REFERENCES firme(cui))

6
Creare tabelă Masini:
CREATE TABLE MASINI(id_masini NUMBER(4) PRIMARY KEY,nr_inmatriculare VARCHAR(10) UNIQUE,
nr_locuri NUMBER(2), tip_masina VARCHAR(8),firma NUMBER(5) REFERENCES firme(cui))

Creare tabelă Plecari:


CREATE TABLE PLECARI(id_plecare NUMBER(4) PRIMARY KEY, cod_localitate NUMBER(2) REFERENCES
localitati(cod),data DATE, ora VARCHAR(5),masina NUMBER(4) REFERENCES masini(ID_masini),soferi
NUMBER(3) REFERENCES soferi(id_sofer))

Creare tabelă Sosiri:


CREATE TABLE SOSIRI(id_sosire NUMBER(4) PRIMARY KEY, cod_localitate NUMBER(2) REFERENCES
localitati(cod),data DATE, ora VARCHAR(5),masina NUMBER(4) REFERENCES masini(ID_masini),soferi
NUMBER(3) REFERENCES soferi(id_sofer))

Popularea tabelelor
Populare Localitati:
INSERT INTO localitati Values(11,'Piatra-Neamt','Neamt')

INSERT INTO localitati Values(22,'Roman','Neamt')

INSERT INTO localitati Values(33,'Bicaz','Neamt')

INSERT INTO localitati Values(44,'Pascani','Iasi')

INSERT INTO localitati Values(55,'Vatra-Dornei','Suceava')

INSERT INTO localitati Values(66,'Targu-Neamt','Neamt')

7
Populare Firme:
INSERT INTO firme VALUES(60020,'Transmoldavia','Piatra-Neamt, B-dul Unirii,nr2', 2323838210,

'transmoldavia@yahoo.com')

INSERT INTO firme VALUES(4070,'CDI','Piatra-Neamt, Str.


Primaverii,nr5',3243432333,'cdi.trans@yahoo.com')

INSERT INTO firme VALUES(56000,'Super Univers Trans','Piatra-Neamt, B-dul Decebal,nr13',


2948483333,

'superunivtrans@yahoo.com')

INSERT INTO firme VALUES(22445,'Bucovina Trans','Vatra-Dornei, Str

Florilor,nr22',3968593485,'bucovina_trans@yahoo.com')

Populare Soferi:
INSERT INTO SOFERI VALUES(100,'Gavrila','Mihai',TO_DATE('12/10/80','DD/MM/RR')
,TO_DATE('22/10/10','DD/MM/RR'),

60020)

INSERT INTO SOFERI VALUES(200,'Ionescu','Ciprian',TO_DATE('13/09/78','DD/MM/RR')

,TO_DATE('12/11/80','DD/MM/RR'),4070)

INSERT INTO SOFERI VALUES(300,'Lazar','Marian',TO_DATE('12/01/82','DD/MM/RR')

,TO_DATE('18/01/15','DD/MM/RR'),60020)

INSERT INTO SOFERI VALUES(400,'Cristea','Razvan',TO_DATE('12/02/72','DD/MM/RR')

,TO_DATE('12/03/13','DD/MM/RR'),60020)

INSERT INTO SOFERI VALUES(500,'Rusu','Alexandru',TO_DATE('17/07/80','DD/MM/RR')

,TO_DATE('20/06/09','DD/MM/RR'),56000)

INSERT INTO SOFERI VALUES(600,'Popa','Vasile',TO_DATE('21/03/76','DD/MM/RR')


8
,TO_DATE('14/09/13','DD/MM/RR'),56000)

INSERT INTO SOFERI

VALUES(700,'Mandrusca','Constantin',TO_DATE('30/06/75','DD/MM/RR'),TO_DATE('12/12/18','DD/
MM/RR'),22445)

INSERT INTO SOFERI

VALUES(800,'Armanca','Eusebiu',TO_DATE('23/03/80','DD/MM/RR')

,TO_DATE('12/04/05','DD/MM/RR'),22445)

Populare Masini:
INSERT INTO MASINI VALUES(1122,'NT-08-MRN',20,'microbuz',60020)

INSERT INTO MASINI VALUES(1133,'NT-20-ICT',22,'MICROBUZ',4070)

INSERT INTO MASINI VALUES(1144,'NT-05-MRN',40,'AUTOCAR',4070)

INSERT INTO MASINI VALUES(1155,'NT-20-MPO',48,'AUTOCAR',56000)

INSERT INTO MASINI VALUES(1166,'SV-07,ETU',25,'MICROBUZ',22445)

INSERT INTO MASINI VALUES(1177,'SV-90-RET',22,'MICROBUZ',22445)

9
Populare Plecari:
INSERT INTO PLECARI VALUES(3001,22,TO_DATE('22/05/23','DD/MM/RR'),'14:00',1122,200)

INSERT INTO PLECARI VALUES(3002,66,TO_DATE('23/05/23','DD/MM/RR'),'12:30',1133,100)

INSERT INTO PLECARI VALUES(3003,66,TO_DATE('23/05/23','DD/MM/RR'),'12:30',1144,100)

INSERT INTO PLECARI VALUES(3004,55,TO_DATE('24/05/23','DD/MM/RR'),'15:00',1177,200)

INSERT INTO PLECARI VALUES(3005,11,TO_DATE('23/05/23','DD/MM/RR'),'13:00',1166,300)

INSERT INTO PLECARI VALUES(3006,33,TO_DATE('27/05/23','DD/MM/RR'),'12:00',1144,700)

INSERT INTO PLECARI VALUES(3007,22,TO_DATE('28/05/23','DD/MM/RR'),'14:45',1122,800)

INSERT INTO PLECARI VALUES(3008,66,TO_DATE('28/05/23','DD/MM/RR'),'15:00',1166,500)

INSERT INTO PLECARI VALUES(3009,22,TO_DATE('29/05/23','DD/MM/RR'),'15:45',1166,300)

Populare Sosiri:

10
INSERT INTO SOSIRI VALUES(4001,66,TO_DATE('12/10/20','DD/MM/RR'),'14:00',1122,500)

INSERT INTO SOSIRI VALUES(4002,33,TO_DATE('10/12/20','DD/MM/RR'),'12:00',1166,400)

INSERT INTO SOSIRI VALUES(4003,44,TO_DATE('15/10/20','DD/MM/RR'),'13:00',1144,300)

INSERT INTO SOSIRI VALUES(4004,22,TO_DATE('15/10/20','DD/MM/RR'),'14:00',1177,200)

INSERT INTO SOSIRI VALUES(4005,11,TO_DATE('13/10/20','DD/MM/RR'),'15:00',1133,100)

INSERT INTO SOSIRI VALUES(4006,55,TO_DATE('12/10/20','DD/MM/RR'),'14:45',1155,300)

INSERT INTO SOSIRI VALUES(4007,22,TO_DATE('12/10/20','DD/MM/RR'),'15:00',1177,200)

INSERT INTO SOSIRI VALUES(4008,22,TO_DATE('13/10/20','DD/MM/RR'),'14:00',1166,200)

Modificări de structură:

• stergerea coloanei email din tabela Firme

ALTER TABLE firme

DROP COLUMN email;

• numarul de inmatriculare din tabela Maini sa nu fie null

• in tabela SOFERI data nasterii sa fie mai mica decat data angajarii

ALTER TABLE SOFERI

11
ADD CHECK(data_nasterii<data_angajarii)

Modificări de continut:
• se sterge din tabela Plecari inregistrarile in care id_ul masinii =1133

DELETE FROM PLECARI WHERE masina=1133;

• se modifica adresa cu CUI=4070 din tabela Firme in 'Piatra-Neamt, B-dul Stefan cel Mare , nr
2'

UPDATE FIRME SET adresa='Piatra-Neamt, B-dul Stefan cel Mare , nr 2'WHERE CUI=4070;

12
• se adauga o noua coloana cod_localitate in Tabela Firme care fce referire la cod din tabela
Localitati

ALTER TABLE firme

ADD cod_localitate NUMBER(2) REFERENCES localitati (cod) ;

UPDATE FIRME

SET cod_localitate=11

WHERE CUI=60020;

UPDATE FIRME

SET cod_localitate=11

WHERE CUI=4070;

UPDATE FIRME

SET cod_localitate=11

WHERE CUI=56000;

UPDATE FIRME

SET cod_localitate=55

WHERE CUI=22445;

Creare vederi
1)INFORMATII MASINI

CREATE VIEW INFO_MASINI AS

13
SELECT masini.nr_inmatriculare, masini.nr_locuri,firme.nume_firma

FROM masini,firme

WHERE masini.firma=firme.cui

SELECT * from info_masin

2)INFORMATII PLECARI

CREATE VIEW INFO_PLECARI AS

SELECT plecari.data,plecari.ora,masini.nr_inmatriculare,masini.nr_locuri,soferi.nume,soferi.prenume

FROM plecari,soferi,masini

WHERE plecari.masina=masini.id_masini

AND plecari.soferi=soferi.id_sofer

INTEROGARI

Interogări
1)Firmele, numarul de telefon si judetul de care apartin.

14
SELECT firme.nume_firma AS FIRMA, firme.telefon AS TELEFON, localitati.judet AS JUDET from Firme

Join Localitati

ON(localitati.cod=firme.cod_localitate);

2) Detalii despre soferi

SELECT soferi.nume, soferi.prenume, soferi.data_nasterii, soferi.data_angajarii,firme.nume_firma AS


FIRMA

FROM soferi

JOIN firme ON(soferi.firma=firme.cui)

3) Toate plecarile spre localitatea cu cod=22

SELECT p.data, p.ora,m.nr_inmatriculare

FROM plecari p, masini m

WHERE p.masina=m.ID_masini

AND p.cod_localitate=22

ORDER BY data

15
4) Se actualizeaza tabela firme cu chiriile pe care trebuie sa le plateasca fiecare.

ALTER TABLE FIRME

ADD chirie NUMBER(4)

UPDATE FIRME

SET chirie=300

WHERE CUI=60020

UPDATE FIRME

SET chirie=450

WHERE CUI=4070

UPDATE FIRME

SET chirie=600

WHERE CUI=56000

UPDATE FIRME

SET chirie=480

WHERE CUI=22445

5)Firmele care platesc chirie o suma mai mare decat media tuturor firmelor

SELECT f.nume_firma AS "FIRME CU CELE MAI MARI CHIRII",f.chirie AS CHIRIE

FROM firme f

WHERE f.chirie>(SELECT AVG(chirie) FROM FIRME)

ORDER BY chirie DESC

16
6)Toate masinile care sosesc intre 12:00 si 14:00

SELECT m.nr_inmatriculare, s.data,s.ora

FROM masini m, sosiri s

WHERE m.id_masini=s.masina

AND s.ora BETWEEN '12:00' AND '14:00’;

7)Soferii care pleaca spre jud Suceava,data si ora

SELECT s.nume,s.prenume,p.data,p.ora

FROM soferi s, plecari p

WHERE s.id_sofer=p.soferi

AND p.cod_localitate=(SELECT l.cod FROM localitati l WHERE judet='Suceava')

8)Soferii cu vechimea > 10 ani si varsta acestora

SELECT s.nume || ' ' || s.prenume AS "Nume Complet", ROUND((sysdate-data_nasterii)/365) as


Varsta

FROM soferi s

WHERE ROUND(sysdate-data_angajarii)/365>10

ORDEY BY nume;

17
9) Detalii plecari masini>22 locuri

SELECT masini.nr_inmatriculare,masini.nr_locuri,firme.nume_firma AS

FIRMA,plecari.ora,plecari.data,localitati.denumire

FROM masini JOIN firme ON( masini.firma=firme.cui)

JOIN plecari ON(masini.id_masini=plecari.masina)

JOIN localitati ON(localitati.cod=plecari.cod_localitate)

WHERE masini.nr_locuri>22

10)Toate sosirile din jud Neamt

SELECT sosiri.data,sosiri.ora,localitati.denumire AS localitati

FROM sosiri JOIN localitati ON(sosiri.cod_localitate=localitati.cod)

WHERE localitati.judet='Neamt'

ORDER BY denumire

11) suma incasata pe chirii de autogara

SELECT sum(chirie) AS Suma_incasata

18
FROM firme;

12)Detalii plecari

SELECT DISTINCT * FROM plecari

FULL JOIN localitati ON(plecari.cod_localitate=localitati.cod)

13)Soferii cu o vechime mai mica de 10 ani

SELECT soferi.nume,soferi.prenume, ROUND((Sysdate-data_angajarii)/365) AS VECHIME

FROM soferi

WHERE ROUND((Sysdate-data_angajarii)/365)<10

ORDER BY NUME

19

S-ar putea să vă placă și