„Viitorii utilizatori ai marilor bănci de date trebuie protejați de obligația de a ști cum sunt organizate datele în mașină (reprezentarea internă).”E. F. Codd · A Relational Model of Data for Large Shared Data Banks · 1970 · A Relational Model of Data for Large Shared Data Banks, Communications of the ACM 13(6), 1970 — prima propoziție a rezumatului
Fiecare atribut depinde de cheie, de toată cheia și numai de cheie.
Codd a propus în 1970 ceva ce azi pare evident: tabele (relații) cu rânduri și coloane, chei primare care identifică un rând și chei străine care leagă tabelele, plus un limbaj declarativ în care spui ce rezultat vrei, nu ce fișiere să deschidă mașina. Normalizarea vine din aceeași idee: dacă o adresă de client apare în o mie de comenzi, o corectezi în o mie de locuri sau în niciunul. A treia formă normală se ține minte într-o frază: fiecare atribut depinde de cheie, de toată cheia și numai de cheie. Pentru un depozit de date, normalizarea e o alegere, nu o lege. Sursele sunt normalizate ca să scrie fără anomalii; depozitul denormalizează deliberat ca să citească fără zece join-uri. Ce rămâne neatins e principiul lui Codd: modelul logic separat de cel fizic. De aceea poți schimba indecși, partiții și formatul de stocare fără să rescrii interogările — și de aceea lecțiile despre indecși și memorie, de mai târziu, nu ating deloc SQL-ul.
Pasajul 1. Independența datelor are un preț ascuns: cineva trebuie să traducă cererea ta în pași fizici. Acel cineva e optimizatorul. Când scrii o interogare, nu alegi indecși sau ordinea join-urilor. Alegi motorul. E ca și cum ai spune taximetristului doar adresa, nu traseul. El cunoaște străzile, blocajele și scurtăturile. Dacă îi dictăm traseul, pierdem exact ce ne-a dat Codd: libertatea de a schimba harta fără să schimbăm destinația. Dar ce se întâmplă când optimizatorul greșește traseul? Acolo începe lecția următoare.
Aceeași separare are o a doua față: datele înseși trebuie ținute într-un singur loc. Dacă adresa unui client e copiată în o mie de comenzi, o mutare înseamnă o mie de corecturi — și o mie de șanse să uiți una. Normalizarea spune: scrie adresa o singură dată, într-un rând propriu, și leagă restul printr-o cheie. E ca numărul de matricolă dintr-o facultate: nu rescrii numele studentului în fiecare registru, doar codul. Regula de aur a celei de-a treia forme normale se reduce la o frază: fiecare valoare depinde de cheie, de toată cheia și numai de cheie. Dar dacă vrei să citești rapid, nu să scrii curat? Acolo normalizarea devine o alegere, nu o lege.
De ce contează Fiecare lecție de optimizare din acest curs se sprijină pe separarea logic–fizic. Cine o pierde ajunge să rescrie rapoartele de fiecare dată când mută un tabel.