Publicidad
Publicidad

Más contenido relacionado

Publicidad

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