Curs 2.

Modelul relaţional de organizare a bazelor de date
• • • • Relaţie: schema, cheie (primară, secundară) Restricţii de integritate Baze de date relaţionale Gestiunea bazelor de date relaţionale

Intr-o aplicaţie o colecţie de date se foloseşte conform unui model de organizare In "modelul relaţional" colecţia de date este organizată ca o mulţime de relaţii (tabele) Exemplu de relaţie: atribute (coloane, nume de data) NUME Pop Ioan Barbu Ana Dan Radu linii (inregistrari, tupluri) ANUL_DE_STUDIU ANUL_NASTERII 2 1979 1 1981 3 1980

. amj ... . n. Relaţia R poate fi considerată ca o mulţime de vectori cu câte n valori.. .. rm A1 a11 . A2. etc. × Dn .. .... An o mulţime de atribute D i = Dom(A i ) ∪ {?} domeniul valorilor posibile pentru atributul Ai.. câte o valoare pentru fiecare din atributele Ai.. .......... Valoarea de nedefinit se foloseşte pentru a verifica dacă unui atribut i s-a atribuit o valoare sau el nu are valoare (sau are valoarea “nedefinit”). ai1 ... R[A1 .. .... Această valoare nu are un anumit tip de dată. ain . i = 1.. j = 1.. Relaţia se poate memora printr-un tabel de forma: R r1 .. ... A2 . ..... şiruri de caractere.. ri . se pot compara cu această valoare atribute de diferite tipuri (numerice...).... m.... An a1n . An ] este schema relaţiei. .. . Ai a1j .• • A1. .. unde prin “?” s-a notat valoarea de “nedefinit” (null). ... am1 . . aij ...... Relaţie de gradul n: • • • • R ⊆ D1 × D2 × ... amn unde a ij ∈ D j ..

