Bazele de date au o mulțime de jargon, iar cardinalitatea este unul dintre acele cuvinte pe care oamenii cu experiență tind să uite că nu le știau cândva. Dar dacă nu-l știi – și este nevoie de ceva timp pentru a te simți cu adevărat confortabil cu cardinalitatea – este super derutant atunci când DBA-ul îl aruncă pur și simplu în mijlocul unei propoziții fără să încetinească! Nu vă temeți: Te-am prins, așa cum se spune.Cardinalitatea înseamnă două lucruri în bazele de date. Pentru scopurile noastre, unul contează mult mai mult decât celălalt. Haideți să ne ocupăm mai întâi de cel simplu și apoi să ne ocupăm de cel care contează pentru performanța interogărilor.Definiția cardinalității care contează foarte mult pentru performanța interogărilor este cardinalitatea datelor. Aceasta se referă la numărul de valori distincte dintr-o coloană.Prima semnificație a cardinalității este atunci când proiectați baza de date – ceea ce se numește modelarea datelor. În acest sens, cardinalitatea înseamnă dacă o relație este unu-la-unu, mulți-la-unu sau mulți-la-mulți. Deci, de fapt, vorbiți despre cardinalitatea relației.Definiția oficială a cardinalității, care nu face parte din dicționarul bazei de date, este matematică: numărul de valori dintr-un set. Atunci când este aplicată la bazele de date, semnificația este puțin diferită: este numărul de valori distincte dintr-o coloană de tabel, raportat la numărul de rânduri din tabel. Valorile care se repetă în coloană nu contează.Totuși, de obicei nu vorbim despre cardinalitate ca despre un număr. Este mai frecvent să vorbim pur și simplu despre cardinalitate „mare” și „mică”. O mulțime de valori distincte reprezintă o cardinalitate ridicată; o mulțime de valori repetate reprezintă o cardinalitate scăzută.Imaginați-vă o tabelă de descriere a unui produs într-o bază de date de comerț electronic:Columna ProductID
va avea o cardinalitate ridicată, deoarece este probabil cheia primară a tabelului respectiv, deci este complet unică. Dacă există o mie de rânduri în tabel, vor exista o mie de valori ProductID
diferite. Coloana Category
va avea o mulțime de repetiții și va avea o cardinalitate scăzută sau medie: poate 50 sau 100 de valori Category
diferite. Name
este probabil o cardinalitate ridicată, cu excepția cazului în care acest tabel este mai mult decât pare (cum ar fi mai multe rânduri pentru diferite culori de produse și alte variații).Cardinalitatea are un mare impact asupra performanței, deoarece influențează planul de execuție a interogării. Planificatorul va examina statisticile coloanelor și le va folosi, printre altele, pentru a-și da seama cu câte valori este posibil să corespundă o interogare. În funcție de ceea ce constată, ar putea utiliza diferite planuri de execuție a interogării pentru a încerca să obțină cea mai bună performanță. Dar acesta este un subiect pentru o altă postare pe blog, pentru că este nevoie de un pic de muncă pentru a-l explica.Așa că acum, data viitoare când cineva aruncă „cardinalitate ridicată” într-o propoziție fără să facă o pauză, să știți că de fapt vrea să spună „o mulțime de valori diferite”. Și uite așa!