Restricciones
Las restricciones le permiten definir la manera en que SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) exigirá automáticamente la integridad de una base de datos. Las restricciones definen reglas relativas a los valores permitidos en las columnas y constituyen el mecanismo estándar para exigir la integridad. El uso de restricciones es preferible al uso de Desencadenadores DML, reglas y valores predeterminados. El optimizador de consultas también utiliza definiciones de restricciones para generar planes de ejecución de consultas de alto rendimiento.
Clases de restricciones
SQL Server 2005 admite las siguientes clases de restricciones:
NOT NULL especifica que la columna no acepta valores NULL. Para obtener más información, vea Permitir valores NULL.
Las restricciones CHECK exigen la integridad del dominio mediante la limitación de los valores que se pueden asignar a una columna. Para obtener más información, vea Restricciones CHECK.
Una restricción CHECK especifica una condición de búsqueda booleana (se evalúa como TRUE, FALSE o desconocido) que se aplica a todos los valores que se indican en la columna. Se rechazan todos los valores que se evalúan como FALSE. En una misma columna se pueden especificar varias restricciones CHECK. En el siguiente ejemplo se muestra la creación de la restricciónchk_id
. Esta restricción aumenta las exigencias del dominio de la clave principal asegurándose de que se indiquen para la clave solamente los números comprendidos en un intervalo especificado.CREATE TABLE cust_sample ( cust_id int PRIMARY KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 ) )
Las restricciones UNIQUE exigen la unicidad de los valores de un conjunto de columnas.
En una restricción UNIQUE, dos filas de la tabla no pueden tener el mismo valor en las columnas. Las claves principales también exigen exclusividad, pero no aceptan NULL como uno de los valores exclusivos. Para obtener más información, vea Restricciones UNIQUE.Las restricciones PRIMARY KEY identifican la columna o el conjunto de columnas cuyos valores identifican de forma exclusiva cada una de las filas de una tabla. Para obtener más información, vea Restricciones PRIMARY KEY.
Dos filas de la tabla no pueden tener el mismo valor de clave principal. No se pueden asignar valores NULL a ninguna de las columnas de una clave principal. Se recomienda utilizar una columna pequeña de tipo entero como clave principal. Todas las tablas tienen que tener una clave principal. Una columna o combinación de columnas certificada como valor de clave principal se denomina clave candidata.
En el siguiente ejemplo se crea la tablapart_sample
y especifica el campopart_nmbr
como clave principal.CREATE TABLE part_sample (part_nmbr int PRIMARY KEY, part_name char(30), part_weight decimal(6,2), part_color char(15) );
Las restricciones FOREIGN KEY identifican y exigen las relaciones entre las tablas. Para obtener más información, vea Restricciones FOREIGN KEY.
Una clave externa de una tabla apunta a una clave candidata de otra tabla. En el siguiente ejemplo, la tablaorder_part
establece una clave externa que hace referencia a la tablapart_sample
previamente definida.CREATE TABLE order_part (order_nmbr int, part_nmbr int FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION, qty_ordered int); GO
No se puede insertar una fila que tenga un valor de clave externa, excepto NULL, si no hay una clave candidata con dicho valor. La cláusula ON DELETE controla las acciones que se llevarán a cabo si intenta eliminar una fila a la que apuntan las claves externas existentes. La cláusula ON DELETE tiene las siguientes opciones:
- NO ACTION especifica que la eliminación produce un error.
- CASCADE especifica que también se eliminan todas las filas con claves externas que apuntan a la fila eliminada.
- SET NULL especifica que todas las filas con claves externas que apuntan a la fila eliminada se establecen en NULL.
- SET DEFAULT especifica que todas las filas con claves externas que apuntan a la fila eliminada se establecen en sus valores predeterminados. Para obtener más información, vea Valores predeterminados.
La cláusula ON UPDATE define las acciones que se llevarán a cabo si intenta actualizar un valor de clave candidata a la que apuntan las claves externas existentes. Esta cláusula también admite las opciones NO ACTION, CASCADE, SET NULL y SET DEFAULT.
Restricciones de tabla y de columna
Las restricciones se dividen en restricciones de columna o restricciones de tabla. La restricción de columna se especifica como parte de una definición de columna y sólo se aplica a esa columna. Las restricciones de los ejemplos anteriores son restricciones de columna. Las restricciones de tabla se declaran de forma independiente de la definición de las columnas y se pueden aplicar a varias columnas de la tabla. Las restricciones de tabla se deben utilizar cuando una restricción tiene que incluir varias columnas.
Por ejemplo, si una tabla tiene dos o más columnas en la clave principal, tiene que utilizar una restricción de tabla para incluir dichas columnas en la clave principal. Piense en una tabla que registra los sucesos de una máquina de una fábrica. Suponga que se pueden producir eventos de distintos tipos al mismo tiempo, pero no se pueden producir dos eventos del mismo tipo a la vez. Esto se puede garantizar en la tabla si se incluyen las columnas event_type
y event_time
en una clave principal de dos columnas, tal como se muestra en el siguiente ejemplo.
CREATE TABLE factory_process
(event_type int,
event_time datetime,
event_site char(50),
event_desc char(1024),
CONSTRAINT event_key PRIMARY KEY (event_type, event_time) )
Vea también
Otros recursos
CREATE TABLE (Transact-SQL)
Exigir la integridad de los datos