pentru primii doi studenţi ultimii doi studenţi sunt în aceeaşi grupă. care este o eroare. dar în ani diferiţi. GRUPA].• • • • Valorile unui atribut sunt atomice (nu se pot descompune în valori pentru alte atribute) şi scalare (nu se pot memora tablouri) Liniile din tabel nu sunt ordonate Liniile din tabel sunt distincte Valorile din relaţie pot fi considerate ca o instanţă a schemei relaţiei Exemplul de relaţie care nu e bine proiectată: STUDENTI [NUME. SECTIA. NUME Pop Ioan Dan Radu Barbu Ana Popa Ana • • SECTIA ANUL_DE_STUDIU GRUPA Baze de date 2 222 Baze de date 2 222 Baze de date 1 211 Baze de date 3 211 asocierea grupa=222 şi (sectia='Baze de date'. Pentru studiul unor astfel de situaţii este necesară normalizarea relaţiilor . ANUL_DE_STUDIU. anul_de_studiu=2) se păstrează de două ori.

TITLU EDITURA AN_APARITIE An Introduction to Addison-Wesley 1995 Database Systems Publishing Comp. P. A2 .. SUA 1994 Management Ramakrishnan. EDITURA. CARTE [AUTORI..J. S. cu valorile: AUTORI Date.. R.P.. Ghosh.. An } este cheie pentru relaţia R[A1 . AN_APARITIE]. An ] dacă atributele din K: o se pot folosi pentru identificarea fiecărei linii din R o nu exista o submulţime din K cu această proprietate Exemplu. Data Base Organization Academic Press 1977 for Data Management Helman. A2 . EDITURA. TITLU. TITLU. deci sunt necesare toate atributele relaţiei... Database Management McGraw-Hill 1998 Systems Pentru relaţia CARTE se poate alege ca şi cheie grupul de atribute {AUTORI. care să aibă valori distincte (aceste valori se pot genera automat la adăugarea de înregistrări) ..• K ⊆ {A1 . AN_APARITIE}. In astfel de situaţii (toate atributele trebuie folosite la cheie) este utilă includerea unui atribut sublimentar. The Science of Database Irwin. C.

iar celelalte se vor considera chei secundare (chei candidat). {ZI. DISCIPLINA].Pentru anumite relaţii pot fi alese mai multe chei. {ZI. deci precizarea unei chei constituie o restricţie pentru baza de date. cu orarul pe o săptămână. ORA. SALA. ORA. Se pot alege ca şi chei următoarele mulţimi de atribute: {ZI. PROFESOR}. PROFESOR. . Exemplul. ORA. Una dintre chei (un atribut sau un grup de atribute) se alege cheie principală (primară). CLASA. SALA}. ORA. Sistemele de gestiune a bazelor de date nu permit existenţa a două elemente distincte într-o relaţie cu aceeaşi valoare pentru oricare cheie (principală sau secundară). ORAR [ZI. CLASA}.

Plecând de la o relaţie R2 se pot căuta înregistrările dintr-o relaţie R1 după valorile unui astfel de atribut (simplu sau compus). In relaţia R2 se stabileşte un atribut A.Cheie externă: valorile unor atribute dintr-o relaţie apar în altă relaţie. numit cheie externă. Valorile atributului A se caută printre valorile cheii din relaţia R1. Cele două relaţii R1 şi R2 nu este obligatoriu să fie distincte. A=cheie externă R1 cheie R2 v v .

.Clasa.Cod=ELEVI. nume. Unei anumite clase (memorată în relaţia CLASE). clasa. Prin cheie externă se pot memora legături 1:n între entităţi: la o clasă corespund oricâţi elevi. datanasterii]. îi corespund toţi elevii din clasa cu codul respectiv. Legătura o putem stabili între relaţia CLASE (considerată ca părinte pentru relaţie) şi relaţia ELEVI (ca membru pentru legătură) prin egalitatea CLASE. profil] ELEVI [nrmatricol.Exemplu: CLASE [cod. identificată printr-un cod. iar unui elev îi este asociată cel mult o clasă.

iar un student are asociate mai multe discipline. . Varianta de memorare cuprinde o relaţie intermediară. Fie două entităţi: discipline şi studenţi.Cheia externă se poate folosi şi pentru a memora legături m:n între entităţi. La o disciplină sunt "inscrişi" mai mulţi studenţi.

prenume. cnp. secţia şi numărul matricol) grupele de studiu (pentru mai mulţi ani universitari) şi apartenenţa studenţilor la aceste formaţii ("traiectoria" studenţilor) rezultatele profesionale ale studenţilor (disciplina. anul universitar şi semestrul) pentru o problema dată soluţia nu este unică relaţii posibile pentru exemplul de mai sus: o studenţi o grupele de studiu o secţiile o apartenenţa studenţilor la grupe o rezultatele la examene o disciplinele Determinarea relaţiilor din baza de date: • • . Informaţii care se gestionează: • • • studenţi: câteva date generale (nume.Exemplu de bază de date pentru evidenţa unor informaţii dintr-o facultate. nota şi numărul de credite.

.

E. rollback. Codd formalizează modelul relaţional • 1974 .Gestiunea bazelor de date relaţionale cu limbajul SQL SOL (Structured Query Language) Scurt istoric: • 1970 .SQL devine standard ANSI (American National Standards Institute) • 1987 . update.SQL este adoptată de ISO (International Standards Organization) • Versiuni (extensii): SQL-86 SQL-89. gestiunea datelor: insert.la IBM se defineşte o versiune modificată a limbajului SEQUE. cu numele SEQUEL/2. . SQL-92. 2. commit. SQL-2008 Comenzile (instrucţiunile) din SQL pot fi grupate în diverse clase: 1. • 1976 . După o revizuire devine SQL • 1986 . gestiunea diverselor componente dintr-o bază de date. alter.F. gestiunea tranzacţiilor: start transaction. 3. delete. SQL-99. definirea diverselor componente: create. regăsirea datelor: select. truncate. drop. 4. SQL-2003.la IBM (din San Jose) se defineşte limbajul SEQUEL (Structured English Query Language) • 1975 . 5.se defineşte limbajul SQUARE (Specifying Queries as Relational Expressions).

smallint. text. mediumblob. LOB tip_data depinde de SGBD. double float. bigint float. mediumtext. varbinary. restricţii_tabel]) definire_coloana: nume tip_data[(lungime)] [DEFAULT valoare] [restricţie_coloana] • • categorii de tipuri de data: numerice. varchar tinyint. data-timp.asp sunt descrise tipurile de dată pentru cele trei SGBD-uri amintite în tabel . longblob la http://www. blob. numeric autonumber date/time datetime. time ole object binary.definire_coloana] . datetime.. bigint single.CREATE TABLE nume_tabel (definire_coloana [. Exemple pentru trei SGBD-uri: MySQL char. image • date. double decimal Ms Access Ms SQL Server text. time. mediumint.com/sql/sql_datatypes. longtext. smallint. real currency decimal.[. integer. varchar. timestamp. şir de caractere. long tinyint.w3schools. text byte. int. memo char.. int. date. year tinytext.

nu poate să primească valori nedefinite o Primary Key .valorile coloanei sunt unice o Check(condiţie) . care au valoarea true sau false) o Foreign Key REFERENCES tabel_parinte [(nume_coloana)] [On Update actiune] [On Delete actiune] restricţii asociate tabelului: o Primary key(lista coloane) . dar aceste operaţii generează ştergeri sau modificări şi în tabelul fiu .dacă se defineşte cheia primară ca şi coloana curentă o Unique .pentru a preciza condiţia pe care trebuie să o îndeplinească valorile coloanei (condiţii simple.• • • restricţii asociate coloanei: o Not Null .pentru a preciza condiţia pe care trebuie să o îndeplinească valorile unei linii o Foreign Key nume_cheie_externa(lista_coloane) REFERENCES tabel_parinte [(lista_coloane)] [On Update actiune] [On Delete actiune] Acţiuni posibile ce se pot asocia unei chei externe (se verifică la modificarea datelor): o Restrict .operaţia nu se poate executa dacă se încalcă restricţiile de integritate o Set Null .valorile sunt unice pentru lista de coloane precizată o Check(condiţie) .valoarea pentru cheia externă va fi înlocuită cu null o Set Default .definirea cheii primare pentru tabel o Unique(lista coloane) .valoarea pentru cheia externă va fi înlocuită cu valoarea implicită o Cascade .se permite ştergerea sau modificarea în tabelul părinte.

nrmatricol)).nrmatricol) references studenti(sectia. cod char(10). grupa) references grupe(anuniv. sectia. pozitia integer. nrmatricol char(10). create table rezultate ( /*id AutoNumber. create table studenti ( sectia smallint(4) references sectii(cod). primary key (sectia. anuniv smallint(4). foreign key(sectia. foreign key (sectia. anuniv smallint(4). */ id int NOT NULL AUTO_INCREMENT Primary Key. sectia. denumire varchar(70)). sectia smallint(4). nrcredite decimal(3.cod)). create table grupe ( anuniv smallint(4). grupa char(10). semestru smallint(2). cod)). nrmatricol char(10). anstudiu smallint(2).sectia. . nota smallint(2).create table sectii ( cod smallint(4) primary key. nume char(30). disciplina char(10) references discipline(cod).1). foreign key (anuniv. denumire varchar(70)).nrmatricol). create table traiectorie ( /*id AutoNumber. create table discipline ( cod char(10) primary key. sectia smallint(4). prenume char(30). sectia smallint(4) references sectii(cod).nrmatricol) references studenti(sectia. */ id int not null auto_increment Primary Key. primary key(anuniv. cnp char(13) unique. nrmatricol char(10).nrmatricol)).

Pentru modificarea structurii unui tabel deja definit se poate folosi instrucţiunea: ALTER TABLE nume_tabel operaţie operaţie Amintim câteva dintre operaţiile posibile (există diferenţe între diversele SGBD): • adăugarea de coloane. adaugarea/ştergerea unei restricţii: ADD PRIMARY KEY (lista_coloane) ADD UNIQUE (lista_coloane) ADD CONSTRAINT nume FOREIGN KEY (lista) REFERENCES tabel(lista) DROP [CONSTRAINT] nume adăugarea/modificarea valorii implicite: ADD nume_coloana DEFAULT null • • • DROP TABLE nume_tabel . modificarea definirii coloanelor: ADD definire_coloana {ALTER COLUMN | MODIFY} definire_coloana CHANGE nume_vechi definire_coloana eliminarea unei coloane: DROP [COLUMN] nume_coloana.

Ştergerea de înregistrări: DELETE FROM nume_tabel [WHERE condiţie] Inregistrările pentru care condi ia din WHERE este adevărată se vor elimina din tabel.. Prin lipsa clauzei WHERE se iau toate înregistrările din tabel. Valorile coloanelor precizate în SET se schimbă la valoarea expresiilor asociate. Dacă această clauză lipseşte. . 2. atunci se şterg toate înregistrările tabelului.. 3.Modificarea datelor dintr-un tabel 1. [WHERE condiţie] Se modifică acele înregistrări din tabel pentru care condiţia din clauza WHERE are valoarea adevărat. Adăugarea de înregistări: INSERT INTO nume_tabel [(lista_coloane)] VALUES (lista_valori) INSERT INTO nume_tabel [(lista_coloane)] subinterogare unde prin "subinterogare" se precizează o mulţime de înregistrări (generată cu ajutorul instrucţiunii SELECT). Modificarea datelor: UPDATE nume_tabel SET coloana=expresie [.coloana=expresie] .

orice subşir. "_" ...un caracter) expresie (NOT) IS NULL (valoare [valoare ] .)  expresie [NOT] IN  (subselectie )    •  ALL    expresie operator_relational  ANY  (subselectie) SOME    Condiţii echivalente: "expresie IN (subselecţie)" echivalent cu "expresie = ANY (subselecţie)" "expresie NOT IN (subselecţie)" echivalent cu "expresie <> ALL (subselecţie)" • [NOT] EXISTS (subselectie) .Condiţii de filtrare: Aceste condiţii se folosesc în contextul unei linii curente din tabel • • • • • expresie operator_relational expresie expresie [NOT] BETWEEN valmin AND valmax expresie (NOT) LIKE şablon ("%" .

Condiţie de filtrare poate fi: o condiţie elementară o (condiţie) o not condiţie o condiţie1 and condiţie2 o condiţie1 or condiţie2 true not and true false null false null null false false false false null null false null or true false null true true true true false true false null null true null null false true true true false null .

yale. McGraw-Hill.. An Introduction to Database Systems (8th Edition).cs..cs...Referinţe: [Da04] DATE. WIDOM. 2007. L. C. J.wisc.edu/avi/db-book/ [Ta03] TAMBULEA. [Ga08] GARCIA-MOLINA. J. Pearson Prentice Hall.. SUDARSHAN S. McGraw-Hill.html [Si10] SILBERSCHATZ A. 2008 [Ra07] RAMAKRISHNAN.. Database System Concepts. H. Baze de date.J. 2004. Litografiat Cluj-Napoca 2003.. Database Systems: The Complete Book. Addison-Wesley. http://codex. Database Management Systems. 2010. . R. http://pages. KORTZ H.edu/~dbbook/openAccess/thirdEdition/slides/slides3ed.. ULLMAN.

Sign up to vote on this title
UsefulNot useful