Este tutorial explica la segunda forma normal, relacionada con la base de datos relacional. Es la segunda parte de la serie: las cinco formas normales. La explicación de estas cinco formas normales sigue una historia, que comienza de la siguiente manera: un padre murió y dejó algo de dinero para su hijo. El hijo decidió usar el dinero para abrir una tienda de conveniencia. El hijo empleó a algunos trabajadores (empleados). Todo en la tienda ya está almacenado, y el personal comenzó a vender a algunos clientes. Al comienzo del funcionamiento de la tienda, que no hace mucho, el hijo, que es el propietario y sus trabajadores, no sabía nada sobre las formas normales.
Ya eres un amigo del hijo, el propietario. Finalmente completó esta serie de tutoriales en formularios normales, sabe todo sobre formularios normales y se ha convertido en un desarrollador de bases de datos. Visitaste la tienda de tu amigo ayer y notaste que solo tenían una mesa de transacciones, que no cumplió con la primera forma normal. Luego enseñaste tanto al propietario como a sus empleados sobre cómo producir la tabla de transacciones en la primera forma normal. Entendieron y la mesa que ahora tienen en la primera forma normal es:
Esta es la tabla de transacciones. Hay una columna para la clave primaria, que es transid (incremento automático).
Dado que cualquier primera forma normal puede tener vulnerabilidades, las visitó (la tienda) hoy para entrenarlos en la segunda forma normal para reducir las vulnerabilidades.
Antes de comenzar a hacer algo, el propietario preguntó:
"¿Es esta tabla de transacciones actual no demasiado grande??
He oído que las compañías que no usan computadoras registran sus datos en diferentes libros de contabilidad.
Creo que esta tabla de transacciones en realidad consta de dos tablas de transacción más pequeñas, que pueden tener nuevos nombres de la tabla de ventas y la tabla de pedidos."
Responde mientras sonríe:
"Sí, la tabla de transacciones actual es demasiado grande."
Continuas felicitando por ser positivamente inquisitivo, especialmente con respecto a su negocio. Estás de acuerdo con sus pensamientos. Continúa para decir que en realidad hay tres tablas principales allí: la tabla de ventas, la tabla de pedidos y la tabla de productos. Cuando se identifiquen las tablas de ventas y pedidos, reemplazarán la tabla de transacciones. La tabla de ventas y la tabla de pedidos son tablas de transacciones más pequeñas (a la mitad) en sí mismas. La tabla de productos es claramente una entidad. Tiene que obtenerse de la tabla de transacciones grande anterior.
Sin embargo, estas tres tablas obtenidas de la tabla grande anterior aún estarían en la primera forma normal. La segunda forma normal aborda el problema de la repetición (redundancia), y eso no es lo que va a suceder aquí.
Nota: El segundo formulario normal puede no abordar todos los problemas de repetición (redundancia).
Usted, el desarrollador de bases de datos y un amigo del propietario, continúan produciendo las tres tablas con su participación de la siguiente manera:
Las principales entidades
Las entidades principales son las tres tablas principales mencionadas anteriormente. En la columna anterior, con el encabezado, la acción tiene venta u pedido. La venta significa que el producto en esa fila se vendió a un cliente. El pedido significa que el producto en esa fila se ordenó a un proveedor. Una tienda de conveniencia tiene que pedir productos antes de venderlos.
Las columnas correspondientes a las tres tablas son las siguientes:
Ventas (Saleid, Producto, Cliente, Empleado, SellingPrice)
Pedido (pedido, producto, proveedor, empleado, costprice)
Productos (ProductID, Product, categoría)
Cada notación de tabla tiene una clave primaria subrayada. Cada una de estas tablas todavía está en la primera forma normal. Y así, cada número de clave está relacionado directamente con sus valores de fila.
En la tabla de ventas, los saledids no son las copias de los transids. En la tabla de pedidos, los OrderId tampoco son las copias de los transids. Cada una de la columna SaleID y OrderId es automática, que comienza desde 1. La tabla de transacciones y sus ID de fila ya no son importantes, ya que toda la información en la tabla de transacciones está ahora en estas tres tablas. Las columnas de Saleid y OrderId reemplazan la tabla de transacciones, pero no copiando. La tabla de ventas no tiene la columna del proveedor y la tabla de pedidos no tiene la columna del cliente, que estaban juntas en la tabla de transacciones. Además, ninguna de las tablas tiene la columna de acción desde que la venta y el pedido ahora se separan, y los dos valores de venta y orden ya no son necesarios.
La columna de categoría, que estaba en la columna de transacción, no está en la tabla de ventas ni en la tabla de pedidos. Está en la tabla de productos. Esto se debe a que el valor de la categoría en cada fila solo está relacionado con el valor del producto y no con la otra celda en la fila. La columna de categoría debe salir de la tabla de transacciones junto con la columna del producto para obtener la tabla de productos. Este razonamiento tiene algo que ver con la dependencia transitiva en la producción de la tercera forma normal que se discutirá en el próximo tutorial.
La tabla de productos obtenida de la tabla de transacciones anterior es:
Mesa de productos
Tenga en cuenta que esta tabla no tiene ninguna repetición del nombre del producto (hacia abajo) que podría haber estado en la tabla de transacciones. Además, cada valor del producto está presente y cada valor de categoría también está presente.
Esta tabla todavía está en 1NF. La dependencia de los valores de una fila está relacionada solo con la clave primaria, hasta ahora. Los valores en la columna de categoría se repiten a medida que desciende la columna. La confitería se repite dos veces. "Refresco" se repite cuatro veces. "Producto lácteo" se repite tres veces. La repetición es redundante y causa problemas contables. Poner una mesa en 2NF significa eliminar muchas repeticiones. Esta eliminación de repeticiones no se realiza arbitrariamente.
La tabla de ventas obtenida de la tabla de transacciones anterior es:
Mesa de ventas
Se agregan cuatro nuevas filas, y ha habido alguna modificación para mejorar la explicación. Se introduce una columna de fecha por la misma razón. Ahora, hay 15 filas en esta tabla de ventas en lugar de 11 para la tabla de transacciones.
Reglas del negocio
¿Qué es una venta?? Si el mismo empleado vende a un cliente en particular en la misma fecha al menos un producto, es una venta. Incluso el mismo día (fecha), si un cliente viene dos veces y es atendido por dos empleados diferentes, entonces esas son dos ventas. Si un cliente llega dos veces el mismo día y es atendido por el mismo empleado, incluso si los dos conjuntos de productos son diferentes, ambas compings forman una venta. En una venta, un cliente puede comprar uno o más productos. En otras palabras, en una venta, el trío (cliente, empleado y fecha) debe ser el mismo. Una vez que cambia uno de estos valores de trío, esa es otra venta. Diferentes ventas son identificadas por diferentes saledids en la tabla anterior. Y así, los saledids repiten. Diferentes valores de columna se repiten en sus columnas.
En la primera venta que tiene dos filas y el mismo Saleid, John Smith, un cliente, compró un dulce y un sprite de Jacob Jones en la misma fecha.
En la mañana del 06/06/22, James Taylor, un cliente, vino y compró dos yogurt y una Coca-Cola. Esa es una venta. Se necesitan tres filas en la mesa con el mismo Saleid.
Ese mismo día, pero por la tarde, el mismo James Taylor vino y compró Pepsi, pero de un empleado diferente que es Peter Lewis. El trío ahora tiene un cambio con un empleado diferente. Y así, esta es una venta diferente causada por un cambio en uno de los tríos. Dado que esta es una venta diferente, tiene una fila diferente en la tabla con un Saleid diferente.
El 09/08/22, Susan Wright, una cliente, vino y compró dos queso y una leche de Mary Baker. Esa es una venta porque el trío sigue siendo el mismo (en las tres filas). Sin embargo, se necesitan tres filas en la mesa. Dado que el trío sigue siendo el mismo, el Saleid también sigue siendo el mismo.
El resto de las filas hacia abajo en la mesa no tienen la misma repetición de Saleid. Esta tabla todavía está en 1NF. La dependencia hasta ahora para los valores de una fila todavía está relacionada solo con la clave principal de esa fila. Cada columna tiene valores repetidos. La repetición en una columna no debe estar necesariamente en células consecutivas.
Consulte cuándo considerar el precio o la columna SellingPrice en la sección Tutorial de las repeticiones de manejo. Poner una mesa en 2NF resuelve el problema de las repeticiones comunes del conjunto (redundancia) a través de las filas.
La tabla de pedido obtenida de la tabla de transacciones anterior es:
Mesa de pedido
Esta tabla todavía está en la primera forma normal. Existe la posibilidad de que cualquier valor en cualquier columna repita debajo de su columna. Estas repeticiones se abordan en este tutorial para tener la segunda forma normal de la tabla.
En este punto, usted, el desarrollador de la base de datos, estuvo de acuerdo con la sugerencia del personal para poner la tabla de transacciones en tablas más pequeñas. Y coloca la tabla de transacciones en tablas (entidades) más pequeñas de una manera conveniente. El personal, incluido su propietario, ahora cree que también tienen el potencial de comprender completamente las formas normales y está dispuesto a aprender más porque su sugerencia se ha materializado.
Sin embargo, usted, el desarrollador de la base de datos, les insiste a que la tabla de transacciones original ya no existe y ha sido reemplazada por las tres tablas más pequeñas. Las ventas y la tabla de pedidos reemplazan esencialmente la tabla de transacciones. El transid (ID de transacción) ya no es relevante. Se reemplaza por Saleid y OrderId en dos tablas diferentes.
Las entidades principales que ahora son tablas más pequeñas de la tabla de transacciones original son: la tabla de productos, la tabla de ventas y la tabla de pedidos. Usted, el desarrollador de bases de datos, continúa explicándoles e insistiendo en que estas tablas nuevas pero más pequeñas todavía están en la primera forma normal. Reemplazar una tabla por sus principales tablas de entidad no es normalización porque ninguno de los tipos de definiciones de dependencia se usa para descomponer la tabla grande. Usted, el desarrollador de la base de datos, continúa colocando las tres tablas en la segunda forma normal de la siguiente manera:
Manejo de repeticiones
La tabla de productos
En la tabla de productos, los valores de la columna de categoría se repiten. Todos los nombres (valores) de la columna de categoría deben eliminarse de la tabla de productos en una tabla de categorías donde no habría repeticiones o repeticiones limitadas. La tabla de categorías se convierte en:
Tabla de categorías
La tabla Categorías ya no tiene ningún artículo como "refresco" que se repita. Esta tabla es más corta verticalmente que su colocación en la tabla de productos anterior.
Cualquier tabla necesita una clave principal. Hasta ahora, la tabla Categorías consta de una columna donde todos los valores son únicos y no hay celda o valor nulo vacío. Esta columna puede ser la columna de clave principal para la tabla de categorías. Sin embargo, podría ser mejor tener una clave primaria de incremento automático. La siguiente tabla de categorías modificadas muestra esto:
Tabla de categorías - 2NF
Esta es la tabla de categorías finales. Ahora está en 1NF y 2NF. ¿Qué pasa con la tabla de productos originales?? Se debe crear una nueva tabla de productos. En la nueva tabla, cualquier nombre de categoría en la tabla original será reemplazado por la identificación correspondiente en la tabla de categorías. Entonces, la tabla de productos se convierte en:
Tabla de productos - 2NF
La columna de categoría se reemplaza por la columna CategoryID. La información para los valores de la categoría todavía está en la tabla de productos como categoryids. La columna de categoría se coloca justo después de la columna ProductID en lugar de después de la columna del producto para una mejor presentación. Esta tabla no es más corta que la tabla de productos originales, pero todavía tiene una ventaja.
"¿Cuál es la clave principal de la tabla de productos??"Preguntado por uno de los empleados. Tenga en cuenta que en cada fila, el ProductId y CategoryID dependen del valor del nombre del producto (valor). Si el ProductID o el CategoryID se cambian para cualquier fila, la nueva combinación de ProductID y CategoryID apuntaría a un nombre de producto diferente (valor). En otras palabras, un nombre de producto (valor) en una fila está relacionado tanto con el productid como con el categoría de esa fila. Debido a esta dependencia (dependencia funcional) de la combinación ProductID y CategoryID en un nombre de producto (valor) en particular, tanto el ProductId como el CategoryID forman la clave principal.
Cuando una clave es una combinación de más de una columna, la clave se llama tecla compuesta. La notación de la tabla para esta nueva tabla de productos es:
Productos (ProductID, CategoryID, Producto)
La relación entre ProductID y CategoryID es muchos a uno.
Cada nombre de la columna para la clave primaria (clave compuesta esta vez) está subrayado. Los valores de categorías en la tabla de productos y los valores de categorías en la tabla de categorías hacen las correspondencias exactas entre las dos tablas.
La notación de la tabla para la tabla Categorías es:
Categorías (categoryID, categoría)
Las nuevas tablas que reemplazaron la tabla de productos originales son: tabla de categorías y tabla de productos (mismo nombre). Estas tablas ahora están en la primera forma normal y la segunda forma normal. Consulte las reglas reales para la segunda forma normal en la siguiente discusión.
La tabla de ventas
Las secciones de fila donde se repite el SaleID, pero los valores de la celda de la columna no se repiten, deben retirarse de la tabla de ventas y colocarse en una nueva tabla. En la nueva tabla, las secciones de fila (columnas) idénticas donde los valores de la celda se repiten junto con el SaleID en la tabla de ventas no se incluirán. Es decir, cualquier valor de celda o sección de fila, como el trío (cliente, empleado y fecha) que debe repetirse con el mismo salado en la tabla de ventas no se incluirá en la nueva tabla, incluso si la repetición es una vez que es una vez que es una vez. Los valores de la columna del producto que pueden cambiar con el mismo salado en la tabla de ventas deben estar en la nueva tabla. Se introduce una nueva columna que tiene el número de los mismos productos vendidos para un Saleid en particular. Que mantiene la nueva tabla en 1NF, llevándola a 2NF. La nueva tabla se llama mesa saledetails. Si el desarrollador no puede encontrar un nuevo nombre adecuado para la nueva tabla, algo ha salido mal con su análisis. La tabla Saledetails se convierte en:
Saledetails - 2NF
La tabla saledetails, eliminada de la tabla de ventas, ahora está en la segunda forma normal, así como aún en la primera forma normal. El SaleID de la tabla de ventas original debe incluirse en la tabla Saledetails para mantener la relación entre la tabla de ventas original y la nueva mesa de saledetails. Ahora, hay 13 filas en la tabla Saledetails en lugar de 15 de la tabla de ventas original.
En la tabla de ventas original, cualquier columna cuyo valor no cambió, mientras que el SaleID no cambiaba, permaneció en la tabla de ventas original y no fue eliminado. Estos son esencialmente el trío (cliente, empleado y fecha) en esta situación. Los valores de la columna del producto cambiaron mientras el SaleID no cambiaba, por lo que debe eliminarse. Si el precio o los valores de la columna SellingPrice cambian mientras el SaleID no cambia, también debe eliminarse.
¿Vendrían todos a una tienda y solo comprarían solo una lata de leche?? No. Para cualquier cliente que compre, digamos 4 latas de leche, el número 4 simplemente encajaría bien en la columna números en la fila apropiada.
"¿Y cuál es la clave principal de la nueva mesa de saledetails?Preguntado por el propietario. Esta es su respuesta como desarrollador de bases de datos:
Tenga en cuenta que en cada fila, el SaleID y el producto dependen de Numbersold y SellingPrice (valores). Si el SalesId o el nombre del producto se cambia para cualquier fila, la nueva combinación del SaleID y el producto apunta a una fila diferente de Numbersold y SellingPrice. En otras palabras, una fila Numbersold y SellingPrice está relacionado con los valores de Saleid y de productos de esa fila. Debido a esta dependencia (dependencia funcional) de la combinación de salesid y producto en una fila en particular, tanto el salesid como el producto forman la clave principal. El producto también debe subrayarse.
Cuando una clave es una combinación de más de una columna, la clave se llama tecla compuesta. La notación de la tabla para esta nueva tabla saledetails es:
Saledetails (Saleid, Product, Numbersold, SellingPrice)
La relación entre el Salesid y el producto es de muchos a muchos.
“Tengo la intención de informatizar la base de datos. Dado que una tabla de productos ya existe con ProductID, ¿no sería mejor reemplazar el producto como parte de la clave con ProductID?? Luego, la computadora utilizará el ProductID de la tabla Saledetails y buscará el nombre del producto de la tabla de productos ”, comenta el propietario.
Usted, el desarrollador y entrenador de bases de datos, sonríe mientras asiente con la cabeza. Y esta es tu respuesta:
"Propietario, estás bien. Estás comprendiendo más rápido de lo que esperaba. Cuando una base de datos estará solo en libros de ejercicios (Ledgers), siempre que sea posible, tendrá nombres de texto en lugar de ID numeradas. Cuando una base de datos estará en una computadora, siempre que sea posible, tendrá ID numeradas en lugar de nombres de texto. La computadora conectará los ID numerados y los nombres de texto en sus tablas e imprimirá los nombres de texto cuando se emita una consulta.
Déjame tener el honor de hacer la informatización; Pero por la informatización, me pagarás."Y así, la notación de la tabla para la tabla Saledetails se convierte en:
Saledetails (Saleid, ProductID, Numbersold, SellingPrice)
"¿Qué queda de la tabla de ventas??"Preguntado por uno de los empleados. Las columnas cuyos valores no cambiaron mientras que el SaleID no cambiaba permaneció en la tabla de ventas. El SaleID también permanece porque "gobierna" cada fila en la tabla de ventas. La nueva tabla de ventas se convierte en:
Tabla de ventas - Intermedia
El producto y las columnas de SellingPrice donde hubo un cambio de valor mientras el Saleid no estaba cambiando. Ahora, claramente hay algunas filas completas duplicadas. Tales duplicados ya se han contado y registrado en la tabla de saledetails en la columna Numberold. En la tabla real de saledetails, el recuento es 2 o 1. Por lo tanto, los duplicados no tienen que tenerse en cuenta en la nueva tabla de ventas. Si se permiten los duplicados, se violaría una de las reglas de la primera forma normal. La nueva tabla de ventas se convierte en:
Tabla de ventas - 2NF
Esta mesa de ventas nueva y final está en 2NF y aún en 1NF. No se produce SaleID más de una vez en esta tabla. Hay 10 filas aquí, y no 15, en comparación con la tabla de ventas original. Esta nueva tabla de ventas es más corta que la original por cinco filas.
Esta tabla de ventas final tiene solo una columna de clave principal que es el Saleid. Está subrayado. Los valores de SaleID en la tabla de ventas y los valores de venta en la tabla Saledetails hacen las correspondencias exactas entre las dos tablas.
La notación de la tabla para la tabla de ventas es:
Ventas (Saleid, Cliente, Empleado, Fecha)
Y la notación de la tabla para la tabla saledetails es:
Saledetails (Saleid, ProductID, Numbersold, SellingPrice)
Las nuevas tablas que reemplazaron la tabla de ventas original son: mesa de saledeta y mesa de ventas (mismo nombre). Estas tablas ahora están en la primera forma normal y la segunda forma normal. Vea las reglas reales para la segunda forma normal en la siguiente discusión:
La tabla de pedidos
El análisis similar al de la tabla de ventas se puede realizar para que la tabla de pedidos tenga las nuevas tablas de reemplazo:
Pedido (ordenid, proveedor, empleado, fecha)
y
OrderDetails (OrderId, ProductId, NumberBought, CostPrice)
En este punto, usted, el desarrollador de la base de datos, acaba de terminar de ilustrar a los miembros del personal, incluido el propietario sobre cómo se produce el 2NF del 1NF.
El propietario ahora pregunta: “es cómo formaremos las tabla (s) de 2NF de la tabla 1NF?"Usted, el desarrollador de la base de datos, responde de la siguiente manera:
"Bueno, sí. Sin embargo, cualquier forma que use para formar un 2NF del 1NF debe cumplir con las reglas del 2NF."Luego continúas para explicar las reglas de 2NF.
Reglas para la segunda forma normal
Para que una tabla esté en la segunda forma normal, debe respetar las siguientes dos reglas:
1) La tabla ya debe estar en la primera forma normal.
2) No debe haber dependencia parcial.
La dependencia funcional o la simplemente dependencia se explica en la parte anterior de la serie, la primera forma normal. La explicación se repite brevemente aquí y luego se explicará la dependencia parcial.
Dependencia funcional
En cualquier tabla en la primera forma normal, una vez que se conoce una clave primaria, el resto de los valores en la fila de la clave primaria se pueden obtener. Por ejemplo, en la primera tabla del ejemplo anterior, los valores para el número de clave primario 10 son: pasta de dientes, artículos de tocador, compañía de limpieza, Peter Lewis, Orden y 4. Entonces, el número de clave 10 depende de estos valores. Una clave primaria identifica de manera única todos sus valores.
Dependencia parcial
La dependencia parcial es una situación con la tecla compuesta donde un valor de clave no primario en una fila puede tener solo parte de la tecla compuesta, e.gramo. una de sus células dependiendo de ello. En las tablas anteriores con claves compuestas, cada valor de clave no primario en una fila tiene ambas celdas de la clave primaria dependiendo de ella. La segunda regla para el 2NF dice que no debe haber dependencia parcial. Y no hay dependencia parcial en ninguna de las tablas anteriores.
Ambas celdas de la tecla compuesta dependen de cada valor en la fila para todas las tablas anteriores con claves compuestas. Si fuera una dependencia parcial, una celda en la tecla compuesta dependería de algunos valores en la fila, y la otra celda de la tecla compuesta dependería de los otros valores de la misma fila.
Producción de 2NF de la tabla de productos y la tabla de ventas en comparación
La tabla de productos tiene un límite de longitud (que va hacia abajo). La tabla de ventas no tiene un límite de longitud porque es una tabla de transacciones. Sin embargo, esta diferencia no es lo que necesariamente le da a ambas tablas sus diferentes formas de obtener las tablas de 2NF.
En la tabla de productos 1NF dada, las categorías se repiten hacia abajo. La columna de categoría se elimina para formar una nueva tabla de longitud limitada y la tecla compuesta va a la tabla principal, la tabla de productos.
En la tabla de ventas de 1NF dada, el conjunto SaleID y el conjunto correspondiente de otras celdas de la misma fila se repiten hacia abajo. Se eliminaron las columnas más bien no repetidas para formar una tabla nueva y la tecla compuesta va a la mesa infantil, la tabla de cola de saledeta. Tanto las tablas de ventas como las colas de saledeta son de longitudes ilimitadas.
En este punto, usted, el desarrollador de bases de datos que capacita al personal, incluido a su propietario, les pide a todos que verifiquen si todas las nuevas tablas están realmente en las primeras y segundas formas normales. Deben hacerlo con éxito y responder que sí.
Y luego, concluyes.
Conclusión
Una tabla está en la segunda forma normal si cumple con las siguientes reglas:
1) La tabla ya debe estar en la primera forma normal.
2) No debe haber dependencia parcial.
Para todas las tablas con claves primarias compuestas, todos los valores de claves no primarios en una fila determinan cada uno de los valores de la tecla principal de esa fila.
Tomar una mesa de 1NF a 2NF implicaría manejar un grupo repetitivo importante (conjunto de células).
Aunque se han eliminado algunas vulnerabilidades, una tabla en 2NF todavía tiene otras vulnerabilidades. Más de estas vulnerabilidades se tratarán en el próximo tutorial (artículo) sobre el tercer formulario normal.
A partir de las preguntas que hacen los miembros del personal y los comentarios de ellas, muestra que han entendido todo lo que se les ha enseñado hasta ahora. Tienes que felicitarlos antes de irse y volver a discutir sobre la tercera forma normal.