35 1 1MB
PROIECT
GESTIUNEA UNUI MAGAZIN GSM Student: Necula Radu Adrian Anul 1, Informatica Universitatea din Pitesti
Introducere SQL: SQL este limbajul standard pentru accesarea și modificarea bazelor de date. Întrebuințări SQL: SQL poate executa interogări la baza de date SQL poate extrage date din baza de date SQL poate insera înregistrări în baza de date SQL poate actualiza înregistrări în baza de date SQL poate crea noi baze de date SQL poate crea noi tabele în baza de date SQL poate crea proceduri stocate, funcții, triggere SQL poate crea vizualizări în baza de date SQL poate stabili permisiuni asupra entităților din baza de date SQL este un standard … DAR … Cu toate că SQL este standard ANSI, există mai multe versiuni ale limbajului SQL Totuși, cel puțin comenzile principale (SELECT, UPDATE, INSERT, DELETE) sunt permise într-un mod aproape unitar de toate implementările, pentru compatibilitate.
Introducere baze de date: Prin bază de date înţelegem o colecţie de date elementare şi interdependente, structurate şi organizate astfel încât să fie accesibile unei comunităţi de utilizatori.
Bazele de date sunt concepute pentru a prelucra volume mari de informaţii. Organizarea datelor în unul sau mai multe fișiere stocate în memoria externă este în concordanță cu această definiție. Conceptul de bază de date a apărut în 1964 în cadrul primului raport CODASYL prezentat la lucrările unei conferinţe pe probleme de limbaje de gestiune a datelor “Development and Management of Computer – centered datebase”. La această conferinţă a fost lansată ideea organizării datelor prin intermediul unui fişier de descriere globală, numit dicţionar de date care are menirea de a asigura independenţa programelor faţă de date şi a datelor faţă de programe . Baza de date conţine nu numai datele operaţionale ale organizaţiei, ci şi o descriere a acestora. De aceea ea este definită şi ca o colecţie autodescrisă de înregistrări integrate. Această descriere a datelor este cunoscută sub denumirea de catalog de sistem sau dicţionar de date sau meta-date (date despre date). Natura autodescriptivă a bazelor de date este cea care determină independenţa program-date. Accesul utilizatorilor la informaţiile despre structura unei baze de date se realizează prin intermediul dicţionarului de date. O bază de date SQL Server este compusă din trei tipuri de fişiere: un fişier cu extensia .mdf, zero sau mai multe fişiere cu extensia .ndf şi unul sau mai multe fișiere cu extensia .ldf În fişierul cu extensia .mdf sunt stocate obiectele bazei de date precum tabelele, indecșii, vederile etc. împreună cu definiţiile lor. Fişierele cu extensia .ndf sunt fişiere secundare ce conţin numai date, iar fişierul cu extensia .ldf conţine jurnalul de tranzacţii. Orice bază de date are asociat un jurnal de tranzacţii. Actualizarea unei înregistrări a bazei de date presupune memorarea în jurnalul de tranzacţii a conţinutului înregistrării dinainte şi după actualizare. Jurnalul de tranzacţii este folosit pentru restaurarea bazei de date în situaţia în care apare o eroare ce necesită anularea sau reluarea unor operaţii înregistrate. Incepând cu versiunea SQL 7.0, a fost introdus conceptul de nume logic. Există câte un nume logic pentru fiecare fisier .mdf, .ndf, .ldf. Implicit, pentru
fisierul .mdf, numele logic coincide cu numele fișierului fizic(fără extensie) iar pentru fisierul .ldf numele logic coincide cu numele fișierului fizic(fără extensie) completat cu _log. Numele logice sunt utilizate de funcțiile de administrare ale sistemului SQL Server pentru identificarea fișierelor și nu trebuie neapărat schimbate când se schimbă denumirea bazei de date. Tema aleasă pentru proiect: Am creat o bază de date referitoare la gestiunea unui magazin GSM. Proiectul este realizat în Microsoft® SQL Server® 2012 Express/86 biti. Baza de date conține informații referitoare la produsele aflate în magazin ( tProduse ), la angajații din magazin ( tAngajați ), la clienți ( tClienți ), la bonurile eliberate ( tBonuri ) și la detalii bonuri eliberate ( tDetaliiBon ).
Structura tabelelor: Reguli de gestiune: -
Un bon emis pentru un singur client. Unui client îi pot fi emise mai multe bonuri. Un bon face referire la mai multe produse. Un produs este obiectul mai multor bonuri.
Create table tAngajați
( CodAngajat char(10) primary key, Nume varchar(25) not null, Prenume varchar(30) not null, CNP char(13) not null unique, DataNasterii as convert (smalldatetime,substring(cnp,2,6),12), CodDepartament char(10) not null, CodFunctie char(6) not null, DataAngajarii smalldatetime not null, Salariu int not null )
create table tClienti
(
CodClient char(10) primary key, NumeClient varchar(25) not null, CodJudet char(2) not null, Localitate varchar(10) not null, Strada varchar(10) not null, RestAdresa varchar(25) not null )
create table tBonuri
( NrBon char(10) primary key, DataBon smalldatetime default getdate(), CodClient char(10) not null foreign key references tClienti(CodClient), CodAngajat char(10) not null foreign key references tAngajati(CodAngajat) ) create table tProduse
( CodProd char(10) primary key, DenProd char(25) not null, UM char(6) not null, pret decimal(7,2) not null ) create table tDetaliiBon
(
NrBon char(10) constraint fk_NrFact foreign key references tBonuri(NrBon), CodProd char(10) constraint fk_CodProd foreign key tProduse(CodProd), Cantitate decimal(8,3) not null, constraint pk_DetFact primary key(NrBon,CodProd) )
Crearea bazei de date
Utilizarea bazei de date
Crearea tabelelor
Inserarea datelor în tabel
Extragerea de date
Filtrarea datelor
Actualizarea datelor în tabel
Ștergerea datelor din tabel
Regăsirea datelor dintr-o bază de date
Sortarea datelor după un anumit criteriu
Combinarea instrucțiunilor SELECT
Determinarea celei mai mari valori dintr-o coloană
Determinarea celei mai mici valori dintr-o coloană
Calculul valorii medii pe coloană numerică
Gruparea datelor
Constrângeri Se folosesc pentru a limita tipul datelor care pot ajunge în tabelă Se pot specifica la crearea tabelei (în instrucțiunea CREATE TABLE) sau după ce a fost creată tabela (cu instrucțiunea ALTER TABLE) NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT Constrângerea NOT NULL Implicit o tabelă poate conține în câmpurile sale valori NULL NOT NULL va determina ca această valoare să nu fie acceptată în coloana asupra căreia se aplică constrângerea
Cu această constrângere nu se vor putea adăuga înregistrări sau nu se vor putea actualiza fără a specifica o valoarea pentru câmpul respectiv CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ) Constrângerea UNIQUE Folosită asupra unei coloane în care nu se vor permite date duplicate UNIQUE și PRIMARY KEY oferă garanția de unicitate pentru o coloană sau mulțime de coloane O constrângere de tip PRIMARY KEY are întotdeauna definită și o constrângere UNIQUE Putem avea mai multe constrângeri UNIQUE dar o singură constrângere PRIMARY KEY Constrângerea UNIQUE - exemplu CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255),
Address varchar(255), City varchar(255), UNIQUE (P_Id) ) Constrângerea UNIQUE – cu ALTER TABLE Definirea unei constrângeri de unicitate după ce tabela a fost creată MySQL / SQL Server / Oracle / MS Access ALTER TABLE Persons ADD UNIQUE (P_Id) ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) Eliminarea unei constrângeri MySQL ALTER TABLE Persons DROP INDEX uc_PersonID
Constrângerea PRIMARY KEY Identifică în mod unic fiecare înregistrare din tabelă Cheia primară trebuie să conțină valori unice Nu poate conține valoarea NULL Fiecare tabelă trebuie să aibă o cheie primară și numai una Crearea unei constrângeri de cheie primară după crearea tabelei
ALTER TABLE Persons ADD PRIMARY KEY (P_Id) În acest caz coloanele ce fac parte din cheia primară trebuie să fi fost definite anterior astfel încât să nu accepte valoarea NULL
Instrucțiunea ALTER TABLE Folosită pentru a adăuga, modifica, șterge, coloane dintr-o tabelă Adăugarea unei coloane ALTER TABLE table_name ADD column_name datatype Ștergerea unei coloane ALTER TABLE table_name DROP COLUMN column_name Schimbarea tipului de date pentru o coloană ALTER TABLE table_name ALTER COLUMN column_name datatype Eliminarea coloanei adăugate anterior ALTER TABLE Persons DROP COLUMN DateOfBirth
Date calendaristice Forma datei pe care încercăm să o inserăm trebuie să se potrivească cu formatul coloanei de tip dată din tabelă
Atunci când apare și partea de timp/oră lucrurile se complică Există o serie de funcții predefinite pentru procesarea informațiile legate de dată/oră
NULL Reprezintă date lipsă/necunoscute/inaplicabile Implicit o coloană poate conține valoarea NULL Operatori pentru NULL: IS NULL IS NOT NULL Când valoarea unei coloane este opțională putem adăuga o înregistrare sau o putem actualiza fără a specifica o valoare pentru coloana respectivă În acest caz se va salva valoarea NULL Valoarea NULL este tratată diferit față de restul valorilor Se folosește ca un marcator pentru date necunoscute/inaplicabile NULL și 0 (zero) nu sunt echivalente sau comparabile
Extragem înregistrările cu adresa NULL SELECT LastName, FirstName, Address FROM Persons WHERE Address IS NULL
Extragem înregistrările cu adresa completată
SELECT LastName, FirstName, Address FROM Persons WHERE Address IS NOT NULL
Subinterogarea În SQL, subinterogările ne permit să aflăm o informaţie care ne este necesară pentru a obţine informaţia pe care o vrem. O subinterogare (subquery) este o instrucţiune SELECT care este inclusă în clauza unei alte instrucţiuni SELEC Subinterogarea poate fi plasata în una din următoarele clauze: WHERE HAVING FROM Subinterogarea se execută prima dată, iar rezultatul este folosit pentru obţinerea rezultatului de către interogarea principală (outer query). Reguli de folosire a subinterogarilor O subinterogare se pune între paranteze rotunde O subinterogare este plasata în partea dreaptă a unei condiţii de comparare Interogarea exterioară şi subinterogarea-ul pot prelua date din tabele diferite Într-o instrucţiune SELECT se poate folosi o singură clauză ORDER BY şi, dacă se foloseşte, trebuie să fie ultima clauza a interogării principale. Un subquery nu poate avea propria clauză ORDER BY. Singura limită a numărului de interogări este dimensiunea buffer-ului folosit de interogare.
Dacă subinterogarea returnează null sau nu returneaza nici o linie, atunci interogarea exterioară nu va returna nimic. Sunt două tipuri de subinterogări(subqueries): 1) single-row subqueries – care folosesc operatorii single-row: >,=,>=,