![]() |
|---|
| Lucrul cu Date: Baze de Date Relaționale - Schiță de @nitya |
Probabil ai folosit în trecut un tabel de calcul pentru a stoca informații. Aveai un set de rânduri și coloane, unde rândurile conțineau informațiile (sau datele), iar coloanele descriau informațiile (uneori numite metadate). O bază de date relațională este construită pe acest principiu de bază al coloanelor și rândurilor din tabele, permițându-ți să ai informații distribuite pe mai multe tabele. Acest lucru îți permite să lucrezi cu date mai complexe, să eviți duplicarea și să ai flexibilitate în modul în care explorezi datele. Haide să explorăm conceptele unei baze de date relaționale.
O bază de date relațională are la bază tabele. La fel ca în cazul unui tabel de calcul, un tabel este o colecție de coloane și rânduri. Rândul conține datele sau informațiile cu care dorim să lucrăm, cum ar fi numele unui oraș sau cantitatea de precipitații. Coloanele descriu datele pe care le stochează.
Să începem explorarea noastră creând un tabel pentru a stoca informații despre orașe. Am putea începe cu numele și țara lor. Ai putea stoca aceste informații într-un tabel astfel:
| Oraș | Țară |
|---|---|
| Tokyo | Japonia |
| Atlanta | Statele Unite |
| Auckland | Noua Zeelandă |
Observă că numele coloanelor oraș, țară și populație descriu datele stocate, iar fiecare rând conține informații despre un oraș.
Probabil că tabelul de mai sus îți pare destul de familiar. Să începem să adăugăm date suplimentare în baza noastră de date în formare - precipitațiile anuale (în milimetri). Ne vom concentra pe anii 2018, 2019 și 2020. Dacă ar fi să le adăugăm pentru Tokyo, ar putea arăta astfel:
| Oraș | Țară | An | Cantitate |
|---|---|---|---|
| Tokyo | Japonia | 2020 | 1690 |
| Tokyo | Japonia | 2019 | 1874 |
| Tokyo | Japonia | 2018 | 1445 |
Ce observi la tabelul nostru? Probabil observi că duplicăm numele și țara orașului de mai multe ori. Acest lucru ar putea ocupa destul de mult spațiu de stocare și este, în mare parte, inutil să avem mai multe copii. La urma urmei, Tokyo are un singur nume care ne interesează.
OK, să încercăm altceva. Să adăugăm noi coloane pentru fiecare an:
| Oraș | Țară | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| Tokyo | Japonia | 1445 | 1874 | 1690 |
| Atlanta | Statele Unite | 1779 | 1111 | 1683 |
| Auckland | Noua Zeelandă | 1386 | 942 | 1176 |
Deși acest lucru evită duplicarea rândurilor, adaugă alte provocări. Ar trebui să modificăm structura tabelului de fiecare dată când apare un nou an. În plus, pe măsură ce datele noastre cresc, având anii ca și coloane va face mai dificilă extragerea și calcularea valorilor.
De aceea avem nevoie de mai multe tabele și relații. Prin împărțirea datelor noastre putem evita duplicarea și avem mai multă flexibilitate în modul în care lucrăm cu datele.
Să revenim la datele noastre și să determinăm cum dorim să le împărțim. Știm că vrem să stocăm numele și țara pentru orașele noastre, așa că acest lucru va funcționa cel mai bine într-un tabel.
| Oraș | Țară |
|---|---|
| Tokyo | Japonia |
| Atlanta | Statele Unite |
| Auckland | Noua Zeelandă |
Dar înainte de a crea următorul tabel, trebuie să ne dăm seama cum să facem referire la fiecare oraș. Avem nevoie de o formă de identificator, ID sau (în termeni tehnici de baze de date) o cheie primară. O cheie primară este o valoare utilizată pentru a identifica un rând specific într-un tabel. Deși aceasta ar putea fi bazată pe o valoare în sine (am putea folosi numele orașului, de exemplu), ar trebui să fie aproape întotdeauna un număr sau alt identificator. Nu vrem ca ID-ul să se schimbe vreodată, deoarece ar rupe relația. În majoritatea cazurilor, cheia primară sau ID-ul va fi un număr generat automat.
✅ Cheia primară este adesea prescurtată ca PK
| city_id | Oraș | Țară |
|---|---|---|
| 1 | Tokyo | Japonia |
| 2 | Atlanta | Statele Unite |
| 3 | Auckland | Noua Zeelandă |
✅ Vei observa că folosim termenii "id" și "cheie primară" interschimbabil pe parcursul acestei lecții. Conceptele de aici se aplică și la DataFrames, pe care le vei explora mai târziu. DataFrames nu folosesc terminologia de "cheie primară", însă vei observa că se comportă în mod similar.
Cu tabelul nostru de orașe creat, să stocăm precipitațiile. În loc să duplicăm informațiile complete despre oraș, putem folosi ID-ul. De asemenea, ar trebui să ne asigurăm că tabelul nou creat are o coloană id, deoarece toate tabelele ar trebui să aibă un id sau o cheie primară.
| rainfall_id | city_id | An | Cantitate |
|---|---|---|---|
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
Observă coloana city_id din tabelul nou creat precipitații. Această coloană conține valori care fac referire la ID-urile din tabelul orașe. În termeni tehnici de date relaționale, aceasta se numește cheie străină; este o cheie primară dintr-un alt tabel. Poți să o consideri pur și simplu ca o referință sau un indicator. city_id 1 face referire la Tokyo.
Note
Cheia străină este adesea prescurtată ca FK
Cu datele noastre separate în două tabele, te-ai putea întreba cum le extragem. Dacă folosim o bază de date relațională precum MySQL, SQL Server sau Oracle, putem folosi un limbaj numit Structured Query Language sau SQL. SQL (uneori pronunțat "sequel") este un limbaj standard utilizat pentru a extrage și modifica datele dintr-o bază de date relațională.
Pentru a extrage date, folosești comanda SELECT. În esență, selectezi coloanele pe care vrei să le vezi din tabelul în care se află. Dacă ai vrea să afișezi doar numele orașelor, ai putea folosi următoarea comandă:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- AucklandSELECT este locul unde listezi coloanele, iar FROM este locul unde listezi tabelele.
Note
Sintaxa SQL nu este sensibilă la majuscule, ceea ce înseamnă că select și SELECT înseamnă același lucru. Totuși, în funcție de tipul de bază de date pe care o folosești, coloanele și tabelele ar putea fi sensibile la majuscule. Ca urmare, este o bună practică să tratezi întotdeauna totul în programare ca fiind sensibil la majuscule. Când scrii interogări SQL, convenția comună este să scrii cuvintele cheie cu litere mari.
Interogarea de mai sus va afișa toate orașele. Să ne imaginăm că dorim să afișăm doar orașele din Noua Zeelandă. Avem nevoie de o formă de filtru. Cuvântul cheie SQL pentru aceasta este WHERE, sau "unde ceva este adevărat".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- AucklandPână acum am extras date dintr-un singur tabel. Acum vrem să aducem datele împreună din ambele tabele orașe și precipitații. Acest lucru se face prin alăturarea lor. Practic vei crea o legătură între cele două tabele și vei potrivi valorile dintr-o coloană din fiecare tabel.
În exemplul nostru, vom potrivi coloana city_id din precipitații cu coloana city_id din orașe. Acest lucru va potrivi valoarea precipitațiilor cu orașul său respectiv. Tipul de alăturare pe care îl vom efectua este ceea ce se numește o alăturare internă, ceea ce înseamnă că dacă vreun rând nu se potrivește cu nimic din celălalt tabel, nu va fi afișat. În cazul nostru, fiecare oraș are precipitații, așa că totul va fi afișat.
Să extragem precipitațiile pentru anul 2019 pentru toate orașele noastre.
Vom face acest lucru în pași. Primul pas este să alăturăm datele indicând coloanele pentru legătură - city_id, așa cum am evidențiat mai devreme.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_idAm evidențiat cele două coloane pe care le dorim și faptul că vrem să alăturăm tabelele prin city_id. Acum putem adăuga instrucțiunea WHERE pentru a filtra doar anul 2019.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942Baze de date relaționale sunt centrate pe împărțirea informațiilor între mai multe tabele care sunt apoi reunite pentru afișare și analiză. Acest lucru oferă un grad ridicat de flexibilitate pentru a efectua calcule și pentru a manipula datele. Ai văzut conceptele de bază ale unei baze de date relaționale și cum să efectuezi o alăturare între două tabele.
Există numeroase baze de date relaționale disponibile pe internet. Poți explora datele folosind abilitățile pe care le-ai învățat mai sus.
Există mai multe resurse disponibile pe Microsoft Learn pentru a-ți continua explorarea conceptelor SQL și a bazelor de date relaționale.
- Descrierea conceptelor de date relaționale
- Începe să lucrezi cu Transact-SQL (Transact-SQL este o versiune de SQL)
- Conținut SQL pe Microsoft Learn
Declinare de responsabilitate:
Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa maternă ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de oameni. Nu ne asumăm responsabilitatea pentru neînțelegerile sau interpretările greșite care pot apărea din utilizarea acestei traduceri.
