La forma normal de clave de dominio ( DK/NF o DKNF ) es una forma normal utilizada en la normalización de bases de datos que requiere que la base de datos no contenga otras restricciones que las de dominio y clave.
Una restricción de dominio especifica los valores permitidos para un atributo determinado, mientras que una restricción de clave especifica los atributos que identifican de forma única una fila en una tabla determinada.
La forma normal de dominio/clave se logra cuando cada restricción de la relación es una consecuencia lógica de la definición de claves y dominios, y la aplicación de restricciones y condiciones de claves y dominios hace que se cumplan todas las restricciones. De este modo, se evitan todas las anomalías no temporales .
La razón para utilizar la forma normal de dominio/clave es evitar tener restricciones generales en la base de datos que no sean restricciones claras de dominio o de clave. La mayoría de las bases de datos pueden probar fácilmente las restricciones de dominio y de clave en los atributos. Sin embargo, las restricciones generales normalmente requerirían una programación de base de datos especial en forma de procedimientos almacenados (a menudo de la variedad de disparadores ) que son costosos de mantener y costosos de ejecutar para la base de datos. Por lo tanto, las restricciones generales se dividen en restricciones de dominio y de clave.
Es mucho más fácil crear una nueva base de datos en forma normal de dominio/clave que convertir bases de datos en formas normales menores que pueden contener numerosas anomalías. Sin embargo, crear con éxito una base de datos en forma normal de dominio/clave sigue siendo una tarea difícil, incluso para programadores de bases de datos experimentados. Por lo tanto, si bien la forma normal de dominio/clave elimina los problemas que se encuentran en la mayoría de las bases de datos, tiende a ser la forma normal más costosa de lograr. Sin embargo, no lograr la forma normal de dominio/clave puede acarrear costos ocultos a largo plazo debido a anomalías que aparecen en bases de datos que solo se adhieren a formas normales menores con el tiempo.
La tercera forma normal , la forma normal de Boyce–Codd , la cuarta forma normal y la quinta forma normal son casos especiales de la forma normal de dominio/clave. Todas tienen dependencias funcionales , multivaluadas o de unión que se pueden convertir en superclaves . Los dominios de esas formas normales no tenían restricciones, por lo que se satisfacen todas las restricciones de dominio. Sin embargo, transformar una forma normal superior en una forma normal de dominio/clave no siempre es una transformación que preserve la dependencia y, por lo tanto, no siempre es posible.
En la siguiente tabla se produce una infracción del DKNF:
(Suponga que el dominio para Persona rica consiste en los nombres de todas las personas ricas en una muestra predefinida de personas ricas; el dominio para Tipo de persona rica consiste en los valores 'Millonario' y 'Multimillonario'; y el dominio para Patrimonio neto en dólares consiste en todos los números enteros mayores o iguales a 1.000.000).
Existe una restricción que vincula el tipo de persona adinerada con el patrimonio neto en dólares, aunque no podemos deducir uno del otro. La restricción dicta que un millonario tendrá un patrimonio neto de 1.000.000 a 999.999.999 inclusive, mientras que un multimillonario tendrá un patrimonio neto de 1.000.000.000 o más. Esta restricción no es una restricción de dominio ni una restricción clave; por lo tanto, no podemos confiar en las restricciones de dominio y las restricciones clave para garantizar que una combinación inconsistente de tipo de persona adinerada / patrimonio neto en dólares no llegue a la base de datos.
La violación de DKNF podría eliminarse eliminando la columna de tipo de persona adinerada. El estado de millonario o multimillonario de una persona adinerada se determina por su patrimonio neto en dólares, tal como se define en la tabla de estado de riqueza, por lo que no se pierde ninguna información útil.
Las relaciones que no se pueden expresar como claves externas son violaciones obvias de DKNF. Por ejemplo, un atributo "Identificación de padre" que apunta a una de varias tablas referenciadas, dependiendo de un segundo atributo "Tipo de padre", infringe DKNF.