|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NormalitzacióJoan Puigcerver Ibáñez Introducció¶La normalització en les bases de dades relacionals és un procés de disseny que s'utilitza per a organitzar i estructurar les dades de manera eficient, on l'objectiu principal és reduir la redundància i millorar la integritat de les dades. Si és necessari aplicar la normalització, significa que el model d'entitat relació, o la transformació a model relacional no s'ha fet correctament i existeixen atributs redundants; per tant, serveix per a corregir allò que no ha sigut correctament dissenyat. 1NF: Primera Forma Normal¶La Primera Forma Normal (1NF) especifica que les taules no poden contindre valors repetits i que totes les cel·les d'una taula han de contindre valors atòmics. Un atribut és atòmic si i sols si no es pot dividir en altres atributs, per tant, no es permeten atributs compostos. La millor manera d'evitar valors repetits és definint una clau primària. L'objectiu d'aquesta normalització és augmentar la flexibilitat i la independència de les dades, i simplificar la definició d'aquestes. També obri la porta a una normalització addicional, que elimina la redundància i les anomalies. La majoria de SGBD relacionals no suporten registres ennierats (nested), per tant, les taules estan en primera forma normal per defecte. Exemple 1NF En el cas de la taula PERSONA(#dni, nom, cognom, data_naixement, telefons), podríem trobar els següents valors: Taula Persona
Es pot observar que la columna Telèfons emmagatzema múltiples valors i, per tant, aquesta taula no està en Primera Forma Normal. La solució és crear una taula relacional addicional: Taula Persona
Taula Telefon_Persona
2NF: Segona Forma Normal¶Es diu que una taula relacional està en Segona Forma Normal (2NF) quan està en 1NF, i a més, tots els atributs que no siguen cap clau tenen una dependència funcional completa cap a la clau primària. Es defineix com dependència funcional la relació entre dos atributs en una taula relacional, que defineix la manera en què els valors d'una columna determinen de manera única els valors d'una altra. Hi ha dos tipus:
Exemple Dependència Funcional En el cas de la taula PERSONA(#dni, nom, cognom, data_naixement).
Exemple 2NF En la taula DETALLS_COMANDA(#id_comanda, #producte, preu_producte, unitats) podríem trobar els següents valors: Taula Detalls Comanda
Aquesta taula està en 1NF, però, no obstant això,
podem determinar que no està en 2NF, ja que l'atribut Per solucionar-ho, podem separar la informació en dues taules relacionals: Taula Producte
Taula Detalls Comanda
3NF: Tercera Forma Normal¶Es diu que una taula relacional està en Tercera Forma Normal (3NF) quan està en 2NF, i a més, i que cap atribut no primari és transitivament dependent de la clau primària. Donats els atributs \(A\), \(B\), i \(C\), es diu que \(C\) és transitivament dependent de \(A\) si:
\[A \rightarrow B \rightarrow C\]
Exemple 3NF En la taula TORNEIG(#nom, #edicio, guanyador, data_naixement_guanyador) podríem trobar els següents valors: Taula Torneig
Aquesta taula està en 2NF, ja que es pot justificar que tots els atributs no primaris depenen d'una manera funcionalment completa
de la clau primària.
No obstant això, l'atribut \[ (nom, edicio) \rightarrow guanyador \rightarrow data\_naixement\_guanyador \]
Per solucionar-ho, hem de separar la informació en dues taules relacionals: Taula Torneig
Taula Jugador
BCNF: Forma Normal de Boyce-Codd¶Una taula està en Forma Normal de Boyce-Codd (BCNF) si i sols si està en 3NF i totes les relacions de dependència funcional depenen de la clau primària. Aquesta forma normal no és molt comuna, però apareix quan hi ha diferents claus candidates que haurien pogut esdevindre claus primàries i se solapen, és a dir, tenen almenys un atribut comú. Una relació formada pels atributs \(A\), \(B\), \(C\) i \(D\) on hi ha dues claus candidates compostes \((A, B)\) i \((B, C)\) i existeix una dependència funcional en els dos sentits entre \(A\) i \(C\), \((A \longleftrightarrow C)\), pot ser modelada de dues maneres:
La relació \(R(A, B, C, D)\) no estaria en BCNF. Exemple La taula CONDUCTOR_COTXE(#matricula, n_bastidor, #dni_conductor(PERSONA:#dni), data_inici) podríem trobar els següents valors: Taula Conductor Cotxe
Aquesta taula està en 3NF, però no en BCNF. En aquest cas, existeixen dues claus candidates
Per evitar la redundància de dades i determinar que totes les relacions de dependència han de dependre de la clau primària, podem eliminar les claus candidates que no formen part de la clau primària i emmagatzemar-les en una altra relació. Taula Conductor Cotxe
Taula Cotxe
4NF: Quarta Forma Normal¶Una taula està en Quarta Forma Normal (4NF) si i sols si està en 3NF o BCNF (qualsevol de les dues) i no existeixen dependències multivaluades. Una dependència multivaluada es dona en relacions on hi ha almenys tres atributs (\(A\), \(B\) i \(C\)) que formen part de la clau primària de la relació i per a un valor donat de \(A\) existeix un conjunt de valors ben definit dels atributs \(B\) i \(C\), però \(B\) i \(C\) són independents entre ells. Podeu consultar la definició formal a: https://en.wikipedia.org/wiki/Multivalued_dependency Exemple 4NF En la taula RESTAURANT_TIPUSPIZZA_AREAENVIAMENT(#restaurant, #tipus_pizza, #area_enviament) podríem trobar els següents valors: Taula Restaurant / Tipus Pizza / Àrea Enviament
Cada fila indica que un restaurant concret pot entregar un tipus de pizza donat en una zona donada, el que podria constituir una relació ternària. Aquesta taula està en FNBC, ja que sols conté una clau primària única i no té cap atribut no-clau. No obstant això, si la varietat de la pizza és independent de l'àrea d'enviament, existeix una dependència multivaluada i una redundància de les dades. Si A1 Pizza comença a produir pizzes del tipus Vora de formatge, hem d'afegir un registre per cada àrea d'enviament. Per satisfer la 4NF cal separar cada relació en una taula: Taula Restaurant / Tipus Pizza
Taula Restaurant / Àrea Enviament
No obstant això, si les varietats de pizza que poden ser oferides per un restaurant varien dependent de l'àrea d'enviament, la taula original sí que satisfaria la 4FN. 5NF: Quinta Forma Normal¶Una taula està en Quinta Forma Normal (5NF), també coneguda com la Forma Normal de Projecció-Unió (PJ/NF), si i sols si està en 4NF i cada dependència d'unió en ella està implicada amb claus candidates i no existeixen restriccions imposades per la base de dades.
Desnormalització¶El procés de normalització implica la creació de taules relacionals addicionals per evitar la redundància de dades, però pot afectar el rendiment de les bases de dades, ja que el motor de bases de dades ha de relacionar i combinar els valors de moltes taules per realitzar les consultes. El procés de desnormalització consisteix en la duplicació intencionada de les dades per evitar crear moltes taules addicionals i afectar el rendiment i la complexitat del disseny de la base de dades. Normalment, es busca un equilibri entre buscar que la redundància de dades siga mínima, sense afectar massa el rendiment de la base de dades. Un bon nivell per parar està entre 3NF, BCNF i 4NF, encara que està bé considerar totes les possibilitats i triar entre els dissenys resultants.
Bibliografia¶
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent
a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||