M2 - Bases de dades / UF1NF3: Normalització
El disseny d’una base de dades pot ser una tasca extremadament complexa. Hi ha diferents metodologies que permeten abordar el problema de trobar l’esquema relacional que representi millor la realitat que es vol modelitzar.
Coneixem el model Entitat-Relació per establir models per a qualsevol realitat, del qual s’obté, com a resultat, el diagrama Entitat-Relació, altrament anomenat diagrama de Chen. També coneixem el procés de traducció d’un diagrama Entitat-Relació a un esquema relacional.
Per tant, si per arribar a l’esquema relacional que ha de modelitzar la realitat hem seguit el camí que consisteix a, primerament, efectuar el diagrama Entitat-Relació per després efectuar-ne la traducció al model relacional, i el diagrama Entitat-Relació era correcte, haurem obtingut un esquema relacional del tot correcte. Aquest seria el camí aconsellable.
En l’apartat del “Model relacional” d’aquesta unitat, es presenta el procés de traducció d’un diagrama Entitat-Relació a un esquema relacional.
Però no sempre és així i ens trobem dissenys efectuats directament en l’esquema relacional. Hi ha diferents causes que ho provoquen:
- D’entrada, el model Entitat-Relació és posterior al model relacional i, per tant, hi ha bases de dades que van ser formulades directament en la terminologia relacional. No hi havia cap altra opció!
- Hi ha dissenyadors que “no volen perdre el temps” en un model Entitat-Relació i dissenyen directament en el model relacional. Quin error més gran!
- De vegades, s’ha de modificar la base de dades a causa de noves necessitats, i el disseny s’efectua directament sobre aquesta en lloc d’analitzar-se i realitzar-se sobre el model Entitat-Relació per després transferir els canvis a l’esquema relacional. Quin error més gran!
Fixeu-vos que donem un suport absolut al fet d’utilitzar el model Entitat-Relació per obtenir-ne posteriorment el model relacional. Un bon disseny en el model Entitat-Relació acostuma a proporcionar una base de dades relacional ben dissenyada, cosa que no passarà si el disseny Entitat-Relació incorpora errors. D’altra banda, si no hi ha hagut el disseny Entitat-Relació previ, hi ha més possibilitats de tenir una base de dades relacional mal dissenyada.
La teoria de la normalització és un mètode que permet assegurar si un disseny relacional (tant si prové de la traducció d’un diagrama Entitat-Relació com si s’ha efectuat directament en el model relacional) és més o menys correcte.
En general, els mals dissenys poden originar les situacions següents:
- Repetició de la informació
- Impossibilitat de representar certa informació:
- Anomalies en les insercions
- Anomalies en les modificacions
- Anomalies en els esborraments
Un bon disseny ha d’aconseguir el següent:
- Emmagatzemar tota la informació necessària amb el mínim d’informació redundant.
- Mantenir el mínim de lligams entre les relacions de la base de dades per tal de facilitar-ne la utilització.
- Millorar la consultabilitat de les dades emmagatzemades.
- Minimitzar els problemes d’actualització (altes, baixes i modificacions) que poden sorgir en haver d’actualitzar simultàniament dades de diferents relacions.
Exemple de disseny relacional inadequat Considerem el disseny relacional de la taula.1 per enregistrar la informació dels professors amb els alumnes de cadascun i la qualificació que han obtingut en els diversos crèdits.
Taula Exemple de disseny relacional inadequat DniProf NomProfessor DniAlum NomAlumne Edat Credit Nota __________________________________________________________________________________ 33.333.333 Joan Finestra 77.777.777 Anna Taula 20 ADBD 4.5 33.333.333 Joan Finestra 88.888.888 Miquel Cadira 19 ADBD 5.7 33.333.333 Joan Finestra 77.777.777 Anna Taula 20 SGBD 6 33.333.333 Joan Finestra 88.888.888 Miquel Cadira 19 SGBD 7 44.444.444 Maria Porta 77.777.777 Anna Taula 20 MET 6 44.444.444 Maria Porta 88.888.888 Miquel Cadira 19 MET 5 44.444.444 Maria Porta 77.777.777 Anna Taula 20 LLC 4 44.444.444 Maria Porta 88.888.888 Miquel Cadira 19 LLC 3
Oi que convindreu que aquest disseny està pensat amb els peus? Ràpidament, hi veiem els problemes següents: * Hi ha informació repetida, fet que pot provocar inconsistències. Fixem-nos que en cas d’haver de modificar qualsevol dels valors dels camps que formen la clau primària (DniProf, NomProfessor, DniAlum, NomAlumne, Edat, Credit), el canvi s’ha d’efectuar en totes les files en què apareix aquest valor. * No hi pot haver valors nuls en les columnes que formen la clau primària. * Així, si no coneixem l’edat d’un alumne, tenim un greu problema. * En cas d’arribar a la conclusió que necessitem emmagatzemar més informació dels professors o dels alumnes, caldrà afegir més columnes i repetir la informació per a cada fila en què aparegui el professor o alumne. * Consultar la informació en la taula.1 pot esdevenir feixuc atesa la gran quantitat d’informació diferent que conté.
El mètode que proposa la teoria de la normalització per determinar si un disseny relacional és correcte consisteix a avaluar el disseny de totes les relacions (taules) per tal de veure en quin grau de normalitat es troba cadascuna i, així, poder decidir si el disseny ja és correcte o si cal refinar-lo.
La teoria de la normalització defineix les formes normals com a indicadors per avaluar el grau de normalitat de les relacions, i es diu que una relació està en una forma normal determinada quan satisfà un conjunt determinat de condicions.
Hi ha diferents graus de normalitat i, per tant, de formes normals, les quals compleixen la relació d’inclusió de la figura.1, que s’ha d’interpretar en el sentit que a mesura que augmenta el nivell de la forma normal, la relació ha de complir un conjunt de condicions més restrictiu i, per tant, continua verificant les condicions de les formes normals de nivell inferior.
Figura Relació d’inclusió entre les diverses formes normals
Així, doncs, l’objectiu hauria de ser aconseguir un esquema relacional en què totes les relacions tinguessin el grau màxim de normalitat, és a dir, en què totes es trobessin en la cinquena forma normal (5FN).
El procés de normalització per aconseguir que una relació que es troba en una forma normal X passi a estar en una forma normal Y superior a X consisteix sempre en la descomposició o subdivisió de la relació original (forma normal X) en dues o més relacions que verifiquin el nivell de forma normal Y.
Per tant, el procés de normalització augmenta el nombre de relacions presents en la base de dades. Amb això, segur que s’aconsegueix una disminució de redundàncies i una disminució de les anomalies en els problemes d’actualització de la informació, però, en canvi, es penalitzen les consultes, ja que la seva execució haurà d’anar a cercar la informació en moltes taules relacionades entre elles.
Així, doncs, cal trobar un equilibri, i de vegades pot ser convenient renunciar al nivell màxim de normalització (5FN) i, per tant, permetre una certa redundància en els esquemes amb la finalitat d’alleugerir els costos de les consultes. En aquestes situacions, es parla d’un procés de desnormalització.
El nostre objectiu final és conèixer les condicions que han de complir les relacions per assolir cadascun dels nivells de forma normal, i el procés per dividir les relacions en noves relacions que verifiquin les condicions desitjades. Per aconseguir-ho, hem de conèixer els conceptes de relació universal i dependència funcional.
La relació universal
En efectuar directament el disseny relacional d’una base de dades, el dissenyador es troba amb un conjunt de conceptes que tradueix en atributs, els quals, pel seu significat, agruparà en una o més relacions.
Anomenem relació universal la relació consistent en l’agrupament dels atributs corresponents a tots els conceptes que constitueixen una base de dades relacional.
Taula Relació universal per a un esquema relacional ideat per a una gestió de comandes de compra Num DataComanda Article Descripcio Qtat Preu DataPrevista NomProv PaisProv Moneda 22.523 25-05-2000 PC3-500 PC Pentium III a 500 5 150 1-06-2000 ARKANSAS XINA EUR 22.523 25-05-2000 PRO-15 Protector pantalla 15” 5 8 1-06-2000 ARKANSAS XINA EUR 22.524 27-05-2000 PC3-500 PC Pentium III a 500 15 145 5-06-2000 MELISSA ITÀLIA USD 22.524 27-05-2000 PRO-15 Protector pantalla 15” 15 50 5-06-2000 MELISSA ITÀLIA USD 22.525 27-05-2000 INK430 Cartutx de tinta 430 20 25 31-5-2000 ARKANSAS XINA EUR
Així, imaginem que es vol dissenyar una base de dades per al control de les comandes de compra d’una organització determinada. Imaginem que cal incloure-hi els conceptes corresponents a número i data de la comanda; codi, descripció, quantitat i preu pactat per cada article sol·licitat; data prevista de lliurament de la comanda; nom (NomProv) i país (PaisProv) del proveïdor; i moneda en què es pacta la comanda. La relació universal es representa en la taula.2.
Oi que hi ha molta redundància i poca organització? Evidentment, el disseny relacional d’una base de dades basat en la relació universal acostuma a ser del tot incorrecte, i fa necessari aplicar un procés de normalització per tal d’anar dividint la relació en altres relacions de manera que assoleixin graus de normalitat millors, és a dir, compleixin les restriccions corresponents a les formes normals més elevades.
Molt poques vegades es parteix de la relació universal. L’experiència dels dissenyadors provoca que, d’entrada, ja es pensi en relacions que assoleixen un cert grau de normalitat.
Dependències funcionals
Les definicions de les diferents formes normals, és a dir, el conjunt de condicions que les defineixen, es basen en el concepte de dependència funcional.
Donats dos atributs (o conjunts d’atributs) A i B d’una relació R, direm que B depèn funcionalment de A si per cada valor de A existeix un, i només un, valor de B associat amb ell. També direm que A implica B. Ho simbolitzarem per A B.
El concepte de dependència funcional estableix lligams entre atributs o conjunt d’atributs d’una mateixa relació.
Taula Relació universal per a un esquema relacional ideat per a una gestió de comandes de compra Num DataComanda Article Descripcio Qtat Preu DataPrevista NomProv PaisProv Moneda 22.523 25-05-2000 PC3-500 PC Pentium III a 500 5 150 1-06-2000 ARKANSAS XINA EUR 22.523 25-05-2000 PRO-15 Protector pantalla 15” 5 8 1-06-2000 ARKANSAS XINA EUR 22.524 27-05-2000 PC3-500 PC Pentium III a 500 15 145 5-06-2000 MELISSA ITÀLIA USD 22.524 27-05-2000 PRO-15 Protector pantalla 15” 15 50 5-06-2000 MELISSA ITÀLIA USD 22.525 27-05-2000 INK430 Cartutx de tinta 430 20 25 31-5-2000 ARKANSAS XINA EUR
En la relació universal de la taula.3 diríem que, entre d’altres, la data de comanda depèn funcionalment del número de comanda, igual que la data prevista, el nom i el país del proveïdor i la moneda. Ho podríem escriure com segueix:
Num –> DataComanda
Num –> DataPrevista
Num –> NomProv
Num –> PaisProv
Num –> Moneda
En tractar-se de diferents atributs que depenen funcionalment d’un mateix atribut, escriurem:
Num –> DataComanda, DataPrevista, NomProv, PaisProv, Moneda
Donats dos atributs (o conjunts d’atributs) A i B d’una relació R, direm que B té una dependència funcional completa o total de A si B depèn funcionalment de A però no depèn funcionalment de cap subconjunt de A.
És molt convenient representar les dependències funcionals d’una relació mitjançant un esquema de dependències funcionals. L’esquema per a la relació universal de la taula.3 seria el que es mostra en la figura.2.
Figura Exemple d’esquema de dependències funcionals
Fixem-nos que hem marcat els atributs que són clau d’alguna de les entitats que formen part de la relació: Article identifica l’article i Num identifica la comanda. Fixem-nos, també, que la parella (Num, Article) identifica la quantitat i preu dels articles demanats en la comanda.
En aquest esquema, es poden veure les dependències funcionals entre els atributs. Es veu que DataComanda, NomProv, Moneda i DataPrevista depenen funcionalment (1) de Num, que PaisProv depèn funcionalment (2) de NomProv, i que Descripció depèn funcionalment (3) d’Article. Així mateix, QtatiPreu depenen funcionalment (4) de Num i Article.
És evident que les dependències (1), (2) i (3) són totals, ja que la part esquerra de la dependència (l’implicador) està formada per un únic atribut i, per tant, és impossible que la part dreta de la dependència (l’implicat) pugui dependre d’un subconjunt de l’implicador. La dependència (4) també és total, ja que Qtat i Preu depenen de la parella (Num, Article) i no pas de cap subconjunt d’aquesta.
Una darrera apreciació sobre la dependència funcional (4) de la figura.2: veiem que en una mateixa comanda (Num) no és possible tenir diverses vegades el mateix article (Article), ja que els atributs Qtat i Preu depenen funcionalment de (Num, Article). En cas que fos necessari tenir diverses vegades el mateix article en una comanda, caldria utilitzar algun altre atribut per identificar l’article dins la comanda com, per exemple, el NumeroDeLinia de la comanda.
Donat un atribut o conjunt d’atributs A d’una relació, direm que A és un determinantde la relació si hi ha algun altre atribut o conjunt d’atributs B que té dependència funcional total de A.
En el cas anterior, veiem que Num, Article, NomProv i la parella (Num, Article) són determinants de la relació.
Donats A, B i C atributs o conjunts d’atributs d’una relació, direm que C depèn transitivament de A a través de B si B depèn funcionalment de A, C depèn funcionalment de B, i A no depèn funcionalment de B.
En l’exemple de la figura.2, podem dir que PaisProv depèn transitivament de Num a través de NomProv.
Primera forma normal
En aplicar el procés de normalització a una relació, es comença per comprovar si la relació està en primera forma normal i, si no és el cas, s’efectuen les modificacions oportunes per aconseguir-ho.
Una relació està en primera forma normal (1FN) si cap atribut pot contenir valors no atòmics (indivisible).
Considerem la relació universal de la taula.4.
La relació de la taula.4 no està en 1FN, ja que té atributs que poden contenir més d’un valor. Veiem que aquest exemple inclou tres files (comandes 22.523, 22.524 i 22.525), i alguns atributs (Article, Descripcio, QtatiPreu) tenen diversos valors per a algunes de les files.
El procés que s’ha de seguir per assolir una 1FN és afegir tantes files com sigui necessari per a cadascun dels diferents valors del camp o camps que tinguin valors no atòmics.
Així, en el nostre cas, obtenim la relació en 1FN de la taula.5.
Taula Relació que té atributs multivalor i, per tant, no es troba en 1FN Num DataComanda Article Descripcio Qtat Preu DataPrevista NomProv PaisProv Moneda 22.523 25-05-2000 PC3-500 , PRO-15 PC Pentium III a 500 , Protector Pantalla 15” 5, 5 150, 8 1-06-2000 ARKANSAS XINA EUR 22.524 27-05-2000 PC3-500 , PRO-15 PC Pentium III a 500 , Protector Pantalla 15” 15, 15 145, 50 5-06-2000 MELISSA ITÀLIA USD 22.525 27-05-2000 INK430 Cartutx de tinta 430 20 25 31-5-2000 ARKANSAS XINA EUR
Taula Relació en 1FN Num DataComanda Article Descripcio Qtat Preu DataPrevista NomProv PaisProv Moneda 22.523 25-05-2000 PC3-500 PC Pentium III a 500 5 150 1-06-2000 ARKANSAS XINA EUR 22.523 25-05-2000 PRO-15 Protector pantalla 15” 5 8 1-06-2000 ARKANSAS XINA EUR 22.524 27-05-2000 PC3-500 PC Pentium III a 500 15 145 5-06-2000 MELISSA ITÀLIA USD 22.524 27-05-2000 PRO-15 Protector pantalla 15” 15 50 5-06-2000 MELISSA ITÀLIA USD 22.525 27-05-2000 INK430 Cartutx de tinta 430 20 25 31-5-2000 ARKANSAS XINA EUR
De fet, la restricció que persegueix la 1FN forma part de la definició del model relacional i, per tant, tota relació, per definició, ha d’estar en 1FN. És a dir, aquesta forma normal és redundant amb la definició del model relacional i no caldria considerar-la. Es manté, però, per assegurar que les relacions dissenyades tenen un punt de partida correcte.
En general, les relacions en 1FN poden tenir molta informació redundant. Això no ens ha de preocupar, ja que la solució rau en les formes normals de nivell superior.