Los conceptos de segunda forma normal (2NF) y tercera forma normal (3NF) se confunden fácilmente. El punto clave para distinguirlos es, 2NF: si la columna de clave no primaria depende completamente de la clave primaria. , o depende de parte de la clave principal; 3NF: si la columna de clave no principal depende directamente de la clave principal o de la columna de clave no principal.
Segunda forma normal (2NF): La primera es 1NF, y también contiene dos partes: primero, la tabla debe tener una clave primaria; segundo, las columnas no incluidas en la clave primaria deben depender completamente de ella. la clave principal, no solo Depende de parte de la clave principal. Considere una tabla de detalles de pedidos OrderDetail cuyas propiedades son las siguientes: (ID de pedido, ID de producto, Precio unitario, Descuento, Cantidad, Nombre de producto).
Como sabemos que se pueden pedir varios productos en un solo pedido, un ID de pedido por sí solo no es suficiente para ser la clave principal. La clave principal debe ser (ID de pedido, ID de producto). Es obvio que Descuento y Cantidad dependen completamente de la clave principal (OderID, ProductID), mientras que UnitPrice y ProductName solo dependen de ProductID. Entonces la tabla OrderDetail no se ajusta a 2NF. Los diseños que no cumplen con 2NF son propensos a generar datos redundantes.
La tabla OrderDetail se puede dividir en:
OrderDetail (OrderID, ProductID, Descuento, Cantidad)
Producto (ProductID, UnitPrice, ProductName)
Para eliminar múltiples repeticiones de UnitPrice y ProductName en la tabla de pedidos original.
Tercera forma normal (3NF): en primer lugar, es 2NF. Además, las columnas de clave no primaria deben depender directamente de la clave primaria y no puede haber dependencias transitivas. Es decir, no puede existir: la columna de clave no principal A depende de la columna de clave no principal B, y la columna de clave no principal B depende de la clave principal. Considere una tabla de pedidos Pedido: (ID de pedido, Fecha de pedido, ID de cliente, Nombre de cliente, Dirección de cliente, Ciudad de cliente) La clave principal es (ID de pedido).
Entre ellos, OrderDate, CustomerID, CustomerName, CustomerAddr, CustomerCity
y otras columnas de clave no principal dependen completamente de la clave principal (OrderID), por lo que cumplen con 2NF.
Pero el problema es que CustomerName, CustomerAddr y CustomerCity dependen directamente de
CustomerID (columna de clave no principal), en lugar de depender directamente de la clave principal. clave primaria a través de la transmisión, por lo que no cumple con 3NF.
3NF se logra dividiendo el Pedido en Pedido (OrderID, OrderDate, CustomerID) y Cliente (CustomerID, CustomerName, CustomerAddr, CustomerCity).
CVVDZVD