¿Cómo lidiar con anomalías de modificación sql y formas normales
Una serie de problemas - llamada anomalías de modificación - puede plagar una base de datos si no estructurar la base de datos SQL correctamente. Para evitar estos problemas, se puede normalizar la estructura de base de datos. Normalización generalmente implica dividir una tabla de base de datos en dos tablas simples.
Anomalías de modificación se llama así porque se generan mediante la adición de, cambie a, o supresión de datos de una tabla de base de datos.
Supongamos, por ejemplo, que su empresa vende productos de limpieza para el hogar, y te cobran a todos los clientes el mismo precio para cada producto. La tabla VENTAS realiza un seguimiento de todo para usted. Supongamos que el cliente 1001 se aleja y ya no es un cliente. No te importa lo que él compró en el pasado, porque no va a comprar nada de nuevo. Usted quiere eliminar su fila de la tabla.
Si lo hace, sin embargo, no acaba de perder el hecho de que al cliente 1001 ha comprado ropa con detergente también pierdes el hecho de que el detergente de lavandería cuesta $ 12. Esta situación se denomina anomalía eliminación. En la eliminación de un hecho (que el cliente compró 1.001 detergente para la ropa), sin darse cuenta, elimina otro hecho (que detergente para la ropa cuesta $ 12).
Puede utilizar la misma tabla para ilustrar una anomalía de inserción. Por ejemplo, supongamos que desea añadir desodorante en barra a su línea de productos a un precio de $ 2. No se puede agregar estos datos a la tabla de ventas hasta que un cliente compra desodorante en barra.
El problema con la tabla de ventas es que esta tabla se refiere a más de una cosa, sino que abarca no sólo la que los clientes compran productos, sino también lo que cuestan los productos. Para eliminar las anomalías, hay que dividir la tabla de ventas en dos mesas, cada uno dedicado a un solo tema o idea.
CUST_PURCH, que trata de la idea única de compras de los clientes.
PROD_PRICE, que trata de la idea única de precios de los productos.
Ahora puede eliminar la fila para el cliente 1.001 de CUST_PURCH sin perder el hecho de que el detergente de lavandería cuesta $ 12. (El costo de detergente para la ropa ya está guardado en PROD_PRICE.) También puede agregar desodorante en barra de PROD_PRICE si alguien ha comprado el producto. Información Realizar compra se almacena en otro lugar, en la tabla CUST_PURCH.
El proceso de dividir una tabla en varias tablas, cada una de las cuales tiene un solo tema, se llama normalización. Una operación de normalización que resuelve un problema puede no afectar a otros problemas. Puede que tenga que realizar varias operaciones sucesivas de normalización para reducir cada tabla resultante a un solo tema.
Cada tabla de base de datos debe lidiar con un - y sólo uno - el tema principal. A veces (como habrá adivinado) la determinación de que una mesa De Verdad trata de dos o más temas pueden ser difíciles.
Puede clasificar las mesas de acuerdo a los tipos de anomalías de modificación a la que estamos sujetos. En un artículo 1.970, EF Codd identificó tres fuentes de anomalías de modificación y define primero, segundo, tercero y formas normales (1NF, 2NF, 3NF) como remedios a esos tipos de anomalías. En los años siguientes, Codd y otros descubrieron otros tipos de anomalías y especificados nuevas formas normales para lidiar con ellos.
La forma Boyce-Codd normal (BCNF), la cuarta forma normal (4NF), y la quinta forma normal (5NF) cada proporcionaron un mayor grado de protección contra anomalías de modificación. No fue sino hasta 1981, sin embargo, hizo un papel, escrito por Ronald Fagin, describir la forma normal de dominio de llave o DK / NF. Utilizando esta última forma normal le permite garantía que una tabla esté libre de anomalías de modificación.
Las formas normales son anidado en el sentido de que una mesa que está en 2NF es automáticamente además en 1NF. Del mismo modo, una mesa en 3NF está automáticamente en 2NF, y así sucesivamente. Para las aplicaciones más prácticas, poniendo una base de datos en 3NF es suficiente para asegurar un alto grado de integridad. Para estar absolutamente seguro de su integridad, debe poner la base de datos en DK / NF.
Después de normalizar una base de datos tanto como sea posible, es posible que desee hacer denormalizations seleccionados para mejorar el rendimiento. Si lo hace, tenga en cuenta los tipos de anomalías que pueden ahora convertido en posible.