Integridad en un base de datos

La exigencia de integridad de los datos garantiza la calidad de los datos de la base de datos. Por ejemplo, si se especifica para un empleado el valor de identificador de **123**, la base de datos no debe permitir que ningún otro empleado tenga el mismo valor de identificador. Si tiene una columna **employee\_rating** para la que se prevean valores entre **1** y **5**, la base de datos no debe aceptar valores fuera de ese intervalo. Si en la tabla hay una columna **dept\_id** en la que se almacena el número de departamento del empleado, la base de datos sólo debe permitir valores que correspondan a los números de departamento de la empresa.

Dos pasos importantes en el diseño de las tablas son la identificación de valores válidos para una columna y la determinación de cómo forzar la integridad de los datos en la columna. La integridad de datos pertenece a una de las siguientes categorías:

* Integridad de entidad
* Integridad de dominio
* Integridad referencial
* Integridad definida por el usuario

## Integridad de entidad

La integridad de entidad define una fila como entidad única para una tabla determinada. La integridad de entidad exige la integridad de las columnas de los identificadores o la clave principal de una tabla, mediante índices y restricciones UNIQUE, o restricciones PRIMARY KEY.

## Integridad de dominio

La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede exigir la integridad de dominio para restringir el tipo mediante tipos de datos, el formato mediante reglas y restricciones CHECK, o el intervalo de valores posibles mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas.

## Integridad referencial

La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan filas. En SQL Server la integridad referencial se basa en las relaciones entre claves externas y claves principales o entre claves externas y claves exclusivas, mediante restricciones FOREIGN KEY y CHECK. La integridad referencial garantiza que los valores de clave sean coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos.

Cuando se exige la integridad referencial, SQL Server impide a los usuarios:

* Agregar o cambiar filas en una tabla relacionada si no hay ninguna fila asociada en la tabla principal.
* Cambiar valores en una tabla principal que crea filas huérfanas en una tabla relacionada.
* Eliminar filas de una tabla principal cuando hay filas relacionadas coincidentes.

Por ejemplo, en las tablas **Sales.SalesOrderDetail** y **Production.Product** de la base de datos AdventureWorks2008R2, la integridad referencial se basa en la relación entre la clave externa (**ProductID**) de la tabla **Sales.SalesOrderDetail** y la clave principal (**ProductID**) de la tabla **Production.Product**. Esta relación garantiza que un pedido de ventas no pueda nunca hacer referencia a un producto que no existe en la tabla **Production.Product**.