Esta es la tercera parte de la serie, cinco formas normales. Los títulos de las dos primeras partes (tutoriales) son la primera forma normal, seguidas de la segunda forma normal. En esta parte de la serie, se explica la tercera forma normal.
La explicación sigue la historia: un padre ha muerto y ha dejado algo de dinero para su hijo. El hijo decidió invertir el dinero en una tienda de conveniencia. Una tienda de conveniencia, también conocida como una tienda de conveniencia, es un pequeño negocio minorista que recibe artículos cotidianos de proveedores y los vende a clientes individuales en el vecindario.
En este punto, la tienda ya está almacenada, y algunas ventas ya se han realizado. El hijo, que es el propietario del negocio, tiene algunos empleados, que se llaman empleados en este tutorial. El propietario y cualquier empleado pueden recibir suministros y realizar ventas después de registrar los productos.
Sin embargo, antes de que comenzara la tienda, ni el propietario ni los empleados sabían nada sobre formas normales. Entonces, estaban grabando todo como transacciones en una mesa y un libro de ejercicios. No tenían una computadora.
Usted, el lector, ha completado las cinco partes de esta serie tutorial; Ahora eres un desarrollador de bases de datos. El propietario de la tienda de conveniencia es tu amigo. Visitaste la tienda hace dos días y entrenaste al propietario y a los empleados para producir una mesa en su primera forma normal. También visitó la tienda ayer y los entrenó sobre cómo crear una mesa en la segunda forma normal desde la primera forma normal.
Hoy, acaba de llegar a la tienda para una visita para entrenarlos sobre cómo producir una mesa en la tercera forma normal desde la segunda forma normal. Todas las tablas que tienen actualmente están en la segunda forma normal. Las tablas (por nombre y encabezados de columna) son:
Productos (ProductID, CategoryID, Producto)
Categorías (categoryID, categoría)
Ventas (Saleid, Cliente, Empleado, Fecha)
Saledetails (Saleid, ProductID, Numbersold, SellingPrice)
Pedidos (pedido, proveedor, empleado, fecha)
OrderDetails (OrderId, ProductId, NumberBought, CostPrice)
Las teclas individuales o compuestas están subrayadas.
Después de resumir lo que se enseñó en los dos días anteriores y antes de que pudieras hacer algo, el propietario pregunta:
"¿Qué pasa con los números de teléfono, direcciones, etc., para clientes y empleados?
¿Qué pasa con la cantidad en el stock, el nivel de pedido, etc., para productos?
¿Necesitan sus propias tablas separadas, o deberían instalarlos en las tablas actuales??"
Usted, el desarrollador de la base de datos, respuesta:
"Felicitaciones, propietario! Ha introducido indirectamente el problema de la tercera forma normal."
Tu continua.
Otras columnas necesarias
Primero se agregan otras columnas necesarias a las tablas anteriores, que están en 1NF y 2NF. Algunos de los nombres de columnas anteriores se modifican.
Como mínimo, la tabla Categorías debe tener las siguientes columnas:
Categorías (categoryId, categoryName, Descripción)
La descripción es un párrafo corto que describe la categoría. Esta tabla de categorías ya está en 1NF, 2NF y 3NF. El 3NF se explica a continuación:
Como mínimo, la tabla de productos debe tener las siguientes columnas:
Productos (ProductId, CategoryID, ProveyId, ProductName, UnitPrice, CantityInstock, ReorderLevel)
A medida que se vende cada producto, se alcanzará un nivel bajo (número) de los productos cuando el producto debe reordenarse, para que los clientes no deben venir a la tienda y no tener el producto. Tal ausencia no es buena para los negocios. CantityInstock es el número de un producto en particular en stock. Esto incluye lo que hay en la tienda y lo que está en el estante.
CategoryID y ProveierID son claves extranjeras. Por eso tienen un subrayado de Dash en lugar de un solo subrayado. La clave extranjera se explica a continuación. En la parte anterior de la serie (segunda forma normal), CategoryID fue parte de la clave principal con una sola subrayada debido a cómo se llegó a. Sin embargo, de la explicación a continuación, estaría claro que el categoryID debería ser una clave extranjera (con un subrayado de tablero).
Esta tabla de productos ya está en 1NF, 2NF y 3NF. Vea por qué está en 3NF a continuación:
Como mínimo, la tabla Saledetails debe tener las siguientes columnas:
Saledetails (Saleid, ProductID, UnitslellingPrice, cantidad, descuento)
Se espera que el valor de descuento sea cero la mayor parte del tiempo. Un descuento es el descuento que la tienda le da a un cliente.
Como mínimo, la tabla OrderDetails debe tener las siguientes columnas:
OrderDetails (OrderId, ProductId, UnitCostPrice, Cantidad, Descuento)
Se espera que el valor de descuento sea cero la mayor parte del tiempo. El descuento aquí es el descuento que el proveedor da la tienda.
Como se ve a continuación, la tabla de productos puede considerarse en 2NF o 3NF. Las tablas de ventas y pedidos tienen el problema de 3NF. Solo se utilizará la tabla de ventas para explicar el problema y la solución. La tabla 3NF para pedidos y la tabla de productos siguen un razonamiento similar y solo se citaría.
Al agregar columnas, la tabla de ventas sería:
Ventas (Saleid, Datesold Customername, teléfono, dirección, ciudad, región, código postal, país, empleado)
Siete columnas han reemplazado la columna del cliente en la tabla original. Dado que los clientes son personas en el vecindario, las celdas de la ciudad, la región (estado), el código postal y las columnas de los países pueden quedarse vacías, aunque no se quedan vacías en este artículo.
Esta tabla de ventas todavía está en 2NF ya que las reglas 1NF y 2NF no han sido violadas. Sin embargo, debe darse cuenta de que en una fila de la tabla de ventas, el cliente (nombre) ha sido reemplazado por siete celdas de la fila del cliente.
Nota: Una celda de direcciones tiene el número de casa, el nombre de la calle o la carretera, y el nombre de la ciudad, todo separado por comas. Se puede considerar una ciudad compuesta por varias ciudades. Aunque las comas separan estos componentes de cadena particulares, forman un valor de celda y no tres valores de celda.
La columna de los empleados también debe ser reemplazada por siete columnas de este tipo. Sin embargo, eso no se hace en este tutorial para ahorrar tiempo y espacio de enseñanza. Entonces, una tabla de ventas con datos puede ser:
Tabla de ventas - 2NF - sin CustomerID
La columna SaleID de tipo de datos es un entero o mejor, incremento automático. El tipo de datos de la columna Datesold es una fecha y no un número porque tiene el carácter "/", que no es un dígito. El tipo de datos para el resto de las columnas, incluida la columna del teléfono, es cadena (o texto). El valor del teléfono tiene el carácter "-", que no es un dígito.
Tenga en cuenta que para cada fila, el cliente (nombre), como estaba en la parte anterior de la serie, ha sido reemplazado por siete celdas, una de las cuales todavía es el nombre del cliente. Esto significa que los datos del cliente son una entidad. Actualmente, el nombre del cliente identifica sus otros seis datos seguidos. Si esta tabla está programada, será conveniente identificar la entidad del cliente en cada fila con un número entero (no de incremento automático). En ese caso, una columna de CustomerID debe preceder al nombre personalizado. La tabla anterior se convierte en:
Tabla de ventas - 2NF - con CustomerID
Hay tres clientes: 1, 2 y 3, con 1 que ocurre cinco veces para John Smith, 2 ocurren dos veces para James Taylor y 3 ocurrieron una vez para Susan Wright.
Tenga en cuenta que algunos clientes y sus dependientes repiten.
Reglas para la tercera forma normal
Una tabla está en tercera forma normal si cumple con las siguientes reglas:
Luego, uno de los empleados (empleados) pregunta: “¿Cuál es una dependencia transitiva??". Y usted, el desarrollador de la base de datos, responde: “Esa es una buena pregunta!"
Dependencia transitiva
Es cierto que en una fila, Saleid identifica todos los valores en la fila; Sin embargo, CustomerID identifica sus siete valores de datos, pero no identifica el resto de los valores identificados por SaleID en esa fila. Dicho de otra manera, el SaleID depende de diez valores de celdas en cada fila. Sin embargo, el CustomerID depende de siete valores de celdas en la misma fila, pero el CustomerID no depende del SaleID y los otros valores de los que Saleid depende.
Dicha dependencia del custumerid es la dependencia transitiva. Y CustomerID se llama clave extranjera y está subrayado en esta serie tutorial, las cinco formas normales.
Supongamos que un atributo no predominante (valor de celda no primaria) depende de otros atributos no predominales, y del atributo no predominante en cuestión (e.gramo., CustomerID y sus dependientes) no depende de la clave principal y del resto de los valores de la celda en la fila. Entonces esa es la dependencia transitiva.
La tabla de ventas anterior con la clave extranjera y sus dependientes causaría problemas contables (anomalías).
Tabla de ventas de 2NF a 3NF
Para resolver el problema planteado por la clave extranjera y sus dependientes, elimine la clave extranjera y sus dependientes, para formar una nueva tabla sin repeticiones. Sin embargo, incluso si la clave extranjera no depende de la clave principal, la clave principal depende de la clave externa. Entonces, una copia de la clave extranjera debe permanecer en la tabla principal. La nueva tabla de ventas, en este punto, es 1NF, 2NF y 3NF compatible con; Es una mesa principal. La nueva tabla infantil de la tabla de ventas anterior también es 1NF, 2NF y 3NF compatible con. El nombre de la mesa infantil con la clave extranjera y sus dependientes, son clientes. Si no se puede encontrar un nombre adecuado, entonces algo ha salido mal con el análisis. La nueva tabla de ventas en 3NF es:
Tabla de ventas final en 3NF
Esta tabla en 3NF tiene el mismo número de filas que la de 2NF pero con menos columnas.
La notación de la tabla para esta tabla de ventas final en 3NF es:
Ventas (SaleID, Datesold, CustomerID, EmployeeId)
El saleID es la clave principal con un solo subrayado. CustomerID es una clave extranjera, con un subrayado de tablero. EmployeeId también es una clave extranjera con un subrayado de tablero. Tenga en cuenta que la situación de los empleados en la tabla de ventas en 2NF es la misma que la situación del cliente. El empleado y sus propios dependientes deben ser retirados para formar otra tabla; permanece una copia del EmployeeId.
Nota: SaleID, CustomerID y EmployeeID no forman una clave compuesta. SaleID depende de CustomerID y EmployeeId.
La relación entre Saleid y CustomerID es muchos a uno.
La mesa del cliente en 3NF
Esta tabla tiene tres filas en lugar de 9 filas en la tabla de ventas de 2NF. En esta tabla, CustomerID es una clave principal. Es lo mismo que la clave extranjera en la tabla de ventas, pero sin repeticiones. La clave extranjera en la tabla de ventas y la clave principal en el enlace de la tabla del cliente ambas tablas.
Las filas repetidas en la tabla del cliente se han eliminado para no violar 1NF.
Como el lector puede ver, poner una mesa en 3NF también resolvería el problema de las filas repetidas (redundancia).
La tabla de notación de la tabla para clientes es:
Clientes (CustomerId, Nombre personalizado, teléfono, dirección, ciudad, región, código postal, país)
La tabla de productos revisada
La tabla de productos dada anteriormente en forma de notación es:
Productos (ProductId, CategoryID, ProveyId, ProductName, UnitPrice, CantityInstock, ReorderLevel)
La clave principal aquí es ProductID. CategoryID y ProveierID son claves extranjeras. Similar a la tabla del cliente, hay una tabla de categorías, donde el categoryID es la clave principal, y hay una tabla de proveedores, donde el proveedor es la clave principal.
Si los valores para las celdas para unitprice, cantityInstock y reorderLevel permanecerán fijos, entonces la tabla de productos, tal como está, está realmente en 3NF. Si estos valores cambiarán, entonces la tabla de productos, tal como está, está en 2NF. En esta parte de la serie tutorial, se supone que esos valores permanecen fijos con el tiempo.
Todas las mesas
Todas las mesas están ahora en 3NF. Se muestran como:
Empleados (Empleado, nombre, teléfono, dirección, ciudad, región, código postal, país, fecha de nacimiento, contratación, daterelada)
Proveedores (proveedor, nombre, teléfono, dirección, ciudad, región, código postal, país)
Productos (ProductId, CategoryID, ProveyId, ProductName, UnitPrice, CantityInstock, ReorderLevel)
Categorías (categoryId, categoryName, Descripción)
Ventas (SaleID, Datesold, CustomerID, EmployeeId)
Saledetails (Saleid, ProductID, Numbersold, SellingPrice)
Clientes (CustomerId, Nombre personalizado, teléfono, dirección, ciudad, región, código postal, país)
Pedidos (OrderId, Datesold, ProveierId, EmployeeId)
OrderDetails (OrderId, ProductId, NumberBought, CostPrice)
Se han producido hasta nueve tablas profesionales a partir de una sola tabla producida por novatos para evitar problemas de redundancia y contabilidad (anomalías del inserto, eliminación y actualización). La mesa novata por sí sola conduciría a pérdidas financieras.
Prueba del personal
En este punto, todos los empleados, incluido el propietario, deberían haber entendido 1NF, 2NF y 3NF. Sin embargo, tienen que ser probados. Todos ellos, incluido el propietario, se sentarán en diferentes lugares y completarán la prueba. La prueba que consta de una pregunta tomará una hora, y es la siguiente:
Pregunta: Uso de reglas para 1NF, 2NF y 3NF, demuestre que las nueve tablas anteriores ya están en primera forma normal, segunda forma normal y tercera forma normal. Los clientes y proveedores no tienen que ser entidades reales. Los datos de las tablas deben hacer una copia de seguridad de las anotaciones de la tabla.
Mientras completan la prueba, usted, como desarrollador de bases de datos, sale a tomar un refrigerio y una cerveza, para regresar después de una hora.
El futuro cercano y lejano
Mientras usted, el desarrollador de la base de datos, está fuera, también considera qué consejo darles si todos pasan la prueba.
Además, mientras los estaba entrenando, y ahora que están tomando la prueba, los clientes han venido y se fueron sin ser atendidos. Eso no es bueno para los negocios, y usted, el desarrollador de bases de datos, sabe que. Algunos clientes pueden ir a las tiendas de la competencia y nunca volver.
Usted, el desarrollador de bases de datos, tiene 30 años. El propietario, como su amigo, también tiene 30 años. Los empleados (empleados) tienen entre 18 y 24 años. Todas las cualidades que necesitaban para trabajar para el propietario eran: estar saludables, poder leer y escribir, poder agregar, restar, multiplicar y dividir, y poder usar la computadora e Internet.
Cuando una tabla está en 3NF, la mayoría de las vulnerabilidades se han eliminado de la base de datos. Muchas bases de datos comerciales no van más allá de 3NF, y las empresas o empresas se sienten cómodas.
Entonces, si todos pasan la prueba, le pedirá a los empleados que vayan y continúen trabajando. También les aconsejará que ahorren partes de sus salarios para que puedan poseer sus tiendas de conveniencia. Continuará mañana para entrenar solo al propietario en 4NF y 5NF. Con el conocimiento de 4NF y 5NF, se eliminan todas las vulnerabilidades conocidas.
Evaluación
Después de una hora, usted, el desarrollador de la base de datos, regrese. Marcas sus guiones. Una pieza de excelentes noticias! Todos, incluido el propietario, tienen 100% cada uno. Viva! Eso es excelente!
Entonces felicitaciones a todos ustedes: el maestro y los estudiantes.
No queda nada por hacer en este tutorial que no sea concluir.
Conclusión
Una tabla está en primera forma normal, si no viola ninguna de las siguientes reglas:
Una tabla está en segunda forma normal, si no viola ninguna de las siguientes reglas:
Una tabla está en tercera forma normal, si no viola ninguna de las siguientes reglas:
Usted, el desarrollador de bases de datos, le dice a los empleados que han aprendido lo suficiente. Usted brinda consejos y les pide que regresen al trabajo y se queden en sus estaciones de forma predeterminada.
Usted establece una cita con el propietario solamente, que tendrá lugar en su oficina mañana para capacitar en 4NF y 5NF.