NORMALIZACIÓN

La normalización es un término que deriva de la metodología que se utiliza para evitar la
redundancia de datos y el fácil acceso y actualización de estos. Esta metodología consiste
en un conjunto de normas llamadas formas normales, numeradas desde la 1 a la !.
Lo importante de esta metodología es que para que una relación esté en " forma normal
#$%& de'e anteriormente estar en 1 $%, para estar en ( $% de'e estar en " $% y por
transitividad, de'e estar en 1 $%.
Conceptos fundamentales para la compresión
Dependencia funcional
)omo su nom're lo indica, está fuertemente relacionado a los conceptos matemáticos
aplicados al concepto de función.
*upongamos que tenemos una relación compuesta por un conjunto de atri'utos y tomemos
a +,- e +y- atri'utos de esta relación #la forma x e y es un generalización de los atri'utos&.
*e define como dependencia funcional entre , e y de una relación . cualquiera si +para una
relación . el atri'uto +y- de . depende funcionalmente del atri'uto +,- de . si y sólo sí un
valor de +y- en . está asociado a cada valor de +,- en .-.
Aplicación de las diferentes formas normales
Ejemplo/ *upongamos que tenemos el siguiente modelo relacional/
0enta
%ro$actura
)ódigo1.roducto
2escripción1.rod
.recio3nitario1.rod
)ant10endida1.rod
)ódigo1)liente
%om're1)liente
$ec4a1de10enta
Modelo relacional que contiene la relación Venta
Definición:
Una función es una relación entre dos variables en la cual a cada valor de la
primera le corresponde un único valor de la segunda.
or e!emplo: f"x# $ %x & '( )y* est+ en función de )x*.
Primera Forma Normal
La 1 $% solicita que se cumplan dos condiciones so're la relación #entidad o ta'la&/
• 2e'e e,istir una clave primaria
• 5segurar la integridad de los datos eliminando los grupos repetitivos.
*i miramos nuestra relación veremos que para una venta realizada en una determinada
fec4a con un n6mero de factura para un mismo cliente, por cada producto que compre el
cliente, sucederá algo como lo que se ve en la 7a'la 1.
NroFactura Cod_Prod Descrip_Prod P_Prod Cant!end_Prod Cod_Cli Nom"_Cli Fec#a_!ta
( " 8artillo "9,:9 1! ;<; =uan .érez 9">9(>9<
( ! )lavo 9,;9 (99 ;<; =uan .érez 9">9(>9<
( ? )lavo 1,"9 "99 ;<; =uan .érez 9">9(>9<
( 1! 2estornillador <,!9 ; ;<; =uan .érez 9">9(>9<
Los atri'utos #campos& %ro$actura, )od1cliente, %om're1)liente y $ec4a1de10enta se
repiten en la ta'la por cada aparición diferente de )od1.roducto, .recio3nitario1.rod y
2escripción1.roducto. Estos 6ltimos atri'utos #los referentes al producto& no están
cumpliendo con la segunda condición definida para que una relación se encuentre en 1 $%
y por ellos los campos correspondientes a la venta y el cliente se repiten en cada registro, a
esto se lo llama redundancia de datos.
*upongamos que el cliente se mudara, se estaría o'ligado con este esquema de
representación a actualizar los domicilios en todos los registros de la relación venta donde
aparezca el cliente en cuestión, lo que no sería una tarea grata.
En esta relación la clave primaria es el %ro. de $actura #%ro$actura&.
• ,Cómo -acemos para que la relación Venta quede en ./ 012
.asos para lograr que una relación quede en 1 $%
1@ Eliminar de la relación original el o los atri'utos que no posean unívocamente valores
atómicos #o sea los que son grupos repetitivos&.
"@ *eleccionar la clave primaria de la relación original.
(@ )rear una nueva relación que posea los atri'utos que son repetitivos y fueron eliminados
de la relación original.
:@ El atri'uto que es la clave primaria en la relación original será parte o formará parte de la
clave primaria de la nueva relación.
!@ 2ar un nom're a la nueva relación y definir su clave primaria.
7eniendo en cuenta los pasos anteriores, proceder de manera que la relación 0enta quede
en 1 $%.
3!emplo:
1@ Eliminar de la relación 0E%75 los siguientes atri'utos/ Códi$o_Producto%
Descripción_Prod% Precionitario_Prod & Cant_!endida_Prod'
"@ *eleccionar como clave primaria de la relación venta el atri'uto NroFactura.
(@ 2efinir una nueva relación con los siguientes atri'utos/ Códi$o_Producto%
Descripción_Prod% Precionitario_Prod & Cant_!endida_Prod'
:@ 5gregar a la nueva entidad el atri'uto %ro$actura que formará parte de la clave primaria
de la nueva entidad.
!@ 2efinir la relación con el nom're 2E75LLE10E%75 y tomar como clave primaria de la
relación a los atri'utos NroFactura y Códi$o_Producto
)omo consecuencia queda el siguiente modelo relacional/
!(N)A
). %ro$actura
)ódigo 1 cliente
%om're 1 cliente
$ec4a1de10enta
D()ALL(_!(N)A
).
%ro$actura
)ódigo 1 producto
2escripción1.rod
.recio3nitario1.rod
)ant10endida1.rod
0E%75
NroFactura Códi$o _ cliente Nom"re _ cliente Fec#a_de_!enta
( ;<; =uan .érez 9">9(>9;
2E75LLE 0E%75
NroFactura Códi$o_Producto Descripción_Prod Precionitario_Prod Cant_!endida_Prod
( " 8artillo "9,: 1!
( ! )lavo 9,; (99
( ? 7aladro 1"9 "
( 1! 2estornillador <,! ;
5m'as relaciones 4an quedado en 1 $% con sus correspondientes claves primarias
definidas y se muestra como se preservan los datos en am'as ta'las sin pérdida de
información con respecto a las tuplas de la entidad venta original.
*e$unda Forma Normal
.ara que una relación se encuentre en " $% de'e satisfacer las siguientes condiciones/
• 2e'e estar en 1 $%.
• 7odos los atri'utos no clave dependen funcionalmente de la clave primaria.
En el ejemplo de la relación 0E%75 que esta'a en 1 $% tam'ién se encuentra en " $%,
pero la relación 2E75LLE10E%75 que se encuentra en la 1 $% no se encuentra en " $%.
El atri'uto Descripción_Prod depende funcionalmente Códi$o_Producto que forma parte
de la clave primaria de esta relación, pero no depende funcionalmente del atri'uto
NroFactura que tam'ién es uno de los atri'utos que forman parte de la clave primaria de la
relación. En cam'io los atri'utos Cant_!endida_Prod y Precionitario_Prod dependen
funcionalmente de am'os atri'utos, que forman la clave primaria.
1ota .: 4a segunda condición de la '/ 01 solo debe verificarse cuando la clave primaria de la
relación en cuestión es una clave primaria compuesta "es decir( algún atributo no clave depende de
uno de los atributos de la clave( pero no de la totalidad de ellos#( ya que cuando es de un solo atributo
esta condición ser+ verdadera.
1ota ': Dependiendo de las reglas de negocio el atributo recioUnitario5rod podr6a poseer una
dependencia funcional completa de la clave primaria. 3n nuestro caso( se asume que el precio
unitario podr6a variar con el transcurso del tiempo7 pero si aceptamos que el precio de un producto es
invariable( este atributo depender6a parcialmente de la clave( ya que depender6a únicamente del
código de producto.
• ,Cómo -acemos para que la relación D3894435V3189 quede en '/ 012
.asos para lograr que una relación quede en " $%
1@ Eliminar de la relación original el o los atri'utos que no dependan funcionalmente por
completo de la clave primaria.
"@ )rear una nueva relación que posea como atri'utos el o los atri'utos eliminados de la
relación original.
(@ 5gregar a dic4a relación el atri'uto de la clave primaria de la relación original del cual
dependían funcionalmente los atri'utos no claves de la relación original.
:@ El atri'uto del punto anterior será tomado como clave primaria de la nueva relación.
!@ 2arle un nom're a la nueva relación.
7eniendo en cuenta los pasos anteriores, proceder de manera que la relación 0enta quede
en " $%.
3!emplo:
1@ *acaremos de la relación D3894435V3189 el atributo Descripción_Prod.
"@ )rearemos una nueva relación que contenga el atri'uto Descripción_Prod.
(@ 5gregaremos a dic4a relación el atri'uto Códi$o_Producto.
:@ *e define el atri'uto Códi$o_Producto como clave primaria de dic4a relación.
!@ Llamamos a dic4a relación :;DUC8;<.
)omo consecuencia queda el siguiente modelo relacional en " $%/
!(N)A
). %ro$actura
)ódigo 1 cliente
%om're 1 cliente
$ec4a1de10enta
PRODC)O*
).
)ódigo 1 producto
2escripción1 producto
D()ALL(_!(N)A
).
%ro$actura
)ódigo 1 producto
.recio3nitario1.rod
)ant10endida1.rod
0E%75
NroFactura Códi$o _ cliente Nom"re _ cliente Fec#a_de_!enta
( ;<; =uan .érez 9">9(>9;
2E75LLE10E%75
NroFactura Códi$o_Producto Precionitario_Prod Cant_!endida_Prod
( " "9,: 1!
( ! 9,; (99
( ? 1"9 "
( 1! <,! ;
.AB23)7B
Códi$o_Producto Descripción_Prod
" 8artillo
! )lavo
? 7aladro
1! 2estornillador
Las tres relaciones se encuentran en " $% y además se muestran los valores de la ta'la
original, sin pérdida de información y sin redundancia.
)ercera Forma Normal
.ara que una relación se encuentre en ( $% de'e cumplir las siguientes condiciones/
1@ 2e'e estar en " $%.
"@ %ing6n atri'uto no clave es función dependiente de cualquier otro atri'uto #es decir si
todos los atri'utos no claves dependen de manera no transitiva de la clave primaria&.
En nuestro ejemplo, las relaciones 2E75LLE10E%75 y .AB23)7B* satisfacen am'as
condiciones, pero no sucede lo mismo con la relación 0E%75, ya que los atri'utos
%om're1cliente y 2omicilio1)liente dependen funcionalmente del atri'uto )ódigo1)liente
que no es un atri'uto clave y no dependen funcionalmente del atri'uto %ro$actura que es la
clave primaria.
.asos para lograr que una relación quede en ( $%
1@ Eliminar de la relación original los atri'utos no claves que dependen de manera no
transitiva de la clave primaria.
"@ )rear una nueva relación que contenga como atri'utos el o los atri'utos eliminados de la
relación original.
(@ )opiar el atri'uto no clave de la relación original del cual dependían transitivamente los
atri'utos no claves eliminados de dic4a relación.
:@ 2efinir el atri'uto del punto anterior como clave primaria de la nueva relación.
!@ 2arle un nom're a la nueva relación.
!(N)A
). %ro$actura
)ódigo 1 cliente
$ec4a1de10enta
D()ALL(_!(N)A
).
%ro$actura
)ódigo 1 producto
.recio3nitario1.rod
)ant10endida1.rod
PRODC)O*
).
)ódigo 1 producto
2escripción1 producto
7eniendo en cuenta los pasos anteriores, proceder de manera que la relación 0enta quede
en ( $%.
3!emplo:
1@ Eliminaremos de la relación 0enta los atri'utos denominados %om're1)liente y
2omicilio1)liente.
"@ )rearemos a continuación una relación nueva con los atri'utos %om're1)liente y
2omicilio1)liente.
(@ )opiaremos el atri'uto )ódigo1)liente a esta nueva relación.
:@ 2efiniremos al atri'uto )ódigo1)liente como clave primaria de esta relación.
!@ 2aremos el nom're )LCE%7E* a la nueva relación.
CLI(N)(
).
)ódigo 1 cliente
%om're1)liente
)on lo cual queda un modelo relacional en ( $% como el que sigue/
0E%75
NroFactura Códi$o _ cliente Fec#a_de_!enta
( ;<; 9">9(>9;
)LCE%7E
Códi$o _ cliente Nom"re _ cliente
;<; =uan .érez
2E75LLE10E%75
NroFactura Códi$o_Producto Precionitario_Prod Cant_!endida_Prod
( " "9,: 1!
( ! 9,; (99
( ? 1"9 "
( 1! <,! ;
.AB23)7B
Códi$o_Producto Descripción_Prod
" 8artillo
! )lavo
? 7aladro
1! 2estornillador
Inte$ridad del modelo de datos
*e dice que una clave primaria es un atri'uto 6nico o el resto de los atri'utos no claves
dependen funcionalmente de ella, pero 4ay algo que no se mencionó/ que las claves
primarias no pueden contener el valor nulo o null como valor válido #ya que una clave
primaria no puede ser indefinida&. )on lo cual la primera condición de integridad que de'e
cumplir un modelo relacional es que la clave primaria no puede contener valores nulos.
3na clave primaria es el atri'uto o conjunto de atri'utos que nos permite identificar
unívocamente a cada tupla de la relación y el valor nulo en un atri'uto indica la indefinición o
desconocimiento de su valor, por ende poco podría servir como clave primaria un atri'uto o
conjunto de atri'utos con valor desconocido.
Esto además está relacionado con el concepto de modelo relacional, que es una simulación
o representación del mundo real, por ende es muy poco pro'a'le que en el mundo real
e,istan elementos indefinidos o no identifica'les sin am'igDedad.
E,iste otro concepto su'yacente al de clave primaria, y es el de clave foránea o clave
e,terna o clave ajena #todas formas diferentes de llamar lo mismo& el cual implica lo
siguiente/ una clave e,terna es un atri'uto o conjunto de atri'utos de una relación . cuyos
valores de'en coincidir con el valor o los valores de los atri'utos que componen la clave
primaria de alguna relación E.
Los valores de la clave foránea y los de la clave primaria asociada con esa calve foránea
pertenecen a un mismo dominio. .ara entender el concepto de clave foránea daremos un
ejemplo. Aetomando el modelo relacional anterior, si nos fijamos el )ódigo1)liente de la
relación 0enta es clave foránea de la clave primaria )ódigo1)liente de la relación )liente.
La segunda condición de integridad del modelo relacional es la de integridad referencial que
pide que no e,istan valores para las claves foráneas sin coincidencias con los valores de las
claves primarias asociada a ella.
0eamos con un ejemplo que es lo que está pidiendo esta " condición.
!(N)A
). %ro$actura
)ódigo 1 cliente
%om're 1 cliente
$ec4a1de10enta
PRODC)O*
).
)ódigo 1 producto
2escripción1 producto
D()ALL(_!(N)A
).
%ro$actura
)ódigo 1 producto
.recio3nitario1.rod
)ant10endida1.rod
Este modelo no podría tener registrada una venta para un cliente ine,istente, ya que eso no
cumpliría la condición de integridad referencial. Lógicamente, en la vida real sólo es válido
realizar una venta a un cliente e,istente y no tendría sentido realizar una venta a un cliente
ine,istente a no ser que se deseara realizar una estafa o manio'ra fraudulenta y no es la
idea permitir que esto suceda. *in em'argo, es facti'le tener registrado uno o más clientes y
que ellos no realicen ninguna compra.
Ejemplo del modelo relacional terminado/
!(N)A
). %ro$actura
)E1 )ódigo@cliente
$ec4a1de10enta
PRODC)O*
).
)ódigo@cliente
%om're 1 cliente
D()ALL(_!(N)A
)., )E1
)., )E"
%ro$actura
)ódigo@producto
.recio3nitario1.rod
)ant10endida1.rod
PRODC)O*
).
)ódigo@producto
2escripción1 producto
8odelo relacional normalizado y con la integridad referencial definida
La punta de flec4a indica la cardinalidad de 1 y la línea continua donde termina la flec4a
indica muc4os #esta es una de las tantas formas de indicar la cardinalidad&. Esto se leería,
visto de la relación )liente/ +3n cliente tiene muc4as ventas- o dic4o de otra manera visto de
la relación 0enta/ +8uc4as ventas son de un cliente-.
Lo mismo se podría 4acer con 0enta y 2etalle10enta, parados en 0enta diría +3na venta
posee muc4os detalles de venta- y parados en 2etalle10enta diría +8uc4os detalles de
venta pertenecen a una venta-F parados en .roductos diría +3n producto puede e,istir en
muc4os detalles de venta- y parados en 2etalle10enta diría +8uc4os detalles de venta
contienen un producto-