2.3.1-Ejemplo Práctico PDF
2.3.1-Ejemplo Práctico PDF
2.3.1-Ejemplo Práctico PDF
Práctico
Base de Datos I
1
Normalización
La normalización es una técnica para diseñar la estructura lógica de los datos de un
sistema de información en el modelo relacional, desarrollada por E. F. Codd en
1972. Las ventajas de la normalización son las siguientes:
La normalización se lleva a cabo en una serie pasos. Cada paso corresponde a una
forma normal que tiene unas propiedades. Conforme se va avanzando en la
normalización, las relaciones tienen un formato más estricto (más fuerte) y, por lo
tanto, son menos vulnerables a las anomalías de actualización. El modelo relacional
sólo requiere un conjunto de relaciones en primera forma normal. Las restantes
formas normales son opcionales. Sin embargo, es recomendable llegar al menos a
la tercera forma normal, un modelo de tablas que cumple con la tercera forma
normal se lo denomina como “Normalizado”.
Una relación está en primera forma normal si y sólo si, todos los dominios de la
misma contienen valores atómicos, es decir, no hay grupos repetitivos. Si se ve la
relación gráficamente como una tabla, estará en 1FN si tiene un solo valor en la
intersección de cada fila con cada columna.
Si una relación no está en 1FN, hay que eliminar de ella los grupos repetitivos. Un
grupo repetitivo será el atributo o grupo de atributos que tiene múltiples valores
para cada tupla de la relación. Hay dos formas de eliminar los grupos repetitivos.
En la primera, se repiten los atributos con un solo valor para cada valor del grupo
repetitivo. De este modo, se introducen redundancias ya que se duplican valores,
pero estas redundancias se eliminarán después mediante las restantes formas
normales. La segunda forma de eliminar los grupos repetitivos consiste en poner
cada uno de ellos en una relación aparte, heredando la clave primaria de la relación
en la que se encontraban.
2
Segunda forma normal (2FN)
Una relación está en segunda forma normal si, y sólo si, está en 1FN y, además,
cada atributo que no está en la clave primaria es dependiente de la clave primaria
completa.
La 2FN se aplica a las relaciones que tienen claves primarias compuestas por dos o
más atributos. Si una relación está en 1FN y su clave primaria es simple (tiene un
solo atributo), entonces también está en 2FN. Las relaciones que no están en 2FN
pueden sufrir anomalías cuando se realizan actualizaciones.
Para pasar una relación en 1FN a 2FN hay que eliminar las dependencias parciales
de la clave primaria. Para ello, se eliminan los atributos que son funcionalmente
dependientes y se ponen en una nueva relación con una copia de su determinante
(los atributos de la clave primaria de los que dependen).
Una relación está en tercera forma normal si, y sólo si, está en 2FN y, además, cada
atributo que no está en la clave primaria no depende transitivamente de la clave
primaria. La dependencia es transitiva si existen las dependencias A B, siendo A y
B, atributos o conjuntos de atributos de una misma relación.
Aunque las relaciones en 2FN tienen menos redundancias que las relaciones en
1FN, todavía pueden sufrir anomalías frente a las actualizaciones. Para pasar una
relación de 2FN a 3FN hay que eliminar las dependencias transitivas. Para ello, se
eliminan los atributos que dependen transitivamente y se ponen en una nueva
relación con una copia de su determinante (el atributo o atributos no clave de los
que dependen).
Una relación está en la forma normal de Boyce-Codd si, y sólo si, todo determinante
es una clave candidata.
3
Ampliando con Ejemplos en cada una de las Formas Normales
Según la definición de Date de la 1FN, una tabla está en 1FN “si y solo si” es
"isomorfa” a alguna relación", lo que significa, específicamente, que satisface las
siguientes cinco condiciones:
• Una tabla que carece de una clave primaria. Esta tabla podría
acomodar filas duplicadas, en violación de la condición 3.
• Una vista cuya definición exige que los resultados sean
retornados en un orden particular, de modo que el orden de la
fila sea un aspecto intrínseco y significativo de la vista. Esto viola
la condición Nro. 1. Las tuplas en relaciones verdaderas no están
ordenadas una con respecto de la otra.
• Una tabla con por lo menos un atributo que pueda ser nulo. Un
atributo que pueda ser nulo estaría en violación de la condición
4, que requiere a cada campo contener exactamente un valor de
su dominio de columna. Sin embargo, debe ser observado que
este aspecto de la condición 4 es controvertido. Muchos autores
consideran que una tabla está en 1FN si ninguna clave candidata
puede contener valores nulos, pero se aceptan éstos para
atributos (campos) que no sean clave, según el modelo original
de Codd sobre el modelo relacional, el cual hizo disposición
explícita para los nulos.
Grupos repetidos
La cuarta condición de Date, que expresa "lo que la mayoría de la gente piensa
como la característica que define la 1FN", concierne a grupos repetidos. El siguiente
ejemplo ilustra cómo un diseño de base de datos puede incorporar la repetición de
grupos, en violación de la 1NF.
4
Suponga que un diseñador principiante desea guardar los nombres y los números
telefónicos de los clientes. Procede a definir una tabla de cliente como la que sigue:
Cliente
ID Cliente Nombre Apellido Teléfono
123 Rachel Ingram 555-861-2025
456 James Wright 555-403-1659
555-776-4100
789 Maria Fernández 555-808-9633
Asumiendo, sin embargo, que la columna "Teléfono" está definida en algún tipo de
dominio de número telefónico (por ejemplo, el dominio de cadenas de 12
caracteres de longitud), la representación de arriba no está en 1FN. La 1FN (y, para
esa materia, el RDBMS) prohíbe a un campo contener más de un valor de su
dominio de columna.
Cliente
ID Cliente Nombre Apellido Teléfono 1 Teléfono 2 Teléfono 3
123 Osvaldo Ingram 555-861-2025
Sin embargo, esta representación hace uso de columnas que permiten valores
nulos, y por lo tanto no se conforman con la definición de la 1NF de Date. Incluso si
se contempla la posibilidad de columnas con valores nulos, el diseño no está en
5
armonía con el espíritu de 1NF. Teléfono 1, Teléfono 2, y Teléfono 3, comparten
exactamente el mismo dominio y exactamente el mismo significado; el dividir del
número de teléfono en tres encabezados es artificial y causa problemas lógicos.
Estos problemas incluyen:
Cliente
ID Cliente Nombre Apellido Teléfono
123 Rachel Ingram 555-861-2025
456 James Wright 555-403-1659, 555-776-4100
789 Maria Fernández 555-808-9633
Un diseño que está inequívocamente en 1FN hace uso de dos tablas: una tabla de
cliente y una tabla de teléfono del cliente.
6
Cliente
Atomicidad
Hugh Darwen y Chris Date [Date, 1998] han sugerido que el concepto de Codd de
un "valor atómico" es ambiguo, y que esta ambigüedad ha conducido a una extensa
confusión sobre cómo debe ser entendida la 1NF. En particular, la noción de un
"valor que no puede ser descompuesto" es problemática, pues parecería implicar
que pocos, si algún, tipos de datos son atómicos:
7
Cualquier tabla que esté en la segunda forma normal (2NF) o más arriba, también
está, por definición, en 1NF (cada forma normal tiene criterios más rigurosos que
su precursor). Por una parte, una tabla que está en 1NF puede o no puede estar en
2NF; si está en 2NF, puede o no puede estar en 3NF, y así sucesivamente.
Las formas normales más arriba que la 1NF son pensadas para ocuparse de las
situaciones en las que una tabla sufre de problemas de diseño que pueden
comprometer la integridad de los datos dentro de ella. Por ejemplo, la tabla
siguiente está en 1NF, pero no está en 2NF y por lo tanto es vulnerable a
inconsistencias lógicas:
Dirección de correo del subscriptor
En términos levemente más formales: una tabla 1NF está en 2NF si y sólo si ninguno
de sus atributos no-principales son funcionalmente dependientes en una parte
(subconjunto apropiado) de una clave candidata. (Un atributo no-principal es uno
que no pertenece a ninguna clave candidata).
Observe que cuando una tabla 1NF no tiene ninguna clave candidata compuesta
(claves candidatas consistiendo en más de un atributo), la tabla está
automáticamente en 2NF.
8
Ejemplo
Las anomalías de actualización no pueden ocurrir en estas tablas, las cuales están
en 2NF.
Sin embargo, no todas las tablas 2NF están libres de anomalías de actualización. Un
ejemplo de una tabla 2NF que sufre de anomalías de actualización es:
Ganadores del torneo
9
Figura 4. Tabla de Ganadores del Torneo
Una tabla o relación que tiene una clave primaria simple, está en 2FN, por no poder
existir una dependencia parcial con parte de la clave, por que ésta tiene un solo
atributo o columna.
Requerir que los atributos no-clave sean dependientes en la clave completa asegura
que una tabla esté en 2NF; un requerimiento posterior que los atributos no-clave
sean dependientes de nada excepto la clave asegura que la tabla esté en 3NF.
Chris Date refiere al resumen de Kent como "una intuitiva atractiva caracterización"
de la 3NF, y observa que con una ligera adaptación puede servir como definición
10
ligeramente más fuerte de la forma normal de Boyce-Codd: "Cada atributo debe
representar un hecho acerca de la clave, la clave entera, y nada excepto la clave".
[5]
La versión 3NF de la definición es más débil que la variación de BCNF de Date,
pues el anterior se refiere solamente a asegurarse de que los atributos no-clave son
dependientes en las claves. [Date, 1998].
Ejemplo
Un ejemplo de una tabla 2NF que falla en satisfacer los requerimientos de la 3NF
es:
Para expresar los mismos hechos sin violar la 3NF, es necesario dividir la tabla en
dos:
11
Cleveland Open 1999 Bob Albertson
Des Moines Masters 1999 Al Fredrickson
Indiana Invitational 1999 Chip Masterson
Normalización CERO
Usuarios
12
Tabla 1. Sin forma normal
Diríamos que la anterior tabla esta en nivel de Normalización Cero porque ninguna
de nuestras reglas de normalización ha sido aplicada. Observa los campos url1 y
url2 ¿Qué haremos cuando en nuestra aplicación necesitemos una tercera url?
¿Quieres tener que añadir otro campo/columna a tu tabla y tener que reprogramar
toda la entrada de datos de tu código PHP? Se quiere crear un sistema funcional
que pueda crecer y adaptarse fácilmente a los nuevos requisitos. Aplicaremos las
reglas del Primer Nivel de Formalización-Normalización.
Es notable que la tabla esta rompiendo la primera regla cuando repetimos los
campos url1 y url2 ? ¿Y que pasa con la tercera regla, la clave primaria? Las
columnas definidas no permiten identificar cada fila, porque ¿Qué pasaría si
tuviéramos dos usuarios llamados Joe y queremos diferenciarlos? Para este
problema se puede definir una clave artificial que se puede implementar en los
motores de base de datos con un campo auto incrementable o con el uso de un
objeto secuencia. Veamos como quedó la tabla:
Usuarios
dirección _ empresa
userId Nombre empresa url
Ahora diremos que nuestra tabla está en el primer nivel de F/N. Hemos solucionado
el problema de la limitación del campo url. Pero sin embargo vemos otros
problemas....Cada vez que introducimos un nuevo registro en la tabla usuarios,
tenemos que duplicar el nombre de la empresa y del usuario. No sólo nuestra BD
crecerá muchísimo, sino que será muy fácil que la BD se corrompa si escribimos
mal alguno de los datos redundantes. Aplicaremos pues la segunda Forma Normal:
13
Segunda Forma Normal
Hemos separado el campo url en otra tabla, de forma que podemos añadir más en
el futuro si tener que duplicar los demás datos. También vamos a usar nuestra clave
primaria para relacionar estos campos:
Usuarios
urlid url
relUserId
1 1 abc.com
2 2 xyz.com
3 1 abc.com
4 2 xyz.com
Se agrega una columna que numera las relaciones usuarios y url, llamada
urlid que también puede implementarse con una secuencia. ¿Pero que
ocurre cuando queremos añadir otro empleado a la empresa ABC? ¿O 200
empleados? Ahora tenemos el nombre de la empresa y su dirección
duplicándose, otra situación que puede inducirnos a introducir errores en
nuestros datos. Así que tendremos que aplicar el tercer nivel de F/N:
14
Nuestro nombre de empresa y su dirección no tienen nada que ver con el
campo userId, así que tienen que tener su propio empresaId:
Usuarios
1 Joe 1
2 Jill 2
Empresas
Urlid url
relUserId
1 1 abc.com
2 1 xyz.com
3 2 abc.com
4 2 xyz.com
RESUMEN
En la tabla siguiente se describe brevemente cada una de las reglas
Regla Descripción
15
Primera Forma Normal (1FN) Incluye la eliminación de todos los grupos repetidos.
16
Referencias Bibliográficas
[Date, 1998] Date, Chris, Introducción a los Sistemas de Base de Datos. - DATE -
Quinta y Septima - 1998 - addison-wesley - Mexico
17