Documente Academic
Documente Profesional
Documente Cultură
Victor BUCATĂ
2 Decembrie 2019
Partea I
1 Concepte fundamentale
5 Valori nule
6 Normalizarea datelor
Obiectivele acestei părt, i
I Prezentarea conceptelor fundamentale s, i a terminologiei
modelului relat, ional (introdus de E.F. Codd de la IBM în 1970).
I Înt, elegerea modului în care relat, iile sunt diferite fat, ă de tabelele
nerelat, ionale.
I Înt, elegerea semnificat, iei s, i a important, ei cheilor, ale cheilor străine
s, i ale conceptelor corelate.
I Înt, elegerea modului în care cheile străine construiesc relat, ionările
(asocierile).
I Prezentarea scopului s, i folosirii cheilor surogat.
I Înt, elegerea semnificat, iei dependent, elor funct, ionale.
I Prezentarea procesului de normalizare a relat, iilor.
Ce este o entitate?
I O entitate este un aspect important pentru un utilizator sau pentru
o organizat, ie s, i care trebuie să fie reprezentat într-o bază de date.
I O entitate este reprezentată de o temă, de un subiect sau de un
concept organizat, ional. De exemplu: Clienti, Comenzi, Carti,
Proiecte etc.
I Exemplu:
Ce este o relat, ie?
I O relat, ie este un tabel bidimensional care are nis, te caracteristici
speciale (pe slideul următor).
I Dimensiunile tabelului, la fel ca în cazul unei matrice constau din
rânduri s, i coloane.
Contraexemplu:
Clasificarea cheilor:
Cheile compuse - exemplu
I O cheie compusă este o cheie care este compusă din două sau
mai multe atribute.
I Se combină una sau mai multe coloane pentru a obt, ine unicitatea.
I Adesea, pentru ca o cheie să fie unică, ea trebuie să fie compusă.
Cheile compuse - exemplu
I Ilustrăm acest concept cu un exemplu din viat, a reală: presupunem
că dorim să mergem cu un tren pe ruta Bucures, ti - Craiova într-o
anumită dată.
I Un tren cu un anumit număr nu circulă decât o dată pe zi pe ruta
respectivă.
I Pentru a identifica o călătorie specifică trebuie să combinăm
numărul trenului cu data călătoriei. Această combinat, ie
reprezintă o cheie compusă.
Cheile candidat:
I O cheie „candidat” este denumită astfel deoarece poate deveni
cheie primară.
I O cheie candidat este o cheie unică.
Cheile primare:
I O cheie primară este o cheie candidat aleasă drept cheia principală
a relat, iei.
I Dacă este cunoscută valoarea cheii primare, atunci orice
înregistrare din tabel poate fi identificată în mod unic.
Cheile surogat
I O cheie surogat este o valoare numerică unică care este adăugată
relat, iei pentru a servi drept cheie primară.
I Valorile cheilor surogat nu au nicio semnificat, ie pentru utilizatori s, i
sunt de obicei ascunse pe formulare, interogări s, i rapoarte.
I Adesea o cheie surogat este folosită în locul unei chei primare
compuse.
Relat, ionările (asocierile) dintre tabele
I Un tabel poate fi relat, ionat cu alte tabele.
I Vom introduce conceptul de cheie străină.
I Exemple:
I Un Angajat lucrează într-un Departament.
I Un Director controlează un Proiect.
, dar dacă:
, dar dacă:
Dependent, ele part, iale au fost eliminate dar există încă dependent, e
tranzitive în tabelul ComenzileClientilor.
A treia formă normală
I Include a doua formă normală PLUS „nu trebuie să existe
dependent, e funct, ionale de atributele care nu sunt chei
primare”.
I Astfel de dependent, e sunt denumite tranzitive deoarece cheia
primară determină un alt atribut care la rândul lui determină un alt
atribut.
I Solut, ie: Determinant, ii care nu sunt chei cu dependent, e tranzitive se
trec într-un tabel nou; determinantul repectiv devine cheie primară
în noul tabel s, i rămâne cheie străină în vechiul tabel.
Eliminarea dependent, elor tranzitive
Limbajul SQL
Cuprins Partea a II-a
1 Ce este SQL?
2 Istoricul SQL
3 Sisteme SQL
5 Concluzii
Ce este SQL?
I Structured Query Language (Limbaj structurat de interogare).
I limbaj standard folosit pentru gestiunea bazei de date, pentru
comunicarea cu ea.
I pronunţare: es-q-l sau precum cuvântul englezesc "sequel".
I limbaj neprocedural, declarativ (un limbaj procedural foloseşte o
serie de instrucţiuni executate secvenţial).
I se spune calculatorului ce rezultate se doresc fără a spune cum se
obţin.
I SQL este adesea folosit în combinaţie cu un limbaj procedural sau
orientat spre obiecte (ex: MySQL+PHP).
Istoric al limbajului SQL
I Sfârşitul anilor ’70 - cercetători de la IBM dezvoltă System/R bazat
pe lucrările Dr. E. F. Codd.
I Oracle dezvoltă Relational Software.
I Relational Technology dezvoltă Ingres.
I 1982 - IBM SQL/DS.
I standardizări (utile pentru portabilitate):
I 1986 - standardul ANSI
I 1987 - standardul ISO
I 1989 - standardul SQL-89
I 2016 - ultimul standard
I Oracle Database 19c - ultima versiune stabilă: 13 februarie 2019
Structura unui sistem SQL
I Structură de tip client/server
Sisteme SQL
I Clienţi în linia de comandă
I Clienţi cu interfaţă grafică
I Clienţi interfaţă bazată pe web
Sisteme SQL:
I Access: produs de Microsoft, nu are client SQL; clientul, interfaţa şi
motorul pe acelaşi calculator
I SQL Server: produs de Microsoft, clientul (iSQL sau Query
Analyzer) rulează ca aplicaţie în linia de comandă într-un nucleu de
comenzi Microsoft Windows
I MySQL: sub licenţă liberă (locul 2 în clasamentul SGBDR gratuite
ca utilizare) cumpărat în 2010 de Oracle prin achiziţia Sun
Microsystems care la rândul ei l-a cumpărat de la o firmă suedeză.
Client în linia de comandă sub diferite sisteme de operare
I Oracle: clienţi iSQL*Plus, SQL*Plus, SQL Worksheet
I Sybase: client iSQL
Convenţii de sintaxă SQL
I Mai departe vom folosi termenul de tabel în loc de termenul relat, ie
I Fiecare instrucţiune începe cu o comandă, de obicei sub forma
unui singur cuvânt
I Fiecare instrucţiune se termină cu punct şi virgulă (;)
I O instrucţiune se poate scrie pe mai multe linii
I Instrucţiunile sunt organizate într-o serie de clauze care trebuie să
apară într-o anumită ordine
I Nu se face diferenţa între majuscule şi minuscule - case-insensitive
(cu excepţia numelor de tabele)
I Virgulele sunt folosite pentru separarea articolelor dintr-o listă
Convenţii de sintaxă SQL (continuare)
I Şirurile de caractere se pun între ghilimele
I Numele obiectelor bazei de date sunt formate numai din litere, cifre
şi liniuţe de subliniere
I Există un set de cuvinte rezervate
I Un comentariu pe o singură linie începe cu două liniuţe de
despărţire s, i apoi spat, iu (−− )
I Un comentariu pe mai multe linii se include între /* şi */
Categorii de instrucţiuni SQL
I Limbajul de definire a datelor (DDL - Data Definition Language):
CREATE, ALTER, DROP
I Limbajul de interogare a datelor (DQL - Data Query Language):
SELECT
I Limbajul de manipulare a datelor (DML - Data Manipulation
Language): INSERT, UPDATE, DELETE
I Limbajul pentru controlul datelor (DCL - Data Control Language):
GRANT, ALTER
I Comenzile pentru controlul tranzacţiilor (Transaction Control
Commands)
Crearea şi manipularea tabelelor
Dorim să creăm un tabel cu numele STUDENTI care pe lângă cheia
primară id să cont, ină s, i nume, prenume, grupa, varsta s, i număr de
restant, e, ca în figura de mai jos:
Crearea şi manipularea tabelelor
Se foloseşte instrucţiunea CREATE TABLE:
I numele noului tabel
I numele şi definiţiile coloanelor separate prin virgule
I precizarea constrângerii cheie primară
I după ultimul rând din tabel nu se pune virgulă
Exemplu:
CREATE TABLE Studenti(
id int auto_increment not null,
nume_student varchar(20),
prenume_student varchar(20),
grupa varchar(5),
varsta smallint,
restante smallint,
PRIMARY KEY(id)
);
Crearea şi manipularea tabelelor
Pentru a vedea structura tabelului creat anterior folosim comanda
DESCRIBE Studenti;
Chei primare
sau:
ALTER TABLE Angajati
ADD CONSTRAINT PRIMARY KEY (id_angajati);
Chei externe (străine)
sau:
ALTER TABLE Angajati
ADD CONSTRAINT
FOREIGN KEY (id_functie)
REFERENCES Posturi(id_posturi);
Actualizarea definiţiilor tabelelor - instrucţiunile ALTER şi
DROP
Modificarea tabelelor:
ALTER TABLE Angajati
ADD email_ang VARCHAR(25);
sau:
ALTER TABLE Angajati
DROP COLUMN spor_noapte;
Ştergerea tabelelor:
DROP TABLE AngajatiCopie;
Inserarea datelor - instrucţiunea INSERT
I pentru a insera o singură înregistrare completă
I pentru a insera o singură înregistrare parţială
I pentru a insera rezultatele unei interogări
Exemple:
INSERT INTO Angajati
VALUES ("Cristea", "Dan", "Str. Uverturii,
nr.22", NULL, 23, NULL);
sau:
INSERT INTO Angajati (nume_ang, prenume_ang,
adresa_ang, tel_ang, varsta_ang, id_functie)
VALUES ("Cristea", "Dan",
"Str. Uverturii, nr.22", NULL, 23, NULL);
Actualizarea şi ştergerea datelor - instrucţiunile UPDATE şi
DELETE
Se foloseşte instrucţiunea UPDATE, formată din trei componente:
I tabelul care urmează a fi actualizat
I numele coloanelor şi noile valori ale acestora
I condiţia de filtrare care determină înregistrările ce urmează a fi
actualizate
Pentru a şterge date (înregistrări) dintr-un tabel se foloseşte instrucţiunea
DELETE. Exemplu:
DELETE FROM Angajati
WHERE id_angajati=8;
UPDATE Angajati
SET tel_ang = "07112233"
WHERE id_angajati = 7;
Instrucţiunea SELECT
Regăsirea datelor - Instrucţiunea SELECT (face parte din categoria DQL
- Data Query Language)
I SELECT este instrucţiunea SQL cea mai folosită.
I e nevoie de două informaţii: ce se selectează + de unde se
selectează
Exemplul 1 - selectarea unei coloane
SELECT nume_student
FROM Studenti;
Exemplul 2 - selectarea mai multor coloane
SELECT nume_student,
2018-varsta AS "AN NASTERE"
FROM Studenti;
Funcţii pentru manipularea datelor
I funcţii pentru manipularea şirurilor de caractere (eliminarea sau
completarea cu valori, conversia în majuscule sau minuscule)
I LENGTH()
I LOWER()
I UPPER()
I RTRIM() - elimină spaţiile albe de la dreapta şirului
I pentru operaţii matematice
I ABS()
I COS()
I EXP()
I PI()
I SQRT()
I de tip dată şi oră
I funcţii de sistem
Exemplul 19 - funcţii pentru manipularea datelor
SELECT COUNT(nume_student)
AS Numarul_studentilor
FROM Studenti;
Exemplul 23 - funcţia MAX()