Restricciones SQL Server
Restricciones SQL Server
Restricciones SQL Server
Introduccin
Las restricciones de base de datos son el conjunto de reglas que pueden definirse sobre una
o ms columnas de una tabla para ayudar a imponer las reglas de negocio.
Los tipos de restricciones que implementa SQL Server son:
Restriccin
Descripcin
DEFAULT
UNIQUE
Especificado para una columna o combinacin de columnas cuyos valores deben ser
nicos para todas las filas de la tabla
PRIMARY KEY
FOREIGN KEY
CHECK
Especifica una condicin que deben cumplir los valores que se almacenen en una
columna especfica
Las restricciones en SQL Server estn siempre asociadas a una tabla, por lo que al eliminarla
tambin se eliminan sus restricciones.
Las restricciones se pueden crear al momento de crear la tabla o despus de haber sido
creada, lo que implica que si las columnas involucradas tiene valores, stos deben cumplir la
restriccin.
Toda restriccin debe tener un nombre la cual puede ser asignada por el mismo SQL Server
o puede ser especificado por el programador al momento de crear la restriccin. Para ello se
debe utilizar la clusula CONSTRAINT.
A continuacin, para realizar los ejemplos, vamos a crear la base de datos Proyectos con las
tablas Proyecto y Empleado, las cuales tienen las siguientes restricciones:
Tabla: Departamento
Nombre
numero_Dep
tinyint
nombre_Dep
char
numeroEmp_Dep
tinyint
vigencia_Dep
bit
Regla de
validacin
S
25
Clave Clave
primaria nica
S
S
S
Mayor a 0
1
1/14
Tabla: Proyecto
Nombre
numero_Pro
tinyint
nombre_Pro
char
35
lugar_Pro
char
15
estado_Pro
char
numero_Dep
tinyint
fechaIni_Pro
smalldatetime
fechaFin_Pro
smalldatetime
Regla de
validacin
Clave Clave
primaria nica
S
S
'E'
'T','S','E'
A continuacin escribimos las sentencias SQL para crear la base de datos con las tablas y sus
respectivas restricciones:
CREATE DATABASE Proyectos
go
USE Proyectos
go
CREATE TABLE Departamento
(
numero_Dep tinyint NOT NULL ,
nombre_Dep char(25) NOT NULL ,
numeroEmp_Dep tinyint NOT NULL ,
vigencia_Dep bit NOT NULL
);
CREATE TABLE Proyecto
(
numero_Pro tinyint NOT NULL ,
nombre_Pro char(35) NOT NULL ,
lugar_Pro char(15) NOT NULL ,
estado_Pro char(1) NOT NULL ,
numero_Dep tinyint NOT NULL ,
fechaIni_Pro smalldatetime NOT NULL ,
fechaFin_Pro smalldatetime NOT NULL
);
2/14
GO no es una instruccin propia de SQL, sino un comando que se considera como una seal
para que el Management Studio enve el bloque de instrucciones desde el ltimo comando
GO a SQL Server
La creacin de las restricciones que se describen a continuacin considera que previamente
las tablas han sido creadas en la base de datos.
II.
Para crear la clave primaria en la tabla Proyecto se debe ejecutar la siguiente sentencia:
Las columnas que formen parte de la clave primaria deben ser obligatorias o requeridas
(NOT NULL).
III.
Si bien las columnas que formen parte de la clave nica pueden ser opcionales (NULL), se
recomienda que sean obligatorias o requeridas (NOT NULL).
Ing. Martn Leiva Castillo
3/14
IV.
nombre_Dep
numeroEmp_Dep
vigencia_Dep
Proyecto
numero_Pro (PK)
nombre_Pro
lugar_Pro
estado_Pro
numero_Dep (FK)
fechaIni_Pro
Las columnas que forman parte de la clave fornea deben ir entre parntesis, separadas por
comas.
Para crear la clave fornea entre las tablas Departamento y Proyecto se debe ejecutar la
siguiente sentencia:
ALTER TABLE Proyecto
ADD CONSTRAINT FK_Proyecto_Departamento FOREIGN KEY
(
numero_Dep
)
REFERENCES Departamento
(
numero_Dep
);
Los nombres de las columnas que migran a la otra tabla no necesariamente deben tener el
mismo nombre, pero si deben tener el mismo tipo de dato
Si las columnas que forman parte de la clave fornea no son requeridas (NULL) se dice que
la relacin es opcional, en caso contrario se dice que la relacin es obligatoria.
V.
NO ACTION
CASCADE
SET NULL
4/14
fechaFin_Pro
SET DEFAULT
Las mismas que deben ser definidas al momento de crearse la restriccin de clave fornea
con las opciones ON DELETE y ON UPDATE. NO ACTION es el valor predeterminado si no se
especifica ON DELETE u ON UPDATE
ON DELETE NO ACTION
Si se intenta eliminar una fila que es referenciada por otras se produce un error impidiendo
su eliminacin
ON UPDATE NO ACTION
Si se intenta actualizar la clave primaria de una fila que es referenciada por otras se produce
un error impidiendo su actualizacin
ON DELETE CASCADE
Si se intenta eliminar una fila que es referenciada por otras, todas las filas que referencian
tambin son eliminadas
ON UPDATE CASCADE
Si se intenta actualizar la clave primaria de una fila que es referenciada por otras, todas las
filas que referencian tambin son actualizadas con el nuevo valor
ON DELETE SET NULL
Si se intenta eliminar una fila que es referenciada por otras, todas las filas que hacen
referencia a esa fila se establecen en NULL. Para permitir esto la clave fornea debe permitir
NULL, es decir las columnas deben ser no requeridas (relaciones opcionales)
ON UPDATE SET NULL
Si se intenta actualizar una fila que es referenciada por otras, todas las filas que hacen
referencia a esa fila se establecen en NULL. Para permitir esto la clave fornea debe permitir
NULL, es decir las columnas deben ser no requeridas (relaciones opcionales)
ON DELETE SET DEFAULT
Si se intenta eliminar una fila que es referenciada por otras, todas las filas que hacen
referencia a esa fila se actualizan con el valor predeterminado. Para permitir esto la clave
fornea debe permitir DEFAULT, que debe ser un valor que exista en la tabla principal
ON UPDATE SET DEFAULT
Si se intenta actualizar una fila que es referenciada por otras, todas las filas que hacen
referencia a esa fila se actualizan con el valor predeterminado. Para permitir esto la clave
fornea debe permitir DEFAULT, que debe ser un valor que exista en la tabla principal
5/14
Por ejemplo, si para la restriccin anterior, entre las tablas Departamento y Proyecto, se
considera que debe permitir actualizacin en cascada y no se debe eliminar la fila si es
referenciada por otras, se debe ejecutar la siguiente sentencia:
ALTER TABLE Proyecto
ADD CONSTRAINT FK_Proyecto_Departamento FOREIGN KEY
(
numero_Dep
)
REFERENCES Departamento
(
numero_Dep
) ON UPDATE CASCADE ON DELETE NO ACTION;
VI.
Para que el estado del proyecto slo almacene uno de los siguientes valores posibles:
'T', 'S' o 'E', se debe ejecutar la siguiente sentencia:
Para que la fecha de fin del proyecto sea mayor o igual a los 180 das a partir de la
fecha de inicio del proyecto o que un proyecto debe como tener como mnimo 6 meses
de duracin, se debe ejecutar la siguiente sentencia:
Las reglas de validacin se pueden aplicar tanto a columnas obligatorias (NOT NULL) como a
columnas opcionales (NULL).
6/14
Para definir que el valor predeterminado para la fecha inicial de un proyecto sea la
fecha actual del sistema se debe ejecutar la siguiente sentencia:
ALTER TABLE Proyecto
ADD CONSTRAINT DF_Proyecto_fechaIni
DEFAULT getdate() FOR fechaIni_Pro ;
La funcin getdate es propia del lenguaje SQL de SQL Server y devuelve la fecha y hora
actual del sistema. Para probarlo pueden ejecutar la siguiente consulta:
7/14
Los valores predeterminados se pueden aplicar tanto a columnas obligatorias (NOT NULL)
como columnas opcionales (NULL).
8/14
2. Haciendo clic en el botn derecho del mouse seleccionar la opcin Nuevo diagrama de
base de datos
9/14
Debe seleccionar S. Las siguientes veces que genera diagramas no debe mostrarse ste
mensaje.
3. Seleccionar las tablas que se desea que se muestren en el diagrama y hacer clic en el
botn Agregar.
10/14
4. Luego de agregar las tablas cerrar la ventana y se deben de mostrar las tablas con sus
respectivas relaciones
Las llaves indican las columnas que son parte de la clave primaria de cada tabla, adems
de indicar la cardinalidad uno en la relacin, mientras que el smbolo de infinito ()
indica la cardinalidad muchos.
11/14
IX.
12/14
X.
Deshabilitando restricciones
Es posible deshabilitar las restricciones FOREIGN KEY y CHECK. Deshabilitar una restriccin
significa que no se realizar la verificacin de clave fornea o de la regla de validacin
cuando se inserten o actualicen datos que afecten a las columnas involucradas en dichas
restricciones.
Las restricciones PRIMARY KEY, DEFAULT y UNIQUE no se pueden deshabilitar.
A continuacin se presentan algunos ejemplos:
En caso se quiera volver habilitar las dos restricciones anteriores se deben ejecutar las
siguientes sentencias:
ALTER TABLE Proyecto
CHECK CONSTRAINT DF_Proyecto_fechaFin ;
ALTER TABLE Proyecto
CHECK CONSTRAINT FK_Proyecto_Departamento ;
XI.
Eliminando restricciones
Para eliminar restricciones se debe utilizar la sentencia ALTER TABLE, ya que toda
restriccin est asociada a una tabla. Para hacer la referencia a la restriccin que se quiere
eliminar basta indicar su nombre.
A continuacin se presentan algunos ejemplos:
13/14
14/14