Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres,...

35
Tehnici Avansate de Programare Baze de date Petru Rebeja, Marius Apetrii 22 Aprilie 2021 Facultatea de Matematică Universitatea Alexandru Ioan Cuza, Ias , i

Transcript of Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres,...

Page 1: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Tehnici Avansate de Programare

Baze de date

Petru Rebeja, Marius Apetrii

22 Aprilie 2021

Facultatea de MatematicăUniversitatea Alexandru Ioan Cuza, Ias, i

Page 2: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Introducere

Page 3: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Recapitulare

• Test-Driven Development — un stil de dezvoltare software încare mai întâi se scriu testele pentru un anumit aspect iar maiapoi implementarea propriu-zisă.

1

Page 4: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Agenda

• Baze de date

• Istoricul schemei bazei de date relat, ionale

• Proiectarea bazelor de date

2

Page 5: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Baze de date

Page 6: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Not, iuni de bază

Bază de date

O bază de date este o colect, ie organizată de date care suntstocate s, i accesate de pe un calculator1.

1https://en.wikipedia.org/wiki/Database

3

Page 7: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Not, iuni de bază

Sistem de Gestiune al Bazelor de Date

Sistemul de Gestiune a Bazelor de Date este un sistem softwarecare le permite utilizatorilor să definească, să creeze, să întret, ină s, isă controleze accesul la baza de date2.

2Connolly, Thomas M.; Begg, Carolyn E. (2014). Database Systems – APractical Approach to Design Implementation and Management (6th ed.).Pearson. p. 64. ISBN 978-1292061184.

4

Page 8: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Not, iuni de bază

Schema bazei de date

Schema bazei de date este structura logică a bazei de date descrisăîntr-un limbaj formal suportat de SGBD3 sau o reprezentare vizualăa acesteia4

3http://en.wikipedia.org/wiki/Database_schema4https://www.techopedia.com/definition/30601/database-schema

5

Page 9: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Tipuri de baze de date

Există două tipuri de baze de date:

• Relat, ionale (SQL) s, i

• Non-relat, ionale (No-SQL)

6

Page 10: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Baze de date relat, ionale

• Sunt bazate pe tabele s, i modelează relat, ia dintre ele,

• Au o schemă predefinită,

• Suportă interogări complexe,

7

Page 11: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Baze de date relat, ionale (cont.)

• Suportă cres,terea pe verticală (vertical scaling) prinadăugarea de memorie RAM, spat, iu pe disk etc.,

• Pun accentul pe proprietăt, ile ACID:• Atomicity — modificări atomice,• Consistency — impune consistent,a datelor• Isolation — modificările se fac în izolare unele fat,ă de altele• Durability — modificările sunt salvate pe disk.

8

Page 12: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Baze de date No-SQL

• Sunt bazate pe documente, grafuri, perechi cheie-valoare etc.

• Nu au o schemă predefinită,

• Au suport limitat pentru interogări complexe,

9

Page 13: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Baze de date No-SQL (cont.)

• Suportă cres,terea pe orizontală (horizontal scaling) prinadăugarea de noduri noi,

• Aplică teorema CAP5 — în orice moment oferă douăproprietăt, i din următoarele:

• Consistency — orice scriere primes,te cele mai recente datesau o eroare,

• Availability — fiecare cerere primes,te un răspuns dardatele pot să nu fie cele mai recente,

• Partition tolerance — systemul continuă să funct, ionezeîn ciuda pierderii unor mesaje.

5https://en.wikipedia.org/wiki/CAP_theorem

10

Page 14: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Evolut, ia bazei de date

Page 15: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Evolut, ia aplicat, iei

• Baza de date evoluează (de obicei) împreună cu aplicat, ia,

• Modificările bazei de date fac parte din ciclul de dezvoltare.

11

Page 16: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Bune practici

• Schema bazei de date trebuie păstrată în sistemul demanagement al istoricului6 pentru a asigura sincronizarea întremodificările aplicat, iei s, i a bazei de date,

• Aplicarea modificărilor trebuie sincronizată,

• Altfel întregul sistem software devine inutilizabil.

6https://www.troyhunt.com/10-commandments-of-good-source-control/

12

Page 17: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Proiectarea bazelor de date

Page 18: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Primary/Foreign Key

• O cheie primară (Primary Key) este o mulţime de coloane aleunui tabel a căror valori identifică în mod unic o înregistrare7.

• O cheie străină (Foreign Key) este o mulţime de coloane aleunui tabel care fac referinţă la o cheie primară8.

7http://www.differencebetween.net/technology/difference-between-primary-key-and-unique-key/8https://www.w3schools.com/sql/sql_foreignkey.asp

13

Page 19: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Relaţie

Adăugarea unei chei străine crează o relaţie între cele douătabele unde:

• Tabelul copil este cel care conţine cheia străină,

• Tabelul părinte este cel care conţine cheia primarăreferenţiată de tabelul copil.

14

Page 20: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Exemplu: 1*N

15

Page 22: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Normalizare

Normalizarea bazei de date

Procesul de structurare a unei baze de date relaţionale pentru areduce redundanţa datelor şi a îmbunătăţi integritatea acestora10.

10https://en.wikipedia.org/wiki/Database_normalization

17

Page 23: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Objectivele normalizării

• Modelarea conceptelor din lumea reală şi a relaţiilor dintreacestea.

• Extensibilitate sporită: adăugarea obiectelor noi se face cuintervenţie minimă.

18

Page 24: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forme normale

• Normalizarea se face prin aducerea schemei la o formănormală.

• O formă normală este o proprietate a structurii bazei de date.

• Există mai multe forme normale (FN1—FN6 etc.).

• O bază de date este normalizată dacă respectă cel puţin FN3.

19

Page 25: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forma Normală 1

FN1

O relaţie este în Forma Normală 1 dacă în fiecare coloană a unuitabel avem doar valori atomice.

20

Page 26: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forma Normală 1

Normalizarea la FN1 se face prin:

1. Eliminarea grupurilor care se repetă.

2. Crearea unui table pentru fiecare colecţie de date cu coeziunemare.

3. Adăugarea unei chei primare.

21

Page 27: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forma Normală 2

FN2

O relaţie este în Forma Normală 2 dacă:

1. Este în Forma Normală 1 şi

2. Toate atributele unui tabel depind doar de cheia primară directsau indirect.

22

Page 28: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forma Normală 2

Tournament winners11

Tournament Year Winner Winner’s date of birthIndiana Invitational 1998 Al Fredrickson 21 July 1975Cleveland Open 1999 Bob Albertson 28 September 1968Des Moines Masters 1999 Al Fredrickson 21 July 1975Indiana Invitational 1999 Chip Masterson 14 March 1977

11https://en.wikipedia.org/wiki/Third_normal_form

23

Page 29: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forma Normală 3

FN3

O relaţie este în Forma Normală 3 dacă:

1. Este în Forma Normală 2 şi

2. Fiecare atribut depinde direct de cheia primară.

24

Page 30: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Forma Normală 312

Tournament Year WinnerIndiana Invitational 1998 Al FredricksonCleveland Open 1999 Bob AlbertsonDes Moines Masters 1999 Al FredricksonIndiana Invitational 1999 Chip Masterson

Winner Date of birthChip Masterson 14 March 1977Al Fredrickson 21 July 1975Bob Albertson 28 September 1968

12https://en.wikipedia.org/wiki/Third_normal_form

25

Page 31: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Încheiere

Page 32: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Recapitulare — baze de date

• Baza de date este o colect, ie organizată de date care pot fimanipulate prin intermediul unui SGBD.

• SGBD = Sistem de Gestiune al Bazelor de Date; permitemanipulearea datelor s, i întret, inerea bazelor de date.

• Schema bazei de date este reprezentarea structurii bazei dedate s, i trebuie păstrată în sistemul de gestiune al istoriculuialături de codul-sursă al aplicat, iei.

• Folosit, i Database project din Visual Studio pentrumodificarea schemei bazei de date.

26

Page 33: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Recapitulare — ACID

• Atomicity — modificări atomice,

• Consistency — impune consistent,a datelor

• Isolation — modificările se fac în izolare unele fat,ă de altele

• Durability — modificările sunt salvate pe disk.

27

Page 34: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Recapitulare — proiectarea bazei de date

• Elemente esenţiale în proiectarea bazelor de date: cheieprimară, cheie străină şi relaţie.

• Normalizare — proiectarea/restructurarea bazei de datepentru a o aduce în (cel puţin) forma normală 3.

• O schemă este în forma normală 3 (FN3) dacă atributelefiecărui tabel sunt atomice s, i depind doar de cheia primară.

28

Page 35: Tehnici Avansate de Programare - Baze de dateBazededateNo-SQL(cont.) • Suportăcres, tereapeorizontală(horizontal scaling)prin adăugareadenodurinoi, • AplicăteoremaCAP5 —înoricemomentoferădouă

Vă mult,umesc

Mult,umesc pentru atent, ie!

29