M2 - Bases de dades / UF1NF3: Normalització

De wikiserver
Dreceres ràpides: navegació, cerca

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
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

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.

Relació que té atributs multivalor i, per tant, no es troba en 1FN

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.

Preservació d'informació i dependències en la normalització

          Natural Join de R1*R2

          L’operació de Natural Join és la combinació de totes les dades de la primera relació (R1) amb totes les 
          de la segona (R2), sempre que els valors de les dades de les columnes anomenades de forma idèntica a les 
          dues relacions coincideixin.

En el procés de normalització d’una relació R s’apliquen processos de descomposició per aconseguir relacions R1, R2, …, Rn que verifiquin un nivell de normalització superior al de la relació R. La descomposició consisteix a efectuar projeccions de la relació R sobre atributs que verifiquen certes condicions, la qual cosa dóna lloc a l’aparició de R1, R2, …, Rn.

Cal garantir que la descomposició de R en R1, R2, …, Rn preservi la informació existent, és a dir, que el natural-join R1 * R2 * … * Rn proporcioni exactament la mateixa informació que tenia la relació R original, tant enintensió (quantitat d’atributs) com en extensió (quantitat de files).

De la mateixa manera caldria garantir la conservació de les dependències, és a dir, el conjunt de dependències associades a la relació R original ha de ser equivalent al conjunt de dependències associat a les relacions R1, R2, …, Rn.

Ja podem avançar que la conservació de les dependències no es pot garantir en tots els processos de normalització.

Segona forma normal

La segona forma normal persegueix l’eliminació dels problemes motivats per la presència de dependències funcionals no totals dels atributs que no formen part de la clau primària respecte a la clau primària.

          Una relació està en segona forma normal (2FN) si està en 1FN i tot atribut que no pertany a la clau té 
          dependència funcional total de la clau. 

Considerem la relació següent en 1FN ideada per a la gestió de comandes de compra en una organització:

          R (__Num__, DataComanda, __Article__, Descripcio, Qtat, Preu, DataPrevista, NomProv, PaisProv, Moneda)
Esquema de dependències funcionals

Veiem que la clau primària està formada per la parella (Num, Article) i que, en l’esquema de dependències funcionals associat (figura 2.3), hi ha atributs fora de la clau primària que no tenen dependència funcional completa de la clau.

En efecte, les dependències funcionals (1), (2) i (3) ens presenten atributs que no tenen dependència funcional total de la clau, formada per la parella (Num, Article).

         El procés que s’ha de seguir per assolir una 2FN és dividir la relació (conservant la informació i les dependències)
         en tantes relacions com sigui necessari de manera que cada relació verifiqui que els seus atributs no-clau tenen 
         dependència funcional total de la clau. 

L’esquema de dependències funcionals ajuda a veure les relacions que han d’aparèixer. Així, en el nostre cas, de les dependències (1), (3) i (4) obtenim les relacions en 2FN:

         COMANDA (__Num__, DataComanda, DataPrevista, Moneda, NomProv, PaisProv) 
         ARTICLE (__Article__, Descripcio) 
          DETALL (__Num__, __Article__, Qtat, Preu) 
                  comanda  article

És molt probable que aquest disseny fos el proposat com a punt de partida, és a dir: sovint, en efectuar un disseny ja obtindrem relacions que estan en 2FN i, fins i tot, en formes normals de nivell superior.

La informació que hi ha en la taula 2.6 corresponent a la relació que acabem de normalitzar ara passa a estar repartida en tres taules (taula 2.7, taula 2.8 i taula 2.9).

Relacions 2FN

Per acabar, fixem-nos que amb el nou disseny s’ha aconseguit eliminar molta redundància i, per tant, es redueixen els problemes en les operacions d’actualització i consulta. Però no desapareixen tots.

Tercera forma normal



Forma normal de Boyce-Codd

Quarta forma normal

Cinquena forma normal

Desnormalització