SlideShare a Scribd company logo
1 of 32
Download to read offline
BAZE DE DATE
SQL de bază
2
1. Etape ale implementării bazelor de date
2. Concepția bazei de date. Normalizări
3. Crearea și configurarea unei baze de date relaționale
4. Crearea și modificarea tabelelor
5. Inserarea datelor
6. Interogări pentru recuperarea de informații
7. Lucrul cu tabele multiple
8. Introducere în vizualizări și proceduri
1. Etape ale implementării bazelor de date
Definiții de bază
Catalog SQL = colecție de scheme, într-un mediu SQL, căreia i se atribuie un nume.
Mediu SQL = instalarea unui SGBD de tip SQL pe un sistem de tip computer.
Elementele schemei bazei de date = tabele, constrîngeri, view-uri, domenii, alte elemente de
constituire a schemei (ex. granturi de autorizare).
O schemă SQL se identifică prin nume și conține un identificator de autorizare (utilizatorul sau
contul care deține schema), descriptori ai fiecărui element din schemă.
Privilegiile de creare de scheme, tabele sau alți constructori trebuie atribuite explicit unui utilizator
relevant de către administratorul de sistem sau de către administratorul bazei de date.
Crearea unei scheme se face cu comanda CREATE SCHEMA și poate să includă definirile tuturor
elementelor schemei. Minimal, la creare se atribuie numele schemei și identificatorul de autorizare,
urmând ca celelalte elemente să fie definite ulterior.
Ex. CREATE SCHEMA COMPANY AUTHORIZATION ‘Popescu’;
Etape ale implementării bazelor de date
• Culegerea de date, analiza lor, a tipurilor de utilizatori, volumul datelor, elemente de securizare
• Stabilirea configurației bazei de date, normalizări
• Implementarea bazei de date
– Alegere, instalare mediu de lucru
– Creare și configurare folosind un SGBD
– Popularea bazei de date
– Crearea de script-uri cu interogări, view-uri, tranzacții (ștergeri de date, actualizări, interogări
complexe)
3
2. Concepția bazei de date. Normalizări
O bază de date este folosită pentru stocarea datelor în tabele.
Pentru a forma o schemă relațională, tabelele trec printr-un proces de normalizare. Abia apoi se
descrie schema bazei într-un sistem de gestionare de baze de date și se stochează pe HDDul unui
sistem, pe un mediu de stocare (ex. SQL Server).
Normalizarea datelor
Prima formă normală
O celulă să nu conțină mai multe valori.
4
2. Concepția bazei de date. Normalizări
5
A doua formă normală - rezolvă redundanța datelor:
• câte un tabel pentru fiecare dată care apare redundant și
• identificatori unici pe tabele (valoarea identifică în mod unic o înregistrare din tabelul
respectiv)
și, la nevoie,
• crearea de tabele de joncțiune (en. join) pentru situațiiile în care sunt înregistrări diferite
datorate unui câmp care putea face diferențierea de două înregistrări diferite. (Ceea ce a
determinat prima normalizare.)
A treia formă normală
Alegerea și definirea cheilor a.î.
•toate coloanele dintr-o tabelă să depindă de cheia primară a tabelei.
•cheile externe să lege tabelele între ele.
3. Crearea și configurarea unei baze de date relaționale
folosind SQL Server 2017 Developer și SSMS (SQL Server Management System)
1. În Object Explorer, conectare la instanțierea unui SQL Server Database Engine și expandarea
acesteia.
6
2. Clic dreapta pe Databases și clic pe New
Database.
3. În New Database se dă numele bazei de date
(aici: MVAFundamentalsDemo).
4. Pentru crearea bazei de date cu acceptarea
valorilor implicite, clic OK.
Crearea bazei de date determină crearea a două fișiere: .mdf
(fișier de date) și .ldf (pentru logurile tranzacțiilor).
Dimensiunea și granularitatea de creștere a acestora poate fi
stbilită aici. Restul instrucțiunilor de după CREATE DATABASE
... GO, sunt setări de care baza de date are nevoie la creare.
3. Crearea și configurarea unei baze de date relaționale
Crearea și configurarea unei baze de date relaționale
folosind SQL Server 2017 Developer și SSMS (SQL Server Management System)
Pentru baza de date existentă creăm un script pe care îl deschidem într-o fereastră nouă.
7
Pentru schema existentă creăm un script pe care îl deschidem într-o fereastră nouă.
• Creăm baza de date locală: MVADemoLocalDB.
• Modificăm dimensiunea inițială a fișierului de date la 500 MB și a celui de log la 100 MB
• S-a creat structura de foldere.
• Modific locul în care se stochează fișierele corespunzătoare.
Observăm la nivelul scriptului modificările anterioare:
CREATE DATABASE [MVADemoLocalDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MVADemoLocalDB', FILENAME = N'C:SQLDataDataMVADemoLocalDB.mdf' , SIZE = 12000KB
, FILEGROWTH = 65536KB )
LOG ON
( NAME = N'MVADemoLocalDB_log', FILENAME = N'C:SQLDataLogsMVADemoLocalDB_log.ldf' , SIZE =
102400KB , FILEGROWTH = 65536KB )
GO
8
3. Crearea și configurarea unei baze de date relaționale
4. Crearea și modificarea tabelelor
9
Exemplificare
Creăm tabela Customer în schema dbo (namespace-ul în care se creează tabelele bazei de date):
Se poate face direct în SSMS cu clic dreapta pe Tables corespunzător bazei de date dorite, și indicarea
coloanelor și a proprietăților acestora.
O altă variantă este de creare a unui script .sql și scrierea comenzii propriuzise, ca în figura de mai jos.
Într-un script SQL, selectând o
anume comandă și dând
Execute se va executa doar
aceasta.
Am făcut acest lucru pentru
comanda CREATE descrisă
anterior. Rezultatul e în
fereastra de Messages.
Crearea tabelelor – comenzi definite în DDL (Data Definition Language)
CREATE TABLE – crearea unei tabele (fără niciun fel de date în ea) prin specificarea
numelui tabelei și a specificațiilor coloanelor.
Coloana de tip IDENTITY își incrementează în mod automat valoarea. Se explicitează
astfel că aceasta este și coloana cu rol de PRIMARY KEY. Aceasta este coloana care
identifică în mod unic în cadrul tabelei fiecare regulă. Într-o tabelă poate să fie o singură
coloană cu proprietatea de identitate. De asemenea, o singură cheie primară poate să
exite în cadrul unei tabele, formată din una sau mai multe coloane (mai multe coloane
într-o cheie = cheie multiplă).
10
VARCHAR – varying with characters = valoarea este un șir de caractere. Dimensiunea
indică numărul maxim de caractere pe care le poate avea un câmp al acestei coloane.
NULL – într-o coloană de tip DECIMAL permite ca acel câmp să ia valoare NULL, implicit
(semnificație: nu se cunoaște valoarea reală pentru câmpul respectiv sau nu există
valoare pentru acel câmp pentru înregistrarea respectivă).
4. Crearea și modificarea tabelelor
ALTER TABLE - comandă pentru modificarea definirii unei tabele deja create (adăugarea
sau ștergerea de coloane, constrângeri, chei)
11
CONSTRAINT - adăugarea de reguli specifice fiecărei coloane.
DROP TABLE - renunțarea la o tabelă (scoaterea ei din baza de date).
Atenție! Ștergerea unei tabele din baza de date determină și pierderea datelor din acea
tabelă. Eventuala recuperare a tabelei șterse este posibilă numai dacă există backup-uri
ale acesteia , se face cu costurile aferente de timp și pe baza datelor corespunzătoare
backup-ului respectiv.
4. Crearea și modificarea tabelelor
4. Crearea și modificarea tabelelor
CREATE TABLE – comandă pentru a specifica o nouă tabelă (relație);
⁻ Se specifică numele tabelei, numele atributelor, tipurile de date cu domeniile de valori.
⁻ Diferite constrângeri (chei, integritatea entităților, constrângeri referențiale) pot fi
specificate la definirea tabelei sau pot fi adăugate ulterior.
ALTER TABLE – comandă pentru efectuarea de modificări la nivelul tabelelor (adăugarea de chei,
integrități, constrângeri referențiale)
Cheie primară – atribut(e) a cărui valoare identifică în mod unic un tuplu într-o relație.
Constrângeri pentru integritatea entității – cheia primară nu poate lua valoarea NULL.
Constrângeri de integritate referențială – se specifică între două relații pentru a menține consistența
tuplurilor din cele două relații.
Tabelele aparțin schemei în care au fost declarate.
CREATE TABLE COMPANY.EMPLOYEE...
Tabele de bază – CREATE TABLE; există fizic, ca fișiere în SGBD
Tabele virtuale – CREATE VIEW; corespund sau nu unui fișier fizic
12
SQL Model relațional
Tabelă Relație
Linie Tuplu
Coloană Atribut
Tipuri de date de bază:
• Numeric: întreg (INTEGER sau INT, SMALLINT), real
(FLOAT sau REAL, DOUBLE PRECISION), numere
formatate (DECIMAL(i,j) sau DEC(i,j), NUMERIC (i,j),
i=nr. total de cifre, j=nr cifre după virgulă
4. Crearea și modificarea tabelelor
13
Tipuri de date de bază:
• Numeric:
• Întreg: INTEGER sau INT, SMALLINT
• Real: FLOAT sau REAL, DOUBLE PRECISION
• numere formatate: DECIMAL(i,j), DEC(i,j), NUMERIC (i,j), i=nr. total de cifre, j=nr cifre după virgulă
• Șir de caractere:
• cu lungime fixă: CHAR(n), CHARACTER(n) – ex. numerele de telefon
• cu lungime variabilă: VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n) - ex. adresa de
email
• Se pun între ‘ ‘
• Se face diferența între litere mari și mici
• Compararea pe șiruri se face lexicografic
• || operator de concatenare
• CHARACTER LARGE OBJECT – pentru coloane ce conțin mult text (documente) – dimensiunea
maximă se specifică în bytes: CLOB(20M) - dpv tehnic, acestea nu se stochează propriu-zis în
tabelă ci sunt doar pointeri către documentele propriu-zise
• valori Unicode: LastName (Obs. N și apostrof în fața unui tip de date indică faptul că este un șir de
caractere care nu este neapărat ASCII)
4. Crearea și modificarea tabelelor
14
Tipuri de date de bază:
• Șir de biți:
• Lungime fixă BIT(n) sau variabilă BIT VARYING(n)
• B’10110’
• BINARY LARGE OBJECT (BLOB) – pentru imagini: BLOB(30M)
• Boolean: TRUE, FALSE, UNKNOWN
• Dată: Sunt permise numai date și timpi valizi
• DATE cu YEAR, MONTH, DAY în 10 poziții, forma: YYYY-MM-DD
• TIME cu HOUR, MINUTE, SECOND min 8 poziții, forma HH:MM:SS
• TIME(i) – i = precizia în fracțiuni de secundă
• TIME WITH TIME ZONE
• 6 poziții suplimentare pt deplasarea față de UTZ
• Implicit – timpul local corespunzător sesiunii SQL
Tipuri suplimentare de date:
• Timestamp: TIMESTAMP – conține DATE și TIME +
min 6 poziții pt fracțiuni de secundă, opțional
WITH TIME ZONE (valoare întreagă, de regulă
obținută din sistem)
• Interval: YEAR/MONTH, DAY/TIME
• Identificator unic (GUID – Global Unique
Identifier): StockID
• XML: Spec
• Spațiale (coordonate, forme geometrice):
Location
4. Crearea și modificarea tabelelor
15
Domenii – cu nume create pt modificarea caracteristicilor mai ușor
CREATE DOMAIN SSN_TYPE AS CHAR(9)
Specificarea constrângerilor
• Constrângerile atributelor și valori implicite
• NOT NULL
• trebuie specificat explicit atunci când se dorește ca un câmp să nu fie niciodată NULL
• Este implicit pentru atributele care fac parte din cheia primară
• Valoare implicită
• DEFAULT <valoare>
• Dacă nu se indică valoare implicită și nu se completează nimic, automat e NULL dacă este
permis; altfel returnează eroare
• Restricționarea valorii atributelor, domeniului: CHECK
Ex. Numerele apartamentelor pot fi numai de la 1 la 20
... Nr_apt INT NOT NULL CHECK (Nr_apt > 0 AND Nr_apt < 21);
Se poate folosi și la crearea domeniului:
CREATE DOMAIN D_Apt_nr AS INTEGER
CHECK (D_Nr_apt > 0 AND D_Nr_apt < 21);
SQL Server furnizează tipuri de date pentru șiruri de caractere, numerice, date și altele.
Pentru fiecare coloană se alege cel mai potrivit tip de dată și dimensiunea sa, în funcție
de aplicației.
În evaluarea expresiilor unele date se convertesc implicit, altele trebuie convertite
explicit. SQL Server furnizează funcții pentru conversia datelor.
4. Crearea și modificarea tabelelor
16
• Specificarea cheilor și constrângerilor de integritate referențială
(Clauze speciale în CREATE TABLE)
PRIMARY KEY – se specifică pentru toate atributele care fac parte din cheia primară
... Dnumber INT PRIMARY KEY;
... Dname VARCHAR(15) UNIQUE; - cheie alternativă (secundară); nu pot fi câmpuri
cu conținut identic
FOREIGN KEY – asigurarea integrității referențiale
Obs. SQL respinge actualizările care încalcă integritatea referențială, dar se poate specifica o
acțiune alternativă (SET NULL, CASCADE, SET DEFAULT) care să se întâmple la ON DELETE sau la
ON UPDATE
CREATE TABLE EMPLOYEE
(...
CONSTRAINT EMPSUPERFK
FOREIGN KEY(Super_ssn) REFERENCES EMPLOYEE (Ssn)
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT EMPDEPTFK
FOREIGN KEY(Dno) REFERENCES DEPARTMENT (Dnumber)
ON DELETE SET DEFAULT ON UPDATE CASCADE
);
• Punerea de nume constrângerilor – opțional; numele să fie unic în cadrul schemei
• Specificarea de constrângeri pe tupluri: CHECK – se specifică la sfârșitul instrucțiunii CREATE TABLE
CREATE TABLE DEPARTMENT
(...
CHECK (Dept_create_date <= Mgr_start_date);
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
5. Inserarea datelor
17
După un Refresh pe Tables observăm apariția fișierului corespunzător tabelei nou create: dbo.Customer.
Inserăm o înregistrare în tabelă folosind același script,
Tables.sql, creat anterior și lansăm execuția ei pentru
inserarea efectivă a liniei în tabel.
Inserăm o înregistrare explicitând valorile NULL și pe cele
considerate implicite (DEFAULTS).
Exemplificare
5. Inserarea datelor
18
Exemplificare – introducerea de date
Inserarea unei înregistrări prin specificarea
explicită a coloanelor care se completează,
precum și a valorilor lor.
Câmpurile corespunzătoare coloanelor
nespecificate vor lua valorile implicite, așa după
cum a fost specificat la crearea tabelei.
Tentativa de inserare a unei valori de câmp
invalide duce la eroare.
La definirea tabelei trebuie specificat explicit
dacă valoarea NULL este implicită pe anumite
câmpuri. Altfel, acest lucru depinde de setarea
SGBD folosit.
19
INSERT – comandă de inserare a datelor în tabele. Inserările se
fac înregistrare cu înregistrare (linie cu linie).
Pentru fiecare înregistrare valorile se dau în ordinea în care apar
coloanele în tabel.
Nu se specifică nicio valoare pentru coloana care este de tip
IDENTITY.
Putem să specificăm explicit coloanele care se
completează și cu ce valori. Ordinea indicării coloanelor
nu este importantă, dar trebuie să se coreleze cu ordinea
valorilor.
Nespecificarea valorilor pentru coloanele IDENTITY sau pentru
coloanele care au valori implicite va determina completarea cu
valoarea generată sau cu cea implicită (valoare efectivă sau
NULL).
Pentru orice alt tip de coloană, dacă nu se specifică nicio
valoare, apare eroare.
5. Inserarea datelor
Eroare la încercarea de inserare a unei înregistrări cu o valoare a
unui câmp necorespunzătoare (ca tip, sau forțare de NULL unde
nu este permis).
În acest caz nu se inserează niciun fel de date.
20
Vom crea o nouă tabelă (dbo.AccountManagers)
acordând atenție tipurilor de date asociate
coloanelor din tabelă.
Obs. DECIMAL(10,2) – număr cu 10 cifre dintre care
două sunt zecimale.
5. Inserarea datelor
6. Interogări pentru recuperarea de informații
21
Exemplificare – interogări de bază
Aflarea tuturor datelor din tabelă.
Selectarea anumitor câmpuri:
Filtrarea datelor:
Selectarea cu calculare a anumitor coloane și
definirea de noi coloane pe baza acestora:
22
Ordinea în care sunt indicate coloanele în cadrul SELECT
determină și ordinea în care acestea se obțin.
Pentru numele coloanelor se pot afișa (folosind AS) aliasuri
sugestive informațiilor dorite.
Se pot specifica și expresii care se doresc a fi calculate pentru
fiecare înregistrare.
6. Interogări pentru recuperarea de informații
WHERE – aflarea de informații din înregistrările care verifică o anumită condiție.
Mai multe detalii când se vor analiza tranzacțiile SQL (T-SQL).
Tipul datelor – exemplificare: operații, erori
23
6. Interogări pentru recuperarea de informații
7. Lucrul cu tabele multiple
24
Cele mai multe baze de date conțin mai multe tabele. Acesta este un rezultat direct al normalizării.
Se folosesc chei pentru a determina relațiile dintre înregistrările dintre diferite tabele:
• O cheie primară identifică o înregistrare unică în tabelă.
• O cheie externă (foreign key) referențiază înregistrarea din altă tabelă pe cheia principală.
Se pot defini constrângeri pe cheile externe pentru forțarea integrității referențiale: previne inserarea
de date invalide, se pot preveni și ștergerile sau actualizările de înregistrări „orfane”. (Dacă se șterge un
furnizor și sunt produse de la acel furnizor.)
25
Crearea de chei externe cu constrângeri
Folosim tabelele Customer și AccountManagers create anterior. Fiecare manager de conturi este
responsabil cu gestionarea unuia sau a mai multor clienți, și fiecărui client îi corespunde un manager de
conturi. Modificăm tabela Customer pentru a indica managerul de conturi care corespunde fiecărui
client.
Obs. Cu clic dreapta pe dbo.AccountManagers avem opțiunea lansării unui script care scoate 1000
înregistrări din tabelă:
7. Lucrul cu tabele multiple
26
Fiecare manager de conturi este identificat în mod unic prin EmployeeID. Fiecare client este identificat
în mod unic prin CustomerID. Alterăm tabela Customer prin adăugarea unei coloane care să facă
legătura clientului cu account managerul lui:
Obs. Se indică complet baza de date pe care se
lucrează la specificarea tabelei care urmează a
fi modificată sau se alege din drop list ca bază
de date pe care se lucrează (altfel, posibil să
apară eroare 4902 pentru că a fost făcută
conexiunea pe o altă bază).
7. Lucrul cu tabele multiple
27
Adăugarea unui nou client, cu valoare corespunzătoare pentru manager de cont:
Încercare de adăugare a unui nou client cu un manager de cont care nu există (i.e. nu există valoarea
indicată în EmployeeID din tabela AccountManagers). Instrucțiunea se încheie fără adăugarea clientului
deoarece avem constrângerea pe cheia externă:
Cu alte cuvinte, constrângerile definesc relații între cheile primare și cheile externe pentru asigurarea
integrității referințelor.
7. Lucrul cu tabele multiple
8. Introducere în vizualizări și proceduri
Pentru efectuarea de operații CRUD (Create, Read, Update, Delete), utilizatorul ar trebui să aibă
obiecte predefinite pe care să le apeleze ca atare și să obțină niște rapoarte care să permită o
vizualizare a finalității operațiilor realizate. Vom „înveli” operațiile CRUD prin crearea unor view-uri
fiecare cu un nume și pe care se face ulterior un select simplu (fără condiții) pentru aflarea datelor
corespunzătoare.
Creăm view-uri pentru că:
• nu este necesar ca utilizatorii să știe denumirile tuturor coloanelor tabelelor,
• nici să aibă acces direct la tabele și
• nici să știe cum să efectueze tranzacții SQL (T-SQL)
28
View-urile conțin SELECT-uri.
Procedurile conțin INSERT-uri, UPDATE-uri, DELETE-uri, SELECT-uri.
8. Introducere în vizualizări și proceduri
Creăm proceduri pentru că vrem să punem la un loc mai multe instrucțiuni care trebuie să
se execute împreună. În figura de mai jos este un pseudocod pentru a sugera cum ar
trebui să fie concepute procedurile pentru a îngloba tranzacții.
29
9. Optimizarea performanțelor bazelor de date
Introducere în indecși
Index – modalitate de organizare a informației. Pentru facilitarea căutării într-o tabelă
stocată pe HDD vom crea un index clusterizat.
30
• Paginile în care vor fi stocate datele se vor
organiza fizic în ordine dată de ProductID.
Pot fi avute în vedere mai multe câmpuri
după care să se facă indexarea.
• Poate fi câte un singur index clusterizat
pentru fiecare tabelă.
• O tabelă fără index clusterizat este un heap.
9. Optimizarea performanțelor bazelor de date
31
Crearea de index neclusterizat – conține o ordonare după căutările cele mai frecvente,
mai uzuale și care, la rândul lor, se bazează pe un index clusterizat. Un index
neclusterizat stochează pointeri către ID-ul rândurilor din heap, sau cheia clustrului
pentru un index clusterizat. Se pot crea mai multe indexări neclusterizate pentru
fiecare tabelă.
32
Bibliografie
1. Malcolm, Graeme and Randall, Chris. SQL Database Fundamentals. Microsoft
Virtual Academy. [Online] 01 27, 2017. https://mva.microsoft.com/en-us/training-
courses/sql-database-fundamentals-16944?l=aABdQoAID_305121157.
2. Elmasri, Ramez and Navathe, Shamkant B. Fundamnetals of Database Systems. 6.
s.l. : Addison-Wesley, 2011.
3. BlackWasp. SQL Programming Fundamentals. BlackWasp. [Online]
http://www.blackwasp.co.uk/SQLProgrammingFundamentals.aspx.
4. AdventureWorks Installation and configuration. SQL Server 2017. [Online] 06 19,
2018. https://docs.microsoft.com/en-us/sql/samples/adventureworks-install-
configure?view=sql-server-2017.
5. SQL Server 2017. Restore a Database Backup Using SSMS. [Online] 11 16, 2016.
https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a-
database-backup-using-ssms?view=sql-server-2017.
6. SQL Server 2017. Create and update database tables. [Online] 08 25, 2017.
https://docs.microsoft.com/en-us/sql/ssms/visual-db-tools/design-tables-visual-
database-tools?view=sql-server-2017.

More Related Content

Similar to BAZE_DE_DATE_SQL_de_baza.pdf

Baze+de+date
Baze+de+dateBaze+de+date
Baze+de+dateClaudia
 
Baze+de+date[2]
Baze+de+date[2]Baze+de+date[2]
Baze+de+date[2]Claudia
 
Modulul 5 access
Modulul 5   accessModulul 5   access
Modulul 5 access08alesa
 
Bigtable - sistem distribuit de stocare a datelor
Bigtable - sistem distribuit de stocare a datelorBigtable - sistem distribuit de stocare a datelor
Bigtable - sistem distribuit de stocare a datelorRemus Sinorchian
 
Baze de date si functii in excel asociate
Baze de date si functii in excel asociateBaze de date si functii in excel asociate
Baze de date si functii in excel asociateCristian-Mihai Pomohaci
 
Curs_modul1.doc
Curs_modul1.docCurs_modul1.doc
Curs_modul1.docRaluca34
 
Conectarea sgbd acces la surse de date externe
Conectarea sgbd acces la surse de date externeConectarea sgbd acces la surse de date externe
Conectarea sgbd acces la surse de date externepamiproject
 
Programare Web - Accesul la baze de date prin PHP
Programare Web - Accesul la baze de date prin PHPProgramare Web - Accesul la baze de date prin PHP
Programare Web - Accesul la baze de date prin PHPSabin Buraga
 
Fundamentele Limbajului Java
Fundamentele Limbajului JavaFundamentele Limbajului Java
Fundamentele Limbajului Javacolaru
 
Conectarea sgbd access din surse de date externe
Conectarea sgbd access din surse de date externeConectarea sgbd access din surse de date externe
Conectarea sgbd access din surse de date externecristiancteam
 
6 access 2003 partea a ii-a
6 access 2003   partea a ii-a6 access 2003   partea a ii-a
6 access 2003 partea a ii-aAnghel Cristina
 
ORM Definition, Active Records, Eloquent
ORM Definition, Active Records, EloquentORM Definition, Active Records, Eloquent
ORM Definition, Active Records, EloquentPascut Marius Rares
 
Ioan Eugen Stan - Introducere HBase
Ioan Eugen Stan -  Introducere HBaseIoan Eugen Stan -  Introducere HBase
Ioan Eugen Stan - Introducere HBaseAsociatia ProLinux
 
Baze date cap_2
Baze date cap_2Baze date cap_2
Baze date cap_2relu27
 

Similar to BAZE_DE_DATE_SQL_de_baza.pdf (16)

Baze+de+date
Baze+de+dateBaze+de+date
Baze+de+date
 
Baze+de+date[2]
Baze+de+date[2]Baze+de+date[2]
Baze+de+date[2]
 
Modulul 5 access
Modulul 5   accessModulul 5   access
Modulul 5 access
 
Crearea tabelelor
Crearea  tabelelorCrearea  tabelelor
Crearea tabelelor
 
Bigtable - sistem distribuit de stocare a datelor
Bigtable - sistem distribuit de stocare a datelorBigtable - sistem distribuit de stocare a datelor
Bigtable - sistem distribuit de stocare a datelor
 
Baze de date si functii in excel asociate
Baze de date si functii in excel asociateBaze de date si functii in excel asociate
Baze de date si functii in excel asociate
 
Curs_modul1.doc
Curs_modul1.docCurs_modul1.doc
Curs_modul1.doc
 
Conectarea sgbd acces la surse de date externe
Conectarea sgbd acces la surse de date externeConectarea sgbd acces la surse de date externe
Conectarea sgbd acces la surse de date externe
 
Programare Web - Accesul la baze de date prin PHP
Programare Web - Accesul la baze de date prin PHPProgramare Web - Accesul la baze de date prin PHP
Programare Web - Accesul la baze de date prin PHP
 
Fundamentele Limbajului Java
Fundamentele Limbajului JavaFundamentele Limbajului Java
Fundamentele Limbajului Java
 
Conectarea sgbd access din surse de date externe
Conectarea sgbd access din surse de date externeConectarea sgbd access din surse de date externe
Conectarea sgbd access din surse de date externe
 
6 access 2003 partea a ii-a
6 access 2003   partea a ii-a6 access 2003   partea a ii-a
6 access 2003 partea a ii-a
 
ORM Definition, Active Records, Eloquent
ORM Definition, Active Records, EloquentORM Definition, Active Records, Eloquent
ORM Definition, Active Records, Eloquent
 
Ioan Eugen Stan - Introducere HBase
Ioan Eugen Stan -  Introducere HBaseIoan Eugen Stan -  Introducere HBase
Ioan Eugen Stan - Introducere HBase
 
Baze date cap_2
Baze date cap_2Baze date cap_2
Baze date cap_2
 
Cap07
Cap07Cap07
Cap07
 

BAZE_DE_DATE_SQL_de_baza.pdf

  • 1. BAZE DE DATE SQL de bază
  • 2. 2 1. Etape ale implementării bazelor de date 2. Concepția bazei de date. Normalizări 3. Crearea și configurarea unei baze de date relaționale 4. Crearea și modificarea tabelelor 5. Inserarea datelor 6. Interogări pentru recuperarea de informații 7. Lucrul cu tabele multiple 8. Introducere în vizualizări și proceduri
  • 3. 1. Etape ale implementării bazelor de date Definiții de bază Catalog SQL = colecție de scheme, într-un mediu SQL, căreia i se atribuie un nume. Mediu SQL = instalarea unui SGBD de tip SQL pe un sistem de tip computer. Elementele schemei bazei de date = tabele, constrîngeri, view-uri, domenii, alte elemente de constituire a schemei (ex. granturi de autorizare). O schemă SQL se identifică prin nume și conține un identificator de autorizare (utilizatorul sau contul care deține schema), descriptori ai fiecărui element din schemă. Privilegiile de creare de scheme, tabele sau alți constructori trebuie atribuite explicit unui utilizator relevant de către administratorul de sistem sau de către administratorul bazei de date. Crearea unei scheme se face cu comanda CREATE SCHEMA și poate să includă definirile tuturor elementelor schemei. Minimal, la creare se atribuie numele schemei și identificatorul de autorizare, urmând ca celelalte elemente să fie definite ulterior. Ex. CREATE SCHEMA COMPANY AUTHORIZATION ‘Popescu’; Etape ale implementării bazelor de date • Culegerea de date, analiza lor, a tipurilor de utilizatori, volumul datelor, elemente de securizare • Stabilirea configurației bazei de date, normalizări • Implementarea bazei de date – Alegere, instalare mediu de lucru – Creare și configurare folosind un SGBD – Popularea bazei de date – Crearea de script-uri cu interogări, view-uri, tranzacții (ștergeri de date, actualizări, interogări complexe) 3
  • 4. 2. Concepția bazei de date. Normalizări O bază de date este folosită pentru stocarea datelor în tabele. Pentru a forma o schemă relațională, tabelele trec printr-un proces de normalizare. Abia apoi se descrie schema bazei într-un sistem de gestionare de baze de date și se stochează pe HDDul unui sistem, pe un mediu de stocare (ex. SQL Server). Normalizarea datelor Prima formă normală O celulă să nu conțină mai multe valori. 4
  • 5. 2. Concepția bazei de date. Normalizări 5 A doua formă normală - rezolvă redundanța datelor: • câte un tabel pentru fiecare dată care apare redundant și • identificatori unici pe tabele (valoarea identifică în mod unic o înregistrare din tabelul respectiv) și, la nevoie, • crearea de tabele de joncțiune (en. join) pentru situațiiile în care sunt înregistrări diferite datorate unui câmp care putea face diferențierea de două înregistrări diferite. (Ceea ce a determinat prima normalizare.) A treia formă normală Alegerea și definirea cheilor a.î. •toate coloanele dintr-o tabelă să depindă de cheia primară a tabelei. •cheile externe să lege tabelele între ele.
  • 6. 3. Crearea și configurarea unei baze de date relaționale folosind SQL Server 2017 Developer și SSMS (SQL Server Management System) 1. În Object Explorer, conectare la instanțierea unui SQL Server Database Engine și expandarea acesteia. 6 2. Clic dreapta pe Databases și clic pe New Database. 3. În New Database se dă numele bazei de date (aici: MVAFundamentalsDemo). 4. Pentru crearea bazei de date cu acceptarea valorilor implicite, clic OK. Crearea bazei de date determină crearea a două fișiere: .mdf (fișier de date) și .ldf (pentru logurile tranzacțiilor). Dimensiunea și granularitatea de creștere a acestora poate fi stbilită aici. Restul instrucțiunilor de după CREATE DATABASE ... GO, sunt setări de care baza de date are nevoie la creare.
  • 7. 3. Crearea și configurarea unei baze de date relaționale Crearea și configurarea unei baze de date relaționale folosind SQL Server 2017 Developer și SSMS (SQL Server Management System) Pentru baza de date existentă creăm un script pe care îl deschidem într-o fereastră nouă. 7
  • 8. Pentru schema existentă creăm un script pe care îl deschidem într-o fereastră nouă. • Creăm baza de date locală: MVADemoLocalDB. • Modificăm dimensiunea inițială a fișierului de date la 500 MB și a celui de log la 100 MB • S-a creat structura de foldere. • Modific locul în care se stochează fișierele corespunzătoare. Observăm la nivelul scriptului modificările anterioare: CREATE DATABASE [MVADemoLocalDB] CONTAINMENT = NONE ON PRIMARY ( NAME = N'MVADemoLocalDB', FILENAME = N'C:SQLDataDataMVADemoLocalDB.mdf' , SIZE = 12000KB , FILEGROWTH = 65536KB ) LOG ON ( NAME = N'MVADemoLocalDB_log', FILENAME = N'C:SQLDataLogsMVADemoLocalDB_log.ldf' , SIZE = 102400KB , FILEGROWTH = 65536KB ) GO 8 3. Crearea și configurarea unei baze de date relaționale
  • 9. 4. Crearea și modificarea tabelelor 9 Exemplificare Creăm tabela Customer în schema dbo (namespace-ul în care se creează tabelele bazei de date): Se poate face direct în SSMS cu clic dreapta pe Tables corespunzător bazei de date dorite, și indicarea coloanelor și a proprietăților acestora. O altă variantă este de creare a unui script .sql și scrierea comenzii propriuzise, ca în figura de mai jos. Într-un script SQL, selectând o anume comandă și dând Execute se va executa doar aceasta. Am făcut acest lucru pentru comanda CREATE descrisă anterior. Rezultatul e în fereastra de Messages.
  • 10. Crearea tabelelor – comenzi definite în DDL (Data Definition Language) CREATE TABLE – crearea unei tabele (fără niciun fel de date în ea) prin specificarea numelui tabelei și a specificațiilor coloanelor. Coloana de tip IDENTITY își incrementează în mod automat valoarea. Se explicitează astfel că aceasta este și coloana cu rol de PRIMARY KEY. Aceasta este coloana care identifică în mod unic în cadrul tabelei fiecare regulă. Într-o tabelă poate să fie o singură coloană cu proprietatea de identitate. De asemenea, o singură cheie primară poate să exite în cadrul unei tabele, formată din una sau mai multe coloane (mai multe coloane într-o cheie = cheie multiplă). 10 VARCHAR – varying with characters = valoarea este un șir de caractere. Dimensiunea indică numărul maxim de caractere pe care le poate avea un câmp al acestei coloane. NULL – într-o coloană de tip DECIMAL permite ca acel câmp să ia valoare NULL, implicit (semnificație: nu se cunoaște valoarea reală pentru câmpul respectiv sau nu există valoare pentru acel câmp pentru înregistrarea respectivă). 4. Crearea și modificarea tabelelor
  • 11. ALTER TABLE - comandă pentru modificarea definirii unei tabele deja create (adăugarea sau ștergerea de coloane, constrângeri, chei) 11 CONSTRAINT - adăugarea de reguli specifice fiecărei coloane. DROP TABLE - renunțarea la o tabelă (scoaterea ei din baza de date). Atenție! Ștergerea unei tabele din baza de date determină și pierderea datelor din acea tabelă. Eventuala recuperare a tabelei șterse este posibilă numai dacă există backup-uri ale acesteia , se face cu costurile aferente de timp și pe baza datelor corespunzătoare backup-ului respectiv. 4. Crearea și modificarea tabelelor
  • 12. 4. Crearea și modificarea tabelelor CREATE TABLE – comandă pentru a specifica o nouă tabelă (relație); ⁻ Se specifică numele tabelei, numele atributelor, tipurile de date cu domeniile de valori. ⁻ Diferite constrângeri (chei, integritatea entităților, constrângeri referențiale) pot fi specificate la definirea tabelei sau pot fi adăugate ulterior. ALTER TABLE – comandă pentru efectuarea de modificări la nivelul tabelelor (adăugarea de chei, integrități, constrângeri referențiale) Cheie primară – atribut(e) a cărui valoare identifică în mod unic un tuplu într-o relație. Constrângeri pentru integritatea entității – cheia primară nu poate lua valoarea NULL. Constrângeri de integritate referențială – se specifică între două relații pentru a menține consistența tuplurilor din cele două relații. Tabelele aparțin schemei în care au fost declarate. CREATE TABLE COMPANY.EMPLOYEE... Tabele de bază – CREATE TABLE; există fizic, ca fișiere în SGBD Tabele virtuale – CREATE VIEW; corespund sau nu unui fișier fizic 12 SQL Model relațional Tabelă Relație Linie Tuplu Coloană Atribut Tipuri de date de bază: • Numeric: întreg (INTEGER sau INT, SMALLINT), real (FLOAT sau REAL, DOUBLE PRECISION), numere formatate (DECIMAL(i,j) sau DEC(i,j), NUMERIC (i,j), i=nr. total de cifre, j=nr cifre după virgulă
  • 13. 4. Crearea și modificarea tabelelor 13 Tipuri de date de bază: • Numeric: • Întreg: INTEGER sau INT, SMALLINT • Real: FLOAT sau REAL, DOUBLE PRECISION • numere formatate: DECIMAL(i,j), DEC(i,j), NUMERIC (i,j), i=nr. total de cifre, j=nr cifre după virgulă • Șir de caractere: • cu lungime fixă: CHAR(n), CHARACTER(n) – ex. numerele de telefon • cu lungime variabilă: VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n) - ex. adresa de email • Se pun între ‘ ‘ • Se face diferența între litere mari și mici • Compararea pe șiruri se face lexicografic • || operator de concatenare • CHARACTER LARGE OBJECT – pentru coloane ce conțin mult text (documente) – dimensiunea maximă se specifică în bytes: CLOB(20M) - dpv tehnic, acestea nu se stochează propriu-zis în tabelă ci sunt doar pointeri către documentele propriu-zise • valori Unicode: LastName (Obs. N și apostrof în fața unui tip de date indică faptul că este un șir de caractere care nu este neapărat ASCII)
  • 14. 4. Crearea și modificarea tabelelor 14 Tipuri de date de bază: • Șir de biți: • Lungime fixă BIT(n) sau variabilă BIT VARYING(n) • B’10110’ • BINARY LARGE OBJECT (BLOB) – pentru imagini: BLOB(30M) • Boolean: TRUE, FALSE, UNKNOWN • Dată: Sunt permise numai date și timpi valizi • DATE cu YEAR, MONTH, DAY în 10 poziții, forma: YYYY-MM-DD • TIME cu HOUR, MINUTE, SECOND min 8 poziții, forma HH:MM:SS • TIME(i) – i = precizia în fracțiuni de secundă • TIME WITH TIME ZONE • 6 poziții suplimentare pt deplasarea față de UTZ • Implicit – timpul local corespunzător sesiunii SQL Tipuri suplimentare de date: • Timestamp: TIMESTAMP – conține DATE și TIME + min 6 poziții pt fracțiuni de secundă, opțional WITH TIME ZONE (valoare întreagă, de regulă obținută din sistem) • Interval: YEAR/MONTH, DAY/TIME • Identificator unic (GUID – Global Unique Identifier): StockID • XML: Spec • Spațiale (coordonate, forme geometrice): Location
  • 15. 4. Crearea și modificarea tabelelor 15 Domenii – cu nume create pt modificarea caracteristicilor mai ușor CREATE DOMAIN SSN_TYPE AS CHAR(9) Specificarea constrângerilor • Constrângerile atributelor și valori implicite • NOT NULL • trebuie specificat explicit atunci când se dorește ca un câmp să nu fie niciodată NULL • Este implicit pentru atributele care fac parte din cheia primară • Valoare implicită • DEFAULT <valoare> • Dacă nu se indică valoare implicită și nu se completează nimic, automat e NULL dacă este permis; altfel returnează eroare • Restricționarea valorii atributelor, domeniului: CHECK Ex. Numerele apartamentelor pot fi numai de la 1 la 20 ... Nr_apt INT NOT NULL CHECK (Nr_apt > 0 AND Nr_apt < 21); Se poate folosi și la crearea domeniului: CREATE DOMAIN D_Apt_nr AS INTEGER CHECK (D_Nr_apt > 0 AND D_Nr_apt < 21); SQL Server furnizează tipuri de date pentru șiruri de caractere, numerice, date și altele. Pentru fiecare coloană se alege cel mai potrivit tip de dată și dimensiunea sa, în funcție de aplicației. În evaluarea expresiilor unele date se convertesc implicit, altele trebuie convertite explicit. SQL Server furnizează funcții pentru conversia datelor.
  • 16. 4. Crearea și modificarea tabelelor 16 • Specificarea cheilor și constrângerilor de integritate referențială (Clauze speciale în CREATE TABLE) PRIMARY KEY – se specifică pentru toate atributele care fac parte din cheia primară ... Dnumber INT PRIMARY KEY; ... Dname VARCHAR(15) UNIQUE; - cheie alternativă (secundară); nu pot fi câmpuri cu conținut identic FOREIGN KEY – asigurarea integrității referențiale Obs. SQL respinge actualizările care încalcă integritatea referențială, dar se poate specifica o acțiune alternativă (SET NULL, CASCADE, SET DEFAULT) care să se întâmple la ON DELETE sau la ON UPDATE CREATE TABLE EMPLOYEE (... CONSTRAINT EMPSUPERFK FOREIGN KEY(Super_ssn) REFERENCES EMPLOYEE (Ssn) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT EMPDEPTFK FOREIGN KEY(Dno) REFERENCES DEPARTMENT (Dnumber) ON DELETE SET DEFAULT ON UPDATE CASCADE ); • Punerea de nume constrângerilor – opțional; numele să fie unic în cadrul schemei • Specificarea de constrângeri pe tupluri: CHECK – se specifică la sfârșitul instrucțiunii CREATE TABLE CREATE TABLE DEPARTMENT (... CHECK (Dept_create_date <= Mgr_start_date); ALTER TABLE Persons ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
  • 17. 5. Inserarea datelor 17 După un Refresh pe Tables observăm apariția fișierului corespunzător tabelei nou create: dbo.Customer. Inserăm o înregistrare în tabelă folosind același script, Tables.sql, creat anterior și lansăm execuția ei pentru inserarea efectivă a liniei în tabel. Inserăm o înregistrare explicitând valorile NULL și pe cele considerate implicite (DEFAULTS). Exemplificare
  • 18. 5. Inserarea datelor 18 Exemplificare – introducerea de date Inserarea unei înregistrări prin specificarea explicită a coloanelor care se completează, precum și a valorilor lor. Câmpurile corespunzătoare coloanelor nespecificate vor lua valorile implicite, așa după cum a fost specificat la crearea tabelei. Tentativa de inserare a unei valori de câmp invalide duce la eroare. La definirea tabelei trebuie specificat explicit dacă valoarea NULL este implicită pe anumite câmpuri. Altfel, acest lucru depinde de setarea SGBD folosit.
  • 19. 19 INSERT – comandă de inserare a datelor în tabele. Inserările se fac înregistrare cu înregistrare (linie cu linie). Pentru fiecare înregistrare valorile se dau în ordinea în care apar coloanele în tabel. Nu se specifică nicio valoare pentru coloana care este de tip IDENTITY. Putem să specificăm explicit coloanele care se completează și cu ce valori. Ordinea indicării coloanelor nu este importantă, dar trebuie să se coreleze cu ordinea valorilor. Nespecificarea valorilor pentru coloanele IDENTITY sau pentru coloanele care au valori implicite va determina completarea cu valoarea generată sau cu cea implicită (valoare efectivă sau NULL). Pentru orice alt tip de coloană, dacă nu se specifică nicio valoare, apare eroare. 5. Inserarea datelor Eroare la încercarea de inserare a unei înregistrări cu o valoare a unui câmp necorespunzătoare (ca tip, sau forțare de NULL unde nu este permis). În acest caz nu se inserează niciun fel de date.
  • 20. 20 Vom crea o nouă tabelă (dbo.AccountManagers) acordând atenție tipurilor de date asociate coloanelor din tabelă. Obs. DECIMAL(10,2) – număr cu 10 cifre dintre care două sunt zecimale. 5. Inserarea datelor
  • 21. 6. Interogări pentru recuperarea de informații 21 Exemplificare – interogări de bază Aflarea tuturor datelor din tabelă. Selectarea anumitor câmpuri: Filtrarea datelor: Selectarea cu calculare a anumitor coloane și definirea de noi coloane pe baza acestora:
  • 22. 22 Ordinea în care sunt indicate coloanele în cadrul SELECT determină și ordinea în care acestea se obțin. Pentru numele coloanelor se pot afișa (folosind AS) aliasuri sugestive informațiilor dorite. Se pot specifica și expresii care se doresc a fi calculate pentru fiecare înregistrare. 6. Interogări pentru recuperarea de informații WHERE – aflarea de informații din înregistrările care verifică o anumită condiție. Mai multe detalii când se vor analiza tranzacțiile SQL (T-SQL).
  • 23. Tipul datelor – exemplificare: operații, erori 23 6. Interogări pentru recuperarea de informații
  • 24. 7. Lucrul cu tabele multiple 24 Cele mai multe baze de date conțin mai multe tabele. Acesta este un rezultat direct al normalizării. Se folosesc chei pentru a determina relațiile dintre înregistrările dintre diferite tabele: • O cheie primară identifică o înregistrare unică în tabelă. • O cheie externă (foreign key) referențiază înregistrarea din altă tabelă pe cheia principală. Se pot defini constrângeri pe cheile externe pentru forțarea integrității referențiale: previne inserarea de date invalide, se pot preveni și ștergerile sau actualizările de înregistrări „orfane”. (Dacă se șterge un furnizor și sunt produse de la acel furnizor.)
  • 25. 25 Crearea de chei externe cu constrângeri Folosim tabelele Customer și AccountManagers create anterior. Fiecare manager de conturi este responsabil cu gestionarea unuia sau a mai multor clienți, și fiecărui client îi corespunde un manager de conturi. Modificăm tabela Customer pentru a indica managerul de conturi care corespunde fiecărui client. Obs. Cu clic dreapta pe dbo.AccountManagers avem opțiunea lansării unui script care scoate 1000 înregistrări din tabelă: 7. Lucrul cu tabele multiple
  • 26. 26 Fiecare manager de conturi este identificat în mod unic prin EmployeeID. Fiecare client este identificat în mod unic prin CustomerID. Alterăm tabela Customer prin adăugarea unei coloane care să facă legătura clientului cu account managerul lui: Obs. Se indică complet baza de date pe care se lucrează la specificarea tabelei care urmează a fi modificată sau se alege din drop list ca bază de date pe care se lucrează (altfel, posibil să apară eroare 4902 pentru că a fost făcută conexiunea pe o altă bază). 7. Lucrul cu tabele multiple
  • 27. 27 Adăugarea unui nou client, cu valoare corespunzătoare pentru manager de cont: Încercare de adăugare a unui nou client cu un manager de cont care nu există (i.e. nu există valoarea indicată în EmployeeID din tabela AccountManagers). Instrucțiunea se încheie fără adăugarea clientului deoarece avem constrângerea pe cheia externă: Cu alte cuvinte, constrângerile definesc relații între cheile primare și cheile externe pentru asigurarea integrității referințelor. 7. Lucrul cu tabele multiple
  • 28. 8. Introducere în vizualizări și proceduri Pentru efectuarea de operații CRUD (Create, Read, Update, Delete), utilizatorul ar trebui să aibă obiecte predefinite pe care să le apeleze ca atare și să obțină niște rapoarte care să permită o vizualizare a finalității operațiilor realizate. Vom „înveli” operațiile CRUD prin crearea unor view-uri fiecare cu un nume și pe care se face ulterior un select simplu (fără condiții) pentru aflarea datelor corespunzătoare. Creăm view-uri pentru că: • nu este necesar ca utilizatorii să știe denumirile tuturor coloanelor tabelelor, • nici să aibă acces direct la tabele și • nici să știe cum să efectueze tranzacții SQL (T-SQL) 28 View-urile conțin SELECT-uri. Procedurile conțin INSERT-uri, UPDATE-uri, DELETE-uri, SELECT-uri.
  • 29. 8. Introducere în vizualizări și proceduri Creăm proceduri pentru că vrem să punem la un loc mai multe instrucțiuni care trebuie să se execute împreună. În figura de mai jos este un pseudocod pentru a sugera cum ar trebui să fie concepute procedurile pentru a îngloba tranzacții. 29
  • 30. 9. Optimizarea performanțelor bazelor de date Introducere în indecși Index – modalitate de organizare a informației. Pentru facilitarea căutării într-o tabelă stocată pe HDD vom crea un index clusterizat. 30 • Paginile în care vor fi stocate datele se vor organiza fizic în ordine dată de ProductID. Pot fi avute în vedere mai multe câmpuri după care să se facă indexarea. • Poate fi câte un singur index clusterizat pentru fiecare tabelă. • O tabelă fără index clusterizat este un heap.
  • 31. 9. Optimizarea performanțelor bazelor de date 31 Crearea de index neclusterizat – conține o ordonare după căutările cele mai frecvente, mai uzuale și care, la rândul lor, se bazează pe un index clusterizat. Un index neclusterizat stochează pointeri către ID-ul rândurilor din heap, sau cheia clustrului pentru un index clusterizat. Se pot crea mai multe indexări neclusterizate pentru fiecare tabelă.
  • 32. 32 Bibliografie 1. Malcolm, Graeme and Randall, Chris. SQL Database Fundamentals. Microsoft Virtual Academy. [Online] 01 27, 2017. https://mva.microsoft.com/en-us/training- courses/sql-database-fundamentals-16944?l=aABdQoAID_305121157. 2. Elmasri, Ramez and Navathe, Shamkant B. Fundamnetals of Database Systems. 6. s.l. : Addison-Wesley, 2011. 3. BlackWasp. SQL Programming Fundamentals. BlackWasp. [Online] http://www.blackwasp.co.uk/SQLProgrammingFundamentals.aspx. 4. AdventureWorks Installation and configuration. SQL Server 2017. [Online] 06 19, 2018. https://docs.microsoft.com/en-us/sql/samples/adventureworks-install- configure?view=sql-server-2017. 5. SQL Server 2017. Restore a Database Backup Using SSMS. [Online] 11 16, 2016. https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a- database-backup-using-ssms?view=sql-server-2017. 6. SQL Server 2017. Create and update database tables. [Online] 08 25, 2017. https://docs.microsoft.com/en-us/sql/ssms/visual-db-tools/design-tables-visual- database-tools?view=sql-server-2017.