Anda di halaman 1dari 4

El proceso de normalizacin de bases de datos consiste en aplicar una serie de reglas a las

relaciones obtenidas tras el paso del modelo entidad-relacin al modelo relacional.


Las bases de datos relacionales se normalizan para:

Evitar la redundancia de los datos.

Evitar problemas de actualizacin de los datos en las tablas.

Proteger la integridad de los datos.

En el modelo relacional es frecuente llamar tabla a una relacin, aunque para que una tabla sea
considerada como una relacin tiene que cumplir con algunas restricciones:

Cada tabla debe tener su nombre nico.

No puede haber dos filas iguales. No se permiten los duplicados.

Todos los datos en una columna deben ser del mismo tipo.

SQL Server 2008 Normalizando Bases de Datos


Primera Forma Normal
PRIMERA FORMA NORMAL: No repetir grupos;
La primera forma normal establece que no se deben repetir elementos o
grupos de elementos dentro de las tablas, tambin establece que cada una de
las columnas debe ser Atmica, estas reglas podramos catalogarlas as:
Ms de un valor no puede ser almacenado en ninguna celda (repetir grupos
dentro de las columnas); Por ejemplo, para la columna ProductosComprados,
puede incluirse solo un producto comprado, no se pueden ingresar dos
productos comprados.
Ms de una columna no se debe usar para definir el mismo tipo de dato
(repetir grupos a travs de las columnas); Por ejemplo, Si se compra ms de
un producto, no puede existir dentro de la misma tabla Producto1, Producto2,
Producto3, etc
Las columnas deben ser Atmicas; Los datos de una columna deben ser
divididos a su ms mnima expresin de valor, por ejemplo para la columna
Nombre deberamos dividirla en tres (3) columnas; PrimerNombre, Segundo
Nombre, Apellido.
NO REPETIR GRUPOS DENTRO DE UNA COLUMNA:
Un grupo repetido dentro de una columna es un grupo donde ms de un valor
es incluido dentro de la misma columna, por ejemplo; Imaginemos que
tenemos una tabla para guardar toda la informacin de las ventas, por cada

venta que se haga se almacena el nombre del cliente, la fecha y el producto


comprado.
Para darnos una idea veamos la siguiente imagen, en la cual se viola
completamente la primera forma normal

Podemos observar que tenemos tres (3) columnas (Descripcin, Cantidad y


Precio), que poseen grupos repetidos, nuestro cliente compr dos (2) libros y la
descripcin de ambos libros se encuentran en la columna Descripcin, al
mismo tiempo podemos observar que las dos cantidades se encuentran en la
columna Cantidad y lo mismo ocurre con la columna Precio donde
encontramos el precio de ambos libros, todos estos datos se separan
solamente por una simple coma (,).
Imaginemos entonces que con esta tabla quisieramos hacer la siguientes
consultas:
Cantidad de Libros vendidos por autor
Catidad de Libros vendidos por tema
Cantidad de Libros vendidos por precio
Porcentaje de Ventas generadas por mes
Y paremos de contar
Como podemos observar estas consultas son casi imposibles de hacer por la
redundancia que tenemos en la data.
Ahora bien para poder cumplir con la primera forma normal, entonces
deberiamos colocar un slo dato en cada columna, en la columna descripcion
colocariamos la descripcion de un solo libro, solo una cantidad en la columna
cantidad y un solo precio en la columna precio. Excelente!!! Diran muchos, sin
embargo el hecho de limitar los datos a un solo valor por columna no ser
realmente suficiente para poder solucionar el problema, y ya veremos el por
qu.
NO REPETIR GRUPOS A TRAVES DE LAS COLUMNAS:
Un grupo repetido a travs de columnas es un grupo donde mltiples columnas
son agregadas a la tabla para introducir el mismo grupo de datos, supongamos
que un desarrollador novato quiere solucionar el problema mostrado
anteriormente (Grupos repetidos dentro de una columna), entonces decide que
la mejor solucin es agregar mas campos a la tabla para poder agregar los
datos que se repiten y as solventar la situacin creando la siguiente tabla

Wow Funciona!!! dirn algunos, pero este desarrollador ha cometido un error,


est repitiendo grupos a travs de las columnas y esto es una violacin a la
primera forma normal, ha creado una segunda columna para Descripcin,
Cantidad y Precio que las ha llamado Descripcion2, Cantidad2 y Precio2.
Esto NO FUNCIONA y TAMPOCO SOLUCIONA el problema, ya que si un
cliente puede querer comprar cinco (5) productos o setenta (70) o mil (1000),
no podemos aadir una cantidad suficiente de campos para los grupos
repetidos y as poder solventar cualquier condicin posible.
Imaginemos que tenemos un supermarket donde limitamos a los usuarios a
comprar solamente dos productos por vez; Lo sentimos seor, por favor
vuelva maana para que pueda comprar otros dos productos mas
Esa no es la solucin ni la manera de llevar un negocio, mucho menos es la
forma de crear una Base de datos que cumpla con la primera forma normal, sin
embargo una solucin a esto podria ser crear dos o mas tablas relacionadas
entre s, por ejemplo:
Creamos dos tablas (Pedidos y DetallesPedidos) para las ordenes de compra
realizadas por los clientes, y los grupos de repeticion los sacamos de la tabla
Pedidos y los aadimos a una columna relacionada DetallesPedidos, haciendo
que las dos tablas estn relacionadas en la columna IDDetallesCompra.

Ahora nuestra tabla DetallesPedidos tiene columnas para describir el producto,


la cantidad y el precio, lo que nos permite tener tantas filas en la tabla
DetallesPedidos segn sea necesario ya que sta se relaciona con la tabla
Pedidos.

ATOMICO:
Los valores atmicos son valores que no pueden ser reducidos a un valor
menor, eso ya lo tenemos claro, pero ahora veamos un caso sencillo,
supongamos el valor NOMBRE, una columna nombre puede incluir el nombre
completo de una persona, es decir primer nombre, segundo nombre y
apellidos, por Ejemplo: Roberto Enrique Pozo, pero este valor NOMBRE no es
atmico, porque el nombre no est reducido a sus valores significativos mas
pequeos.
Para un nombre los valores significativos mas pequeos seran el primer
nombre, el segundo nombre o la inicial del segundo nombre y el apellido,
entonces para dividir un nombre dentro de sus valores atmicos ms pequeos
simplemente lo dividimos en tres (3) columnas una para el primer nombre, una
para el segundo nombre o la inicial y una para el apellido.
Ahora muchos se preguntarn:
Si aplicamos este concepto de la primera forma normal, los valores dentro de
una columna no se pueden dividir a un valor menor?
La respuesta que muchos dirn es SI, sin embargo deberamos crear una
columna para cada letra del alfabeto y esto sera realmente ridculo hacerlo,
por eso la mejor opcin es crear como se menciona arriba, una columna para
el nombre, una columna para la INICAL del segundo nombre (Ac si reducimos
a la mas mnima expresin esta columna Queda Atmica ya que solo tendr
una letra),y, una columna para el apellido.
Las columnas con valores atmicos hacen mas sencillo crear consultas
basadas en atributos individuales de nombres, por ejemplo podemos hacer
bsquedas sencillas basadas en el primer nombre o en el apellido y tambien es
mucho ms fcil crear consultas que se puedan ordenar alfabeticamente ya
sea por el primer nombre o por el apellido.
Con esta ltima observacin acerca de las columnas atmicas, terminamos el
tema de la Primera Forma Normal.
Como siempre ante cualquier duda comunquense y con gusto se las aclarar.