La tercera forma normal

La Tercera Forma Normal



Esta es la tercera parte de la serie, Cinco Formas Normales. Los títulos de las dos primeras partes (tutoriales) son First Normal Form, seguido de Second Normal Form. En esta parte de la serie, se explica la Tercera Forma Normal.

La explicación sigue la línea de 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 tienda de conveniencia, es una pequeña empresa minorista que recibe artículos cotidianos de proveedores y los vende a clientes individuales en el vecindario.







En este punto, la tienda ya está surtida y ya se han realizado algunas ventas. El hijo, que es el propietario del negocio, tiene algunos empleados, a los que en este tutorial se denominan oficinistas. El propietario y cualquier empleado pueden recibir suministros y realizar ventas después de registrar los productos.



Sin embargo, antes de que la tienda comenzara, ni el propietario ni los empleados sabían nada acerca de las formas normales. Entonces, estaban registrando todo como transacciones en una tabla y un libro de ejercicios. No tenían computadora.



Usted, el lector, ha completado las cinco partes de esta serie de tutoriales; ahora es un desarrollador de bases de datos. El dueño de la tienda de conveniencia es tu amigo. Usted visitó la tienda hace dos días y capacitó al propietario y a los empleados para producir una mesa en su primera forma normal. También visitó la tienda ayer y los capacitó sobre cómo crear una tabla en la segunda forma normal a partir de la primera forma normal.





Hoy acaba de llegar al taller para una visita para capacitarlos sobre cómo producir una tabla en la tercera forma normal a partir de 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 (ID de producto, ID de categoría, producto)
Categorías (ID de categoría, categoría)



Ventas (saleID, cliente, empleado, fecha)
Detalles de venta (ID de venta, ID de producto, número vendido, precio de venta)

Pedidos (orderID, proveedor, empleado, fecha)
Detalles del pedido (ID de pedido, ID de producto, número comprado, precio de costo)

Las claves simples o compuestas están subrayadas.

Después de resumir lo enseñado en los dos días anteriores y antes de que pudieras hacer nada, el titular pregunta:

“¿Qué pasa con los números de teléfono, direcciones, etc., para clientes y empleados?

¿Qué pasa con la cantidad en stock, el nivel de pedido, etc., para los productos?
¿Necesitan sus propias mesas separadas, o deberían encajar en las mesas actuales?

Usted, el desarrollador de la base de datos, responde:

“¡Felicitaciones, propietario! Has introducido indirectamente el tema de la Tercera Forma Normal.

Tu continua.

Otras columnas necesarias

Otras columnas necesarias se agregan primero a las tablas anteriores, que están en 1NF y 2NF. Se modifican algunos de los nombres de las columnas anteriores.

Como mínimo, la tabla Categorías debe tener las siguientes columnas:

Categorías (ID de categoría, nombre de categoría, descripción)

La descripción es un breve párrafo 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 Productos debe tener las siguientes columnas:

Productos (ID de producto, ID de categoría, ID de proveedor, nombre de producto, precio unitario, cantidad en stock, nivel de pedido)

A medida que se vende cada producto, se alcanzará un nivel bajo (número) de productos cuando el producto deba volver a pedirse, por lo que los clientes no deben venir a la tienda y no tener el producto. Tal ausencia no es buena para los negocios. cantidadInStock es el número de un producto en particular en stock. Esto incluye lo que está en la tienda y lo que está en el estante.

ID de categoría y ID de proveedor son claves foráneas. Es por eso que tienen un guión subrayado en lugar de un solo subrayado. La clave externa se explica a continuación. En la parte anterior de la serie (Segunda forma normal), categoryID era parte de la clave principal con un solo subrayado debido a cómo se llegó a ella. Sin embargo, a partir de la explicación a continuación, queda claro que el ID de categoría debe ser una clave externa (con un guión subrayado).

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:

Detalles de venta (ID de venta, ID de producto, precio de venta unitario, cantidad, descuento)

Se espera que el valor del 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:

Detalles del pedido (ID de pedido, ID de producto, precio de costo unitario, cantidad, descuento)

Se espera que el valor del descuento sea cero la mayor parte del tiempo. El descuento aquí es el descuento que el proveedor le da a la tienda.

Como se ve a continuación, la tabla Productos puede considerarse en 2NF o 3NF. Las tablas Ventas y Pedidos tienen el problema de 3NF. Solo se utilizará la tabla de ventas para explicar el problema y la solución. El 3NF para la tabla de pedidos y la tabla de productos siguen un razonamiento similar y solo se citarían.

Al agregar columnas, la tabla Ventas sería:

Ventas (ID de venta, nombre de cliente de fecha de venta, 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 del vecindario, las celdas de las columnas ciudad, región (estado), código postal y país se pueden dejar vacías, aunque no se dejan vacías en este artículo.

Esta tabla de Ventas todavía está en 2NF ya que no se han violado las reglas de 1NF y 2NF. Sin embargo, debe tenerse en cuenta que en una fila de la tabla Ventas, el cliente (nombre) ha sido reemplazado por siete celdas de fila de clientes.

Nota: una celda de dirección tiene el número de casa, el nombre de la calle o carretera y el nombre del pueblo, todos separados por comas. Se puede considerar que una ciudad está formada por varios pueblos. Aunque las comas separan estos componentes de cadena en particular, forman un valor de celda y no tres valores de celda.

La columna de empleados también tiene que ser reemplazada por siete de esas columnas. 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 ID de cliente

La columna de tipo de datos SaleID es un número entero o, mejor, de 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 de 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 en la parte anterior de la serie, ha sido reemplazado por siete celdas, una de las cuales sigue siendo nombre-cliente. Esto significa que los datos del cliente son una entidad. Actualmente, el nombre del cliente identifica sus otros seis datos seguidos. Si se programa esta tabla, será conveniente identificar la entidad del cliente en cada fila con un número entero (no autoincrementable). En ese caso, una columna de ID de cliente debe preceder al nombre de cliente. La tabla anterior se convierte en:

Tabla de ventas – 2NF – Con ID de cliente

Hay tres ID de cliente: 1, 2 y 3, con 1 cinco veces para John Smith, 2 dos veces para James Taylor y 3 una vez para Susan Wright.

Tenga en cuenta que algunos ID de cliente y sus dependientes se repiten.

Reglas para la tercera forma normal

Una tabla está en Tercera Forma Normal si cumple con las siguientes reglas:

  1. Ya debería estar en la Segunda Forma Normal.
  2. Y no debería tener Dependencia Transitiva.

Entonces uno de los oficinistas (empleados) pregunta: “¿Qué 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 de 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, SaleID depende de diez valores de celda en cada fila. Sin embargo, el ID de cliente depende de siete valores de celda en la misma fila, pero el ID de cliente no depende del ID de venta ni de los otros valores de los que depende el ID de venta.

Tal dependencia para el ID de cliente es una dependencia transitiva. Y customerID se denomina clave externa y está subrayado con guiones en esta serie de tutoriales, Las cinco formas normales.

Supongamos que un atributo no principal (valor de celda no principal) depende de otros atributos no principales, y el atributo no principal en cuestión (por ejemplo, CustomerID y sus dependientes) no depende de la clave principal y el resto de la celda. valores en la fila. Entonces eso es dependencia transitiva.

La tabla Ventas anterior con la clave foránea y sus dependientes, ocasionaría problemas contables (anomalías).

Tabla de Ventas De 2NF a 3NF

Para resolver el problema planteado por la clave externa y sus dependencias, elimine la clave externa y sus dependencias, para formar una nueva tabla sin repeticiones. Sin embargo, incluso si la clave externa no depende de la clave principal, la clave principal depende de la clave externa. Por lo tanto, una copia de la clave externa debe permanecer en la tabla principal. La nueva tabla de ventas, en este punto, cumple con 1NF, 2NF y 3NF; es una tabla principal. La nueva tabla secundaria de la tabla Sales anterior también es compatible con 1NF, 2NF y 3NF. El nombre de la tabla secundaria con clave externa y sus dependientes es Clientes. Si no se puede encontrar un nombre adecuado, entonces algo salió mal con el análisis. La nueva Tabla de Ventas en 3NF es:

Tabla de Ventas Finales 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 tabla para esta tabla de Ventas final en 3NF es:

Ventas (ID de venta, fecha de venta, ID de cliente, ID de empleado)

saleID es la clave principal con un solo subrayado. customerID es una clave externa, con un guión subrayado. employeeID también es una clave externa con un guión subrayado. Tenga en cuenta que la situación del empleado en la tabla Ventas en 2NF es la misma que la situación del cliente. El ID de empleado y sus propios dependientes deben eliminarse para formar otra tabla; queda una copia del ID de empleado.

Nota: ID de venta, ID de cliente y ID de empleado no forman una clave compuesta. saleID depende de customerID y employeeID.

La relación entre saleID y customerID es de muchos a uno.

La tabla de clientes en 3NF

Esta tabla tiene tres filas en lugar de 9 filas en la tabla Ventas 2FN. En esta tabla, customerID es una clave principal. Es igual a la clave foránea de la tabla Ventas, pero sin repeticiones. La clave externa en la tabla Ventas y la clave principal en la tabla Cliente vinculan ambas tablas.

Las filas repetidas en la tabla Cliente se han eliminado para no violar 1NF.

Como puede ver el lector, poner una tabla en 3NF también resolvería el problema de filas repetidas (redundancia).

La notación de la tabla para la tabla de clientes es:

Clientes (ID de cliente, nombre de cliente, teléfono, dirección, ciudad, región, código postal, país)

La tabla de productos revisada

La tabla de productos dada arriba en forma de notación es:

Productos (ID de producto, ID de categoría, ID de proveedor, nombre de producto, precio unitario, cantidad en stock, nivel de pedido)

La clave principal aquí es productID. ID de categoría y ID de proveedor son claves foráneas. Similar a la tabla de Clientes, hay una tabla de Categorías, donde ID de categoría es la clave principal, y hay una tabla de Proveedores, donde ID de proveedor es la clave principal.

Si los valores de las celdas para precio unitario, cantidad en inventario y nivel de pedido permanecen fijos, entonces la tabla de productos, tal como está, está realmente en 3FN. Si estos valores van a cambiar, entonces la tabla Productos, tal como está, está en 2NF. En esta parte de la serie de tutoriales, se supone que esos valores permanecen fijos a lo largo del tiempo.

Todas las Mesas

Todas las tablas están ahora en 3NF. Se muestran como:

Empleados (ID de empleado, nombre, teléfono, dirección, ciudad, región, código postal, país, fecha de nacimiento, fecha de contratación, fecha de liberación)

Proveedores (ID de proveedor, nombre, teléfono, dirección, ciudad, región, código postal, país)

Productos (ID de producto, ID de categoría, ID de proveedor, nombre de producto, precio unitario, cantidad en stock, nivel de pedido)
Categorías (ID de categoría, nombre de categoría, descripción)

Ventas (ID de venta, fecha de venta, ID de cliente, ID de empleado)
Detalles de venta (ID de venta, ID de producto, número vendido, precio de venta)
Clientes (ID de cliente, nombre de cliente, teléfono, dirección, ciudad, región, código postal, país)

Pedidos (ID de pedido, fecha de venta, ID de proveedor, ID de empleado)
Detalles del pedido (ID de pedido, ID de producto, número comprado, precio de costo)

Se han producido hasta nueve tablas profesionales a partir de una sola tabla producida por novatos para evitar redundancias y problemas contables (anomalías al insertar, borrar y actualizar). La mesa de novatos por sí sola conduciría a pérdidas financieras.

Probando al 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, tendrá una duración de una hora, y es la siguiente:

Pregunta: Usando 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 respaldar las notaciones de la tabla.

Mientras completan la prueba, usted, como desarrollador de la base 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 capacitando, y ahora que están tomando la prueba, los clientes han estado yendo y viniendo sin ser atendidos. Eso no es bueno para el negocio y usted, el desarrollador de la base de datos, lo sabe. Algunos clientes pueden ir a las tiendas de la competencia y nunca regresar.

Usted, el desarrollador de la base de datos, tiene 30 años. El propietario, como su amigo, también tiene 30 años. Los oficinistas (empleados) tienen entre 18 y 24 años de edad. Todas las cualidades que necesitaban para trabajar para el propietario eran: tener buena salud, saber leer y escribir, saber sumar, restar, multiplicar y dividir. , y poder usar la computadora e Internet.

Cuando una tabla está en 3NF, la mayoría de las vulnerabilidades se eliminan de la base de datos. Muchas bases de datos comerciales no van más allá de 3NF, y las firmas o empresas se sienten cómodas.

Entonces, si todos pasan la prueba, les pedirá a los empleados que se vayan y continúen trabajando. También les aconsejará que ahorren parte de sus salarios para que puedan ser dueños de sus tiendas de conveniencia. Continuarás mañana entrenando solo al titular 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, regresa. Marcas sus guiones. ¡Una excelente noticia! Todos ellos, incluido el propietario, tienen el 100% cada uno. ¡Viva! ¡Eso es excelente!

Así que felicidades a todos ustedes: el profesor y los alumnos.

No queda nada más que 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:

  1. Todas las columnas de una tabla deben tener nombres de encabezado únicos.
  2. Cada celda debe tener un único valor.
  3. Los valores almacenados en una columna deben ser del mismo tipo.
  4. Las filas deben ser distintas.
  5. No importa el orden de las columnas o filas.

Una tabla está en Segunda Forma Normal, si no viola ninguna de las siguientes reglas:

  1. La tabla ya debe estar en Primera Forma Normal.
  2. No debe existir una dependencia parcial.

Una tabla está en Tercera Forma Normal, si no viola ninguna de las siguientes reglas:

  1. Ya debe estar en la Segunda Forma Normal.
  2. Y no debe tener Dependencia Transitiva.

Usted, el desarrollador de la base de datos, les dice a los empleados que han aprendido lo suficiente. Brinda consejos y les pide que regresen al trabajo y permanezcan en sus estaciones por defecto.

Concierta una cita únicamente con el propietario, que tendrá lugar mañana en su oficina para recibir formación sobre 4NF y 5NF.