Restricciones en SQL Server

Las restricciones son limitaciones o reglas aplicadas a un campo o columna para asegurar que no se acepten datos que no se consideren válidos. Por ejemplo, si hay que insertar la fecha de nacimiento de una persona, la fecha debe de ser menor que la fecha actual; ya no se permitiría añadir una persona con fecha de nacimiento futurista. A partir SQL Server 2008 están disponibles una serie de restricciones, incluidas las siguientes:

UNIQUE

Una restricción única permite al administrador de bases de datos identificar específicamente qué columna no debería contener valores duplicados.

CHECK

Las restricciones CHECK exigen la integridad del dominio mediante la limitación de los valores que puede aceptar una o varias columnas. Puede crear una restricción CHECK con cualquier expresión lógica (booleana) que devuelva TRUE (verdadero) o FALSE (falso) basándose en operadores lógicos.

TIPO DE DATO

Una restricción de comprobación permite al administrador limitar los tipos de datos que un usuario puede insertar en la base de datos.

DEFAULT

Se usa una restricción predeterminada para insertar un valor predeterminado en una columna. Si no se especifica ningún otro valor, se agregará el valor predeterminado a todos los registros nuevos.

NOT NULL

Una restricción no nula asegura que se incluyan datos en una celda. En otras palabras, la celda no se puede dejar en blanco. También indica que no se puede incluir un nuevo registro o actualizar un registro sin agregar un valor a dicho campo.

PRIMARY KEY

La restricción de clave principal identifica de forma exclusiva cada registro de una tabla de base de datos. La clave principal debe contener valores únicos y no puede contener valores NULL. Cada tabla debe tener una clave principal y, además, cada tabla puede tener únicamente una clave principal.

FOREING KEY

Una restricción de clave externa en una tabla apunta a una clave principal en otra tabla.

Ejemplo con restricciones

Imaginemos que deseamos guardar los datos principales de un compañía X un una base de datos, para lo cual creamos la tabla Empleados con la siguiente estructura y restricciones.

EmpleadosSQL

CREATE TABLE Empleados(
EmpleadoID INT PRIMARY KEY,
Nombres VARCHAR(100) NOT NULL,
Apellidos VARCHAR(100) NOT NULL,
NumeroIdentificacion VARCHAR(50) UNIQUE,
FechaNacimiento DATE,
CHECK (FechaNacimiento GETDATE()),
Estatus BIT DEFAULT 1
)

Con esta estructura la tabla Empleado no permitiría que se inserte un empleado sin nombres o apellidos, que el número de identificación del empleado sea único y que la fecha de nacimiento sea menor que la fecha actual, también que, si no se indica el estatus del empleado, este por defecto será 1 (true, activo). Los datos insertados en los campos deben de ser compatibles con los tipos de datos definidos para cada campo.

Si no se cumplen estas condiciones, pues no se insertaran los datos emitiendo un mensaje de error. Veamos esto de manera gráfica para hacer un poco más práctico.

La restricción PRIMARY KEY no permite insertar valores nulos o duplicados.

PRIMARY KEY NULL
No puede insertar el valor NULL en la columna ‘EmpleadoID’, la columna no permite valores nulos.
PRIMARY KEY REPETIDA
No puede insertar llaves duplicadas en el objeto(tabla) ‘dbo.Empleados’. El valor de la llave duplicada es (1).

La restricción CHECK(FechaNacimiento < GETDATE()) verifica que la fecha insertada en el campo FechaNacimiento sea menor que la fecha actual que tiene configurada es servidor.

FECHA
Conflicto con la restricción CHECK.

La restricción NOT NULL no permite que sean insertados valores nulos en las columnas Nombres y Apellidos.

NOT NULL APELLIDO
No puede insertar el valor NULL en la columna Apellidos.
NOT NULL NOMRE
No puede insertar el valor NULL en la columna Nombres.

La restricción de TIPO DE DATO, en este caso en la columna Estatus, el tipo de datos es BIT el cual solo admite los valores True (1) o False (o), si se intenta colocar otro tipo de dato que no sea compatible será rechazado. Igual paso con los otros tipos de datos.

TIPO DE DATO
El valor cambiado en la celda no fue reconocido como válido.

La restricción UNIQUE no permite dos valores iguales en la columna con la restricción.

UNIQUE
Violación de la restricción UNIQUE KEY… No se puede insertar un valor duplicado… El valor duplicado es (0001).

Todas estas restricción nos permiten tener integridad en los datos insertados, y que no sean insetardos datos «basura». Las restricciones son muy importantes en el diseño de base datos, y estas no deben de ser manejadas del lado de la aplicación que maneje los datos.