Normalizacion 1 Junio
Normalizacion 1 Junio
Normalizacion 1 Junio
CodLibro
Titulo
Autor
Editorial
NombreLector Prez Gmez, Juan Ros Tern, Ana Roca, Ren Garca Roque, Luis Prez Gmez, Juan
FechaDev
1001
McGraw Hill
15/04/2005
1004 1005
17/04/2005 16/04/2005
1006
Oracle University
20/04/2005
1007
Clipper 5.01
Ramalho
McGraw Hill
18/04/2005
Esta tabla no cumple el requisito de la Primera Forma Normal (1NF) de slo tener campos atmicos, pues el nombre del lector es un campo que puede (y conviene) descomponerse en apellido paterno, apellido materno y nombres. Tal como se muestra en la siguiente tabla. 1NF CodLibro Titulo Variable compleja Visual Basic 5 Estadstica Oracle University Autor Editorial Paterno Materno Nombres FechaDev
1001
Gmez
Juan
15/04/2005
1004 1005
E. Petroustsos Anaya
Ros
Tern
Ana Ren
17/04/2005 16/04/2005
1006
Garca
Roque
Luis
20/04/2005
CodLibro
Autor
1006
Priya Nathan
Garca
Roque
Luis
20/04/2005
1007
Ramalho
Gmez
Juan
18/04/2005
Como se puede ver, hay cierta redundancia caracterstica de 1NF. La Segunda Forma Normal (2NF) pide que no existan dependencias parciales o dicho de otra manera, todos los atributos no clave deben depender por completo de la clave primaria. Actualmente en nuestra tabla tenemos varias dependencias parciales si consideramos como atributo clave el cdigo del libro. Por ejemplo, el ttulo es completamente identificado por el cdigo del libro, pero el nombre del lector en realidad no tiene dependencia de este cdigo, por tanto estos datos deben ser trasladados a otra tabla. 2NF CodLibro Titulo Variable compleja Autor Editorial
1001
Murray Spiegel
McGraw Hill
1004 1005
Visual Basic 5 E. Petroustsos Estadstica Oracle University Oracle University Clipper 5.01 Murray Spiegel
1006
1006
Priya Nathan
Oracle Corp.
1007
Ramalho
McGraw Hill
Roque
Luis
Hemos creado una tabla para contener los datos del lector y tambin tuvimos que crear la columna CodLector para identificar unvocamente a cada uno. Sin embargo, esta nueva disposicin de la base de datos necesita que exista otra tabla para mantener la informacin de qu libros estn prestados a qu lectores. Esta tabla se muestra a continuacin:
CodLibro CodLector 1001 1004 1005 1006 1007 501 502 503 504 501
Para la Tercera Forma Normal (3NF) la relacin debe estar en 2NF y adems los atributos no clave deben ser mutuamente independientes y dependientes por completo de la clave primaria. Tambin recordemos que dijimos que esto significa que las columnas en la tabla deben contener solamente informacin sobre la entidad definida por la clave primaria y, por tanto, las columnas en la tabla deben contener datos acerca de una sola cosa. En nuestro ejemplo en 2NF, la primera tabla conserva informacin acerca del libro, los autores y editoriales, por lo que debemos crear nuevas tablas para satisfacer los requisitos de 3NF. 3NF
CodLibro
Titulo
CodAutor
Autor
CodEditorial
Editorial
1001 Variable compleja 1004 Visual Basic 5 1005 Estadstica 1006 Oracle University 1007 Clipper 5.01
801 Murray Spiegel 802 E. Petroustsos 803 Nancy Greenberg 804 Priya Nathan 806 Ramalho
Aunque hemos creado nuevas tablas para que cada una tenga slo informacin acerca de una entidad, tambin hemos perdido la informacin acerca de qu autor ha escrito qu libro y las editoriales correspondientes, por lo que debemos crear otras tablas que relacionen cada libro con sus autores y editoriales.
CodLector Paterno Materno 501 Prez 502 Ros 503 Roca 504 Garca Roque Gmez Tern
Nombres Juan Ana Ren Luis CodLibro CodLector 1001 1004 1005 1006 1007 501 502 503 504 501 FechaDev 15/04/2005 17/04/2005 16/04/2005 20/04/2005 18/04/2005
Xxxxxxxxxxxxxxxxxxx
Clientes ID_Cliente Nombre Apellidos Nombre_Producto1 Costo_Producto1 Imagen_Producto1 Nombre_Producto2 Costo_Producto2 Imagen_Producto2 Fecha_Pedido Cantidad_Pedido Nombre_Cia_Envios
La tabla se ha descrito de manera abreviada pero aun as representa la idea general. Cmo podra aadir un nuevo cliente en su tabla Clientes? Debera aadir un producto y un pedido tambin. Qu tal si
quisiera emitir un informe de todos los productos que vende? No podra separar fcilmente los productos de los clientes con una simple instruccin SQL. Lo bello de las bases de datos relacionales, si estn bien diseadas, es que puede hacer esto fcilmente.
La nomlalizacin tambin hace las cosas fciles de entender. Los seres humanos tenemos la tendencia de simplificar las cosas al mximo. Lo hacemos con casi todo desde los animales hasta con los automviles. Vemos una imagen de gran tamao y la hacemos menos compleja agrupando cosas similares juntas. Las guas que la nomlalizacin provee crean el marco de referencia para simplificar la estructura. En su base de datos de muestra es fcil detectar que usted tiene tres diferentes grupos: clientes, productos y pedidos. Si sigue las guas de la nomlalizacin, podra crear las tablas basndose en estos grupos. El proceso de nomlalizacin tiene un nombre y una serie de reglas para cada fase. Esto puede parecer un poco confuso al principio, pero poco a poco ir entendiendo el proceso, as como las razones para hacerlo de esta manera. A la mayora de la gente le encantan las hojas de clculo por la forma en la que manejan sus datos. El tiempo que le lleve reconfigurar su esquema para ajustarlo al proceso de nomlalizacin, siempre ser bien Iinvertido. Al fin y al cabo, esto le tomar menos tiempo que el que tendra que invertir , para cortar y pegar sus columnas de datos para generar el infomle que quiere su jefe. Otra ventaja de la nomlalizacin de su base de datos es el consumo de espacio. Una base de datos nomlalizada puede ocupar menos espacio en disco que una no nomlalizada. Hay menos repeticin de datos, lo que tiene como consecuencia un mucho menor uso de espacio en disco. Grados de normalizacin Existen bsicamente tres niveles de normalizacin: Primera Fomla Normal (1NF), Segunda Fomla Normal (2NF) y Tercera Fomla Normal (3NF). Cada una de estas formas tiene sus propias reglas. Cuando una base de datos se conforma a un nivel, se considera nomlalizada a esa forma de nomlalizacin. Por ejemplo, supongamos que su base de datos cumple con todas las reglas del segundo nivel de nomlalizacin. Se considera que est en la Segunda Fomla Normal. No siempre es una buena idea tener una base de datos conformada en el nivel ms alto de normalizacin. Puede llevar aun nivel de complejidad que pudiera ser evitado si estuviera en un nivel ms bajo de normalizacin.
Primera Forma Normal La regla de la Primera Forma Normal establece que las columnas repetidas deben eliminarse y colocarse en tablas separadas. sta es una regla muy fcil de seguir. Observe el esquema de la tabla Clientes de la base de datos. . Clientes
ID Cliente Nombre Apellidos Nombre_Producto1 Costo_Producto1 Imagen_Producto1 Nombre_Producto2 Costo_Producto2 Imagen_Producto2 Fecha_Pedido Cantidad_Pedido Nombre Cia Envios
-La tabla tiene varias columnas repetidas. stas se refieren principalmente a los productos. De acuerdo con la regla, debe eliminar las columnas repetidas y crearles su propia tabla.
Clientes Pedidos ID_Clientes Nombre_Productos Nombre Costo_Producto Apellidos Imagen_Producto Direccion Numero_Pedido Fecha_Pedido Cantidad_Pedido Clave_Cia_Envios Nombre_Ci_ Envios -Ahora tiene dos tablas. Pero todava hay un problema. No hay forma de relacionar los datos de la tabla original con los de la nueva tabla. Para hacerlo, debe aadir un campo clave a la segunda tabla de forma que se establezca la relacin. Aada a la tabla Productos una clave primaria que se llame ID_Producto y aada una clave a la tabla Clientes que la relacione con la tabla Productos. El campo ID_Producto es el candidato ideal. Primera Forma Normal
Clientes Pedidos ID_Productos ID_Productos ID_Clientes Nombre_Productos Nombre Costo_Producto Apellidos Imagen_Producto Direccion Numero_Pedido Fecha_Pedido Cantidad_Pedido Clave_Cia_Envios
-As, se ha establecido una relacin uno a varios. sta representa lo que la base de datos estar haciendo en la vida real. El cliente tendr muchos productos que podr comprar, sin importar cuntos otros clientes quieran comprarlos tambin. Adems, el cliente necesitar haber pedido un producto para ser un cliente. Usted ya no est obligado a aadir
Poner la base de datos en la Primera Forma Normal resuelve el problema de los encabezados de columna mltiples. Muy a menudo, los diseadores de bases de datos inexpertos harn algo similar a la tabla no normalizada. Una y otra vez, crearn columnas que representen los mismos datos. En una empresa de servicios de electricidad, haba una base de datos para el control de refacciones de una planta nuclear. La tabla de su base de datos, la cual contena los nmeros de parte de las refacciones, tena una columna repetida ms de treinta veces. Cada vez que una nueva parte se tena que dar de alta, se creaba una nueva columna para almacenar la informacin. Obviamente, el diseo de la base de datos era bastante pobre y, por lo mismo, resultaba una pesadilla para sus programadores/administradores. La normalizacin ayuda a clarificar la base de datos ya organizarla en partes ms pequeas y ms fciles de entender. En lugar de tener que entender una tabla gigantesca y monoltica que tiene muchos diferentes aspectos, usted slo tiene que entender objetos pequeos y ms tangibles, as como las relaciones que guardan con otros objetos tambin pequeos. No es necesario mencionar que un mejor entendimiento del funcionamiento de su base de datos conducir aun mejor aprovechamiento de sus activos. Segunda Forma Normal La regla de la Segunda Forma Normal establece que todas las dependencias parciales se deben eliminar y separar dentro de sus propias tablas. Una depen dencia parcial es un trmino que describe a aquellos datos que no dependen de la clave de la tabla para identificarlos. En la base de datos de muestra, la informacin de pedidos est en cada uno de los registros. Sera mucho ms simple utilizar nicamente el nmero del pedido. El resto de la informacin podra residir en su propia tabla. Una vez que haya organizado la informacin de pedidos. Eliminacin de las dependencias parciales -Segunda Forma Normal Clientes Pedidos Productos ID_Productos ID_Productos ID_Producto ID_Clientes Nombre_Productos Fecha_Compra Nombre Cantidad_Pedido Costos_Productos Apellidos Imagen_Producto Direccion Numero_Pedido Nombre_Cia_Envios
De nuevo, al organizar el esquema de esta forma puede reflejar el mundo real en su base de datos. Tendra que hacer algunos cambios en sus reglas del negocio para que esto fuera aplicable, pero para ilustrar la normalizacin, as est bien. Una de las mayores desventajas de la normalizacin es el tiempo que lleva hacerlo. La mayora de la gente est demasiado ocupada, y emplear tiempo para asegurarse de que sus datos estn normalizados cuando todo funciona ms o menos bien, parece ser un desperdicio de tiempo. Pero no es as. Usted tendr que emplear ms tiempo arreglando una base de datos no normalizada que el que empleara en una normalizada. Al haber alcanzado la Segunda Forma Normal, usted puede disfrutar de algunas de las ventajas de las bases de datos relacionales. Por ejemplo, puede aadir nuevas columnas a la tabla Clientes sin afectar a las tablas Productos y Pedidos. Lo mismo aplica para las otras tablas. Alcanzar este nivel de normalizacin permite que los datos se acomoden de una manera natural dentro de los lmites esperados. Una vez que ha alcanzado el nivel de la Segunda Forma Normal, se han controlado la mayora de los problemas de lgica. Puede insertar un registro sin un exceso de datos en la mayora de las tablas. Observando un poco ms de cerca la tabla Clientes, vemos la columna Nombre_Cia_Envios. sta no es dependiente del cliente. El siguiente nivel de normalizacin explicar cmo solucionar esto. Tercera Forma Normal La regla de la Tercera Forma Normal seala que hay que eliminar y separar cualquier dato que no sea clave. El valor de esta columna debe depender de la clave. Todos los valores deben identificarse nicamente por la clave. En la base de datos de muestra, la tabla Clientes contiene la columna Nombre_Cia_Envios, la cual no se identifica nicamente por la clave. Podra separar estos datos de la tabla y ponerlos en una tabla aparte.
Eliminacin de los datos que no son claves para la Tercera Forma Normal Clientes Productos PedidoMaestro PedidoDetallado Cias_Envios ID_cliente ID_Producto ID_Pedido ID_PedidoDetallado ID_Cia_Envios ID_Producto Nombre_Producto Fecha_Pedido ID_Pedido Nombre_Cia_Envios. Numero_Pedido Costos_Productos Cantidad_Pedidos Fecha_Pedido ID_Cia_Envios Foto_Producto Cantidad_Pedido Nombre Apellidos Direccion
Ahora todas sus tablas estn en la Tercera Forma Normal. Esto le da ms flexibilidad y previene errores de lgica cuando inserta o borra registros. Cada columna en la tabla est identificada de manera nica por la clave, y no hay datos repetidos. Esto provee un esquema limpio y elegante, que es fcil de trabajar y expandir. Qu tan lejos debe llevar la normalizacin La siguiente decisin es qu tan lejos debe llevar la normalizacin? La normalizacin es una ciencia subjetiva. Determinar las necesidades de simplificacin depende de usted. Si su base de datos va a proveer informacin aun solo usuario para un propsito simple y existen pocas posibilidades de expansin, normalizar sus datos hasta la 3FN sea quiz algo extremoso. Las reglas de normalizacin existen como guas para crear tablas que sean fciles de manejar, as como flexibles y eficientes. A veces puede ocurrir que normalizar sus datos hasta el nivel ms alto no tenga sentido. Por ejemplo, suponga que aade una columna extra para la direccin en su base de datos. Es muy normal tener dos lneas para la direccin. El esquema de la tabla podra verse como se muestra a continuacin: ID_Cliente Nombre Apellidos Direccion1 Direccion2 De acuerdo con las reglas, si aplica la Primera Forma Normal, la columna de direccin debera sacarse de esta tabla y reemplazarse con la clave de una nueva tabla. El resultado de este esquema se muestra a continuacin: ID_Ciente ID_Direccion Nombre ID_Cliente Apellidos Direccion La base de datos ahora cumple con la Primera Forma Normal. Los clientes pueden tener ms de una direccin. El problema aqu es que usted ha complicado demasiado una idea simple, por tratar de seguir las reglas de normalizacin. En el ejemplo mostrado, la segunda direccin es totalmente opcional. Est ah slo para colectar informacin que pudiera utilizarse como informacin de contacto. No hay necesidad de partir la tabla en dos y forzar las reglas de la normalizacin. En esta instancia, el exceso de normalizacin frustra el propsito para el que se utilizan los datos. Aade, de manera innecesaria, un nivel ms de complejidad. Una buena forma de determinar si est llevando demasiado lejos su normalizacin, es ver el nmero de tablas que tiene. Un nmero grande de tablas pudiera indicar que est normalizando demasiado. Observe su esquema. Est dividiendo tablas slo para seguir las reglas o estas divisiones son en verdad prcticas? stas son el tipo de cosas que usted, el diseador de la base de datos, necesita decidir. La experiencia y el sentido comn lo pueden auxiliar para tomar la decisin correcta. La normalizacin no es una ciencia exacta. Es subjetiva. Existen seis niveles ms de normalizacin que no se han discutido aqu. Ellos son Forma Normal Boyce-Codd, Cuarta Forma Normal (4NF), Quinta Forma Normal (5NF) o
Forma Normal de Proyeccin-Unin, Forma Normal de Proyeccin-Unin Fuerte, Forma Normal de Proyeccin-Unin Extra Fuerte y Forma Normal de Clave de Dominio. Estas formas de normalizacin pueden llevar las cosas ms all de lo que necesita. stas existen para hacer una base de datos realmente relacional. Tienen que ver principalmente con dependencias mltiples y claves relacionales. En resumen La normalizacin es una tcnica que se utiliza para crear relaciones lgicas apropiadas entre tablas de una base de datos. Ayuda a prevenir errores lgicos en la manipulacin de datos. La normalizacin facilita tambin agregar nuevas columnas sin romper el esquema actual ni las relaciones. Existen varios niveles de normalizacin: Primera Forma Normal, Segunda Forma Normal, Tercera Forma Normal, Forma Normal Boyce-Codd, Cuarta Forma Normal, Quinta Forma Normal o Forma Normal de Proyeccin-Unin, Forma Normal de Proyeccin-Unin Fuerte, Forma Normal de Proyeccin-Unin Extra Fuerte y Forma Normal de Clave de Dominio. Cada nuevo nivel o forma lo acerca ms a hacer su base de datos verdaderamente relacional. Se discutieron las primeras tres formas. stas proveen suficiente nivel de normalizacin para cumplir con las necesidades de la mayora de las bases de datos. Normalizar demasiado puede conducir a tener una base de datos ineficiente y hacer a su esquema demasiado complejo para trabajar. Un balance apropiado de sentido comn y prctico puede ayudarle a decidir cundo normalizar.
Xxxxxxxxxxxxxxxxxxxxxxx
Tipo
Tabla Compaas de envos Nombre Tipo Tamao Otras propiedades IdCompaaEnvos clave NombreCompaa Telfono
Nombre IdEmpleado Apellidos Nombre Cargo Tratamiento FechaNacimiento FechaContratacin Direccin Ciudad Regin CdPostal
Tipo
Nombre Tipo IdPedido IdCliente IdEmpleado FechaPedido FechaEntrega FechaEnvo FormaEnvo Cargo Destinatario DireccinDestinatario CiudadDestinatario ReginDestinatario CdPostalDestinatario PasDestinatario
A continuacin vamos a ver un mtodo mecnico para disear las tablas de la base de datos (normalizar). Recordemos la definicin tcnica de dependencia funcional: dados dos campos, A y B, se dice que B es funcionalmente dependiente de A si para cada valor de A existe un nico valor de B, asociado con l. Empezamos tomando aquellos campos que de una manera clara sern claves en alguna tabla como por ejemplo el Idcliente. Para saber si un campo depende funcionalmente de otro nos hacemos el siguiente razonamiento: Si conozco el Idcliente, existe un nico apellido del cliente asociado a el?, SI, luego los apellidos dependen funcionalmente del campo Idcliente. (Idcliente apellidos ) Si conozco el IdPedido existe un nico Producto en el pedido asociado a el?, NO, ya que un pedido puede no tener un nico producto, por lo tanto el producto no depende funcionalmente de IdPedido. IdEmpleado Nombre Obtencin de todas las dependencias funcionales
IdEmpleado Apellidos IdEmpleado Cargo IdEmpleado TratamientoEmp IdEmpleado FechaNacimiento IdEmpleado FechaContratacin IdEmpleado Direccin IdEmpleado Ciudad
IdEmpleado Regin IdEmpleado CdPostal IdEmpleado Pas IdEmpleado TelDomicilio IdEmpleado Extensin IdEmpleado Foto IdEmpleado Notas IdEmpleado Jefe IdPedido, IdProducto PrecioUnidadNotar que en el caso del PrecioVenta de un producto este depende a la vez del IdProducto y del IdPedido, es decir va a tener una clave doble. Esta relacin contiene todas las dependencias funcionales que yo he visto, aunque posiblemente podran determinarse mas de las que aqu aparecen. A partir de ahora se trata de simplificar hasta lograr una cobertura mnima, es decir que un campo no puede depender funcionalmente mas que de una clave. Para realizar el proceso de simplificar, nos basaremos en la siguiente propiedad: Si tenemos que A B, y B C, se puede deducir la dependencia A C, siendo esta ltima dependencia redundante (sobrante). En nuestro ejemplo tenemos que IdPedido IdEmpleado, y IdEmpleado Nombre, luego la expresin IdPedido Nombre, es redundante y podemos eliminarla. Continuaremos este proceso de simplificacin hasta obtener una cobertura mnima en la que aparezcan todos los campos una sola vez. Simplificacin y obtencin de las tablas
IdEmpleado IdPedido, IdProducto Apellidos Cantidad IdEmpleado Cargo IdPedido, IdProducto Descuento IdEmpleado TratamientoEmp IdCliente NombreCompaa IdCliente NombreContacto IdCliente CargoContacto IdCliente Direccin IdCliente Ciudad IdCliente Regin IdEmpleado FechaNacimiento IdEmpleado FechaContratacin IdEmpleado Direccin IdEmpleado Ciudad IdEmpleado Regin IdEmpleado CdPostal
IdCliente CdPostal IdEmpleado Pas IdCliente Pas IdCliente Telfono IdCliente Fax IdEmpleado TelDomicilio IdEmpleado Extensin IdEmpleado Foto IdProducto NombreProducto IdProducto IdEmpleado Notas IdEmpleado Jefe
IdPedido ReginDestinatario CantidadPorUnidad IdPedido CdPostalDestinatario IdProducto PrecioUnidad IdPedido PasDestinatario IdPedido NombreProducto IdPedido IdEmpleado IdPedido NombreEmpleado Hacemos limpieza borrando los que se han tachado, y obtenemos las tablas de la base de datos sin mas que definir una tabla por cada conjunto de dependencias funcionales de la misma clave IdCompaaEnvos NombreCompaaEnv os IdCompaaEnvos Telfono
2. Primera forma normal: no hay repeticin grupos Las tablas deben tener slo dos dimensiones. Como cada alumno est inscrito en varias clases, stas deben aparecer en una tabla independiente. Los campos Clase1, Clase2 y Clase3 de los registros anteriores indican que existe un problema en el diseo. En las hojas de clculo se utiliza con frecuencia la tercera dimensin, pero no debe hacerse en las tablas. Otra forma de ver el problema es considerar una relacin de uno a varios; no se debe poner en la misma tabla el lado en el que hay un elemento y el lado en el que hay varios elementos. En su lugar, crear otra tabla en la primera forma normal, eliminando el grupo de repeticin (clase #), tal y como se muestra a continuacin: Contraer esta tablaAmpliar esta tabla Los alumnos # Asesor Espacio de adv Clase # 1022 Jones 412 101 07 1022 Jones 412 143-01 1022 Jones 412 159-02 4123 Smith 216 201-01 4123 Smith 216 211-02 4123 Smith 216 214-01 3. Segunda forma normal: eliminar datos redundantes Tenga en cuenta los valores de clase # varios para cada valor de los alumnos # en la tabla anterior. Clase # no es funcionalmente depende de los alumnos # (clave principal), por lo que esta relacin no est en la forma en segundo lugar normal. Las dos tablas siguientes muestran la segunda forma normal: Los alumnos
Contraer esta tablaAmpliar esta tabla Los alumnos # Asesor Espacio de adv 1022 Jones 412 4123 Smith 216 Registro Contraer esta tablaAmpliar esta tabla Los alumnos # Clase # 1022 101 07 1022 143-01 1022 159-02 4123 201-01 4123 211-02 4123 214-01 4. Tercera forma normal: eliminar datos no dependientes en clave En el ltimo ejemplo, adv de espacio (nmero de oficina el asesor) depende funcionalmente el atributo asesor. La solucin es mover dicho atributo de la tabla Alumnos a la tabla Personal, como se muestra a continuacin: Los alumnos Contraer esta tablaAmpliar esta tabla Los alumnos # Asesor 1022 Jones 4123 Smith Profesores Contraer esta tablaAmpliar esta tabla Nombre Espacio Departamento Jones 412 42 Smith 216 42 Volver al principio
Referencias Ahlo, Hamilton M., Randy Brown y Peter Colclough. FoxPro 2: Guide A Developer '...
Ahlo, Hamilton M., Randy Brown y Peter Colclough. FoxPro 2: Guide A Developer 'S: experto Gua de programacin de intensidad de industrial . John Wiley & Sons, de 1991 de octubre. Las pginas de 220-225. Callahan, Roger. con Access 1.1 de Windows . Corporation, de 1993 de julio. 799 Las pginas de 800. Volver al principio
La informacin de este artculo se refiere a:
Volver al principio principio automtica IMPORTA NTE: Este artculo ha sido traducido por un software de traduccin automtica de Microsoft (http://supp ort.microsof t.com/gp/mt details) en lugar de un traductor
kbmt kbdatabase TelfonoJua kbdesign n$ 150.000cocine kbinfo ro132 - 46 - kbusage 87Palabras KB209534 clave: KbMtes
humano. Microsoft le ofrece artculos traducidos por un traductor humano y artculos traducidos automtica mente para que tenga acceso en su propio idioma a todos los artculos de nuestra base de conocimient os (Knowledge Base). Sin embargo, los artculos traducidos automtica mente pueden contener errores en el vocabulario, la sintaxis o la gramtica, como los que un extranjero podra cometer al hablar el idioma. Microsoft
no se hace responsable de cualquier imprecisin, error o dao ocasionado por una mala traduccin del contenido o como consecuenci a de su utilizacin por nuestros clientes. Microsoft suele actualizar el software de traduccin frecuenteme nte. Si ve errores y desea ayudar con este esfuerzo, rellene la encuesta en la parte inferior de este artculo. Haga clic aqu para ver el artculo original (en ingls): 209534
Xxxxxxxxxxxxxx
Ejercicios Normalizaci n
1. Una escuela determinada tiene un grupo de dormitorios en donde viven los estudiantes. La escuela tambin tiene varios clubes, y cada estudiante puede pertenecer a uno o ms de estos clubes. Considere las siguientes tablas, que describen la situacin: ESTUDIA NTE_DOR M[ID_EST UDIANTE, DORM, PRECIO_A NUAL_DO RM] ESTUDIA NTE_CLU B[ID_EST UDIANTE, CLUB, PRECIO_A NUAL_CL UB] a) Para cada tabla, indicar 1) la clave; 2) cada dependen
cia funcional; y 3) la Forma normal. b) Transform e cada tabla a su Tercera Forma Normal.
2. Suponga que el diseo de un tipo de entidad CLIENTES incluye informacin relativa a los pedidos, tal como sigue: CLIENTES [ID, NOMBRE, DIRECCIO N, TELEFON O, FECHA_P EDIDO, SABOR, CANTIDA D] Transforme esto en dos tablas relacionales y encuentre las claves adecuadas para las tablas que resulten de la descomposicin.
3. Un grupo de mdicos vive en una pequea ciudad. Cada mdico tiene varios pacientes, pero cada paciente visita nicamente a un mdico. a) Disee una tabla que represente esta situacin, usando nicamente los siguientes atributos: NOMBRE_ DOCTOR DIRECCIO N_DOCTO R TELEFON O_DOCTO R RUT_PACI ENTE NOMBRE_ PACIENTE DIRECCIO N_PACIEN TE TELEFON O_PACIE NTE FECHA_U LTIMA_C ONSULTA
b) Transforme la tabla en una o ms tablas relacionales, cada una de las cuales est al
menos en Tercera Forma Normal. Para cada tabla indique las claves y las dependencias funcionales. 4. Supongamos que, en una ciudad cercana, la situacin es ligeramente diferente de la descrita en el problema anterior: cada mdico tiene varios pacientes, pero cada paciente puede tener varios mdicos a la vez. Usando slo los atributos del problema anterior, redisee la base de datos de tal modo que cada tabla quede al menos en Tercera Forma Normal.
xxxxxxxxxxxxxxx
Vamos a partir de algunos ejemplos los cuales iremos normalizando: Primera forma normal (PFN) La primera forma normal
bsicamente se refiere a la forma que deben tener los registros: mismo nmero de campos y valor atmicos, es decir, eliminar las columnas repetidas y colocarse en tablas separadas. Ejemplo:
En esta entidad se esta violando la PFN porque un cliente puede tener varios telfonos, entonces el valor del campo ya deja de ser atmico, una clsica forma (mala practica) es colocar varios campos indicando diferentes telfonos (telefono1, telefono2, , telfonon) pero esta forma tambin viola la primera forma normal, lo correcto es separar esos campos y colocarlos en tablas diferentes.
Segunda forma normal (SFN) Una entidad esta en SFN si esta en PFN y no existe DF cuyo determinante sea un sub-conjunto del identificador y cuyo atributo del lado derecho no forme parte del mismo. En otras palabras, si una parte del identificador determina otros atributos (que no formen parte de el) se viola la SFN. Esto solamente tiene sentido cuando un identificador esta compuesto. Ejemplo:
En esta entidad se esta violando la SFN porque existe un DF en los atributos nombre_proveedo r y direccion_provee
dor. Aplicando la regla de la SFN procedemos a eliminar la DF y nuestro esquema quedara de la siguiente forma:
Tercera forma normal (TFN) Una entidad esta en TFN si esta en SFN y no existe DF entre atributos que no formen parte del identificador, es decir que un atributo haga referencia a otro atributo sin que este forme parte del identificador. Ejemplo:
En esta entidad se esta violando la TFN porque el atributo ciudad_de_nacimi ento hace referencia al atributo numero_de_habit antes siendo que ciudad_de_nacimi ento no es el identificador de
Conclusin La normalizacin es una herramienta para validar la calidad del esquema y no un mtodo para disear el esquema, en el primer enfoque se utilizan mecanismos de abstraccin para captar los requerimientos del dominio de aplicaciones, mientras que en el segundo caso se utilizan las DF. Estos dos enfoques son opuestos, ahora bien, lo valioso del primero es que de una manera natural se tiende a producir esquemas normalizados esto se debe a que los conceptos no se mezclan, si no que se separan adecuadamente
gracias al uso de la clasificacin, la agregacin y la generalizacin. Las violaciones a las formas normales bsicamente obedecen finalmente a malos diseos lo cual es precisamente lo que la metodologa trata de evitar. Entonces el hecho de utilizar a la normalizacin como una herramienta de validacin es congruente con sus principios.
Xxxxxxxxxxxxxxxx
Mira, la primera forma normal te dice que los datos deben ser atmicos, quiere decir esto que no pueden dividirse, por ejemplo: Un dato supongamos, nombre de una persona: el nombre est compuesto por nombre+apellido
paterno+apellido materno, por lo tanto, para que est en 1FN deberas tener 3 campos, uno para el nombre, otro para el paterno y otro para el materno(claro que todo depende del contexto, pero es un ejemplo). Otro ejemplo sera el nmero telfonico, una persona puede tener un slo nmero de telfono, o tamben puede tener varios (o ninguno), por lo tanto, si el numero telefnico no es nico, se debe convertir en una tabla, y as tienes: Tabla original (persona) codigo, nombre, telefono Despues de la primera normalizacin obtienes dos tablas: Tabla persona: codigo, nombre, paterno, materno
Tabla telefonos: codigo(persona), numero Y una relacin: persona->telefono (1,N) Tambin te dice que los datos repetidos se eliminan. Esto significa que si tu tabla es por ejemplo: Ventas cliente, item, boleta, producto, cantidad, total Y tienes los datos: pepe, 1, 001, pan, 5, 20 pepe, 2, 001, leche, 3, 100 pepe, 3, 001, azucar, 1, 12 Si notas la primera y tercera columna, tienen losmismos valores (pepe y 001) por lo tanto, eso te indica que esos campos probablemente no deben ir all, y deben ir en otras tablas tabla cliente:
codigo, nombre tabla boleta: numero tabla detalle: codigo(cliente), item, numero(boleta), cantidad, total Y asi sucesivamente, hasta que los datos dejen de repetirse en la misma tabla (claro que nunca lo logras porque siempre va a repetirse alguno pero basicamente lo que se evita es que se repitan datos innecesarios como el nombre dle cliente, el cual no tiene porque estarse repitiendo tantas veces) La segunda se aplica en llaves compuestas y se utiliza para decidir si un campo pertenece a una tabla o pertenece a otra, por ejemplo: Tabla venta (ejemplo, una boleta o factura de venta)
--------------------------------------------item, boleta, producto, cantidad, total Claves: item y boleta. Debemos averiguar si los otros tres campos pertenecen a la tabla venta o pertenecen a otra tabla, para eso analizamos cada campo: El producto es dependiente del item y de la boleta? Es decir, para que el producto exista, debe existir la boleta. La respuesta es No porque el producto es independiente de la boleta, por lo tanto el producto sale hacia otra tabla La cantidad es dependiente? Si, porque cuando haces una venta, vendes una cantidad determinada, la cual unicamente se puede saber
cuando se efectue la venta (por dcir, se venden 3 botellas de X producto, o 5 unidades de Z, etc). Entonces, el campo cantidad se queda. Y el total tambien es dependiente porque se calcula a partir de la cantidad y si la cantidad es dependiente es facil saber que el total es dependiente Por lo tanto me quedan dos tablas: tabla producto: codigo, nombre, tabla venta: item. boleta, codigo(producto), cantidad, total Y otra relacin: producto->venta (1,N) Espero te ayude a comprender, obviamente para poder aprender a hacer normalizacin debes partir desde una ficha de datos
mezclados obtenidos a partir de alguna investigacin, por ejemplo los datos de las ventas diarias de alguna entidad X (como en el ejemplo), donde lo nico que conoces es: Ventas Diarias: cliente, direccion, documento, boleta, producto, cantdiad, total, descuento, pago, tarjeta, ... Todos son datos que a primera vista no tienen mucha relacin, y desde all partes a normalizar, para encontrarles la relacin, guindote de las formas normales. Xxxxxxxxxxxxxx xxxx
que se le quiere dar solucin por un sistema informtico. La siguiente es una tabla con tres registros, que representa una entidad llamada empleado y que tiene cuatro atributos.
Nombre
JorgeSalario
Cargo
Ana
512 - 47 - 84 321 - 45 - 42
El proceso es difcil de entender al principio, puede tener tres o cinco pasos dependiendo del autor, es largo, con prctica y experiencia llega un momento en que no se utiliza, porque el diseador de la base de datos llega al resultado final sin necesidad de hacer todo el proceso. Por eso llega un momento en que los programadores no lo usan y se brincan todos los pasos llegando tambin a un resultado similar o mejor al que se llegara siguiendo todo el proceso. Vamos a utilizar nicamente las tres primeras formas normales, para el proceso las aplicamos en la factura del ejemplo visto en el tema pasado.
Se quiere sistematizar el almacenamiento de la factura y para eso necesitamos un ejemplo de una factura real.
Antes de aplicar las formas normales a la factura, debemos extraer los atributos y hacer una lista con estos. El primer atributo que vemos en la parte superior es el nombre del restaurante, debajo el nmero de factura, luego los productos pedidos (Una lista de otras entidades) a lo que vamos a llamar detalle y por ltimo el total de la factura, hagamos una lista de los atributos encontrados
Factura:
Lo que hicimos fue crear una representacin de la entidad Factura, le dimos sus atributos y podemos hacer ahora con estos datos una tabla en la base de datos. Pero cmo hago para guardar muchos productos en un solo atributo (detalle) que tiene la tabla? Cmo hago para que no se repitan las facturas? Estos y otros problemas se resuelven siguiendo el proceso de la normalizacin.
Para hacer esto debemos seleccionar de los atributos disponibles un atributo que nunca se repita, si no existe un atributo con esta caracterstica lo agregamos, este atributo que hace a cada registro nico se le llama (clave principal). En este caso tenemos un atributo que sirve para tal propsito, es el nmero de factura, lo sealamos como clave principal y listo.
IdCliente NombreCompaa IdCliente NombreContacto IdCliente CargoContacto IdCliente Direccin IdCliente Ciudad IdCliente Regin IdCliente CdPostal IdCliente Pas IdCliente Telfono IdCliente Fax
IdPedido Pas IdPedido Destinatario IdPedido DireccinDestinatario IdPedido CiudadDestinatario IdPedido ReginDestinatario IdPedido CdPostalDestinatario IdPedido PasDestinatario IdPedido NombreProducto IdPedido IdEmpleado IdPedido NombreEmpleado