Restricciones SQL Server

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

RESTRICCIONES EN SQL SERVER


I.

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

Especifica el valor predeterminado que se almacenar en una columna cuando el


usuario no especfica un valor para esa columna

UNIQUE

Especificado para una columna o combinacin de columnas cuyos valores deben ser
nicos para todas las filas de la tabla

PRIMARY KEY

Identifica de manera nica cada fila de una tabla

FOREIGN KEY

Establece e impone una relacin entre una o ms columnas de la tabla y una o ms


columnas de la tabla referenciada

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

Tipo de Longitud Obligatorio Predeterminado


dato

numero_Dep

tinyint

nombre_Dep

char

numeroEmp_Dep

tinyint

vigencia_Dep

bit

Ing. Martn Leiva Castillo

Regla de
validacin

S
25

Clave Clave
primaria nica
S
S

S
Mayor a 0
1
1/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

Tabla: Proyecto
Nombre

Tipo de dato Longitud Obligatorio Predeterminado

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'

Fecha del sistema


Mnimo 180 das
a partir de la
fecha de inicio

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
);

Ing. Martn Leiva Castillo

2/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

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.

Clave primaria (PRIMARY KEY)


Las columnas que forman parte de la clave primaria deben ir entre parntesis y separadas
por comas.
A continuacin se presentan algunos ejemplos:

Para crear la clave primaria en la tabla Proyecto se debe ejecutar la siguiente sentencia:

ALTER TABLE Proyecto


ADD CONSTRAINT PK_Proyecto PRIMARY KEY(numero_Pro) ;

Para crear la clave primaria en la tabla Departamento se debe ejecutar la siguiente


sentencia:

ALTER TABLE Departamento


ADD CONSTRAINT PK_Departamento PRIMARY KEY(numero_Dep) ;

Las columnas que formen parte de la clave primaria deben ser obligatorias o requeridas
(NOT NULL).

III.

Clave nica (UNIQUE)


Las columnas que forman parte de la clave nica deben ir entre parntesis y separadas por
comas. Si una clave fornea es tambin una clave nica entonces se est estableciendo una
relacin de uno a uno entre las tablas involucradas.
A continuacin se presentan algunos ejemplos:

Para crea la restriccin de clave nica en la columna nombre_Pro de la tabla Proyecto


se debe ejecutar la siguiente sentencia:

ALTER TABLE Proyecto


ADD CONSTRAINT UQ_Proyecto_nombre UNIQUE(nombre_Pro) ;

Para crea la restriccin de clave nica en la columna nombre_Dep de la tabla


Departamento se debe ejecutar la siguiente sentencia:

ALTER TABLE Departamento


ADD CONSTRAINT UQ_Departamento_nombre UNIQUE(nombre_Dep) ;

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

Restricciones en SQL Server

IV.

Base de Datos Computacin e Informtica 2016-N

Clave fornea (FOREIGN KEY)


La creacin de la clave fornea exige que se haga referencia a la tabla que tiene la clave
primaria que pasa como clave fornea a la otra tabla.
Departamento
numero_Dep (PK)

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.

Acciones de integridad referencial


Son las acciones que se llevan a cabo cuando se intenta eliminar o actualizar una fila, cuyo
valor de clave primaria es referenciada por otras filas a partir de la existencia de claves
forneas.
Las acciones de integridad referencial pueden ser:

NO ACTION

CASCADE

SET NULL

Ing. Martn Leiva Castillo

4/14

fechaFin_Pro

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

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

Ing. Martn Leiva Castillo

5/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

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.

Regla de validacin (CHECK)


Las reglas de validacin se aplican a una columna de una tabla. Cada vez que se registre un
nuevo valor o actualice el valor existente en esa columna, el manejador de base de datos
validar los datos para que cumplan con la regla establecida en la restriccin CHECK.
A continuacin se presentan algunos ejemplos:

Para que el estado del proyecto slo almacene uno de los siguientes valores posibles:
'T', 'S' o 'E', se debe ejecutar la siguiente sentencia:

ALTER TABLE Proyecto


ADD CONSTRAINT CK_Proyecto_estado
CHECK(estado_Pro IN ('T','S','E'));

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:

ALTER TABLE Proyecto


ADD CONSTRAINT CK_Proyecto_fechaFin
CHECK(fechaFin_Pro>=fechaIni_Pro+180);

Para que el nmero o cantidad de empleados en un departamento sea ser mayor o


igual CERO se debe ejecutar la siguiente sentencia:
ALTER TABLE Departamento
ADD CONSTRAINT CK_Departamento_numeroEmp
CHECK(numeroEmp_Dep>=0) ;

Las reglas de validacin se pueden aplicar tanto a columnas obligatorias (NOT NULL) como a
columnas opcionales (NULL).

Ing. Martn Leiva Castillo

6/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

VII. Valor predeterminado (DEFAULT)


Los valores predeterminados se aplican a una columna de una tabla, de manera que cada
vez que se registre o actualice una fila y no se especifican algn dato para esa columna, se
guardar el valor predeterminado en dicha columna.
A continuacin se presentan algunos ejemplos:
Para definir que el valor predeterminado de la columna estado de la tabla Proyecto sea
'E' se debe ejecutar la siguiente sentencia:
ALTER TABLE Proyecto
ADD CONSTRAINT DF_Proyecto_estado
DEFAULT 'E' FOR estado_Pro ;

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 ;

Para definir que el valor predeterminado de la fecha de finalizacin de un proyecto sea


la fecha de inicio ms 180 das se debe ejecutar la siguiente sentencia:
ALTER TABLE Proyecto
ADD CONSTRAINT DF_Proyecto_fechaFin
DEFAULT getdate()+180 FOR fechaFin_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:

Ing. Martn Leiva Castillo

7/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

Para determinar que el valor predeterminado de la columna vigencia en la tabla


Departamento sea 1 (vigente), se debe ejecutar la siguiente sentencia:
ALTER TABLE Departamento
ADD CONSTRAINT DF_Departamento_vigencia
DEFAULT 1 FOR vigencia_Dep ;

Los valores predeterminados se pueden aplicar tanto a columnas obligatorias (NOT NULL)
como columnas opcionales (NULL).

VIII. Graficando relaciones


Para verificar que las relaciones se hayan ejecutado correctamente se pueden hacer
diagramas de base de datos, que es una representacin grfica de las tablas y sus
relaciones.
Para mostrar estos diagramas se deben ejecutar los siguientes pasos:
1. En el explorador de objetos expandir la base de datos PROYECTOS, y ubicarse en la
carpeta Diagramas de base de datos

Ing. Martn Leiva Castillo

8/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

2. Haciendo clic en el botn derecho del mouse seleccionar la opcin Nuevo diagrama de
base de datos

Ing. Martn Leiva Castillo

9/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

Para la primera vez se debe mostrar el siguiente mensaje:

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.

Ing. Martn Leiva Castillo

10/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

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.

5. Para guardar el diagrama se debe seleccionar el cono de Guardar en el men de


opciones en la parte superior.

Finalmente el diagrama se mostrar dentro de la carpeta de Diagramas de base de


datos en el Explorador de objetos.

Ing. Martn Leiva Castillo

11/14

Restricciones en SQL Server

IX.

Base de Datos Computacin e Informtica 2016-N

Consultando restricciones de una tabla


Para consultar las restricciones que tiene una tabla especfica se debe utilizar la sentencia
sp_helpcontraint de la siguiente manera:

Ing. Martn Leiva Castillo

12/14

Restricciones en SQL Server

X.

Base de Datos Computacin e Informtica 2016-N

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:

Para deshabilitar la restriccin CHECK de la columna fechaFin_Pro de la tabla


Proyecto, se debe ejecutar la siguiente sentencia:

ALTER TABLE Proyecto


NOCHECK CONSTRAINT DF_Proyecto_fechaFin ;

Para deshabilitar la restriccin de clave fornea entre las tablas Departamento y


Proyecto se debe ejecutar la siguiente sentencia:

ALTER TABLE Proyecto


NOCHECK CONSTRAINT FK_Proyecto_Departamento ;

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:

Para eliminar la restriccin de valor predeterminado de la columna fechaFin_Pro de la


tabla Proyecto, se debe ejecutar la siguiente sentencia:
ALTER TABLE Proyecto
DROP CONSTRAINT DF_Proyecto_fechaFin ;

Para eliminar la restriccin CHECK de la columna fechaFin_Pro de la tabla Proyecto, se


debe ejecutar la siguiente sentencia:
ALTER TABLE Proyecto
DROP CONSTRAINT CK_Proyecto_fechaFin ;

Ing. Martn Leiva Castillo

13/14

Restricciones en SQL Server

Base de Datos Computacin e Informtica 2016-N

Para eliminar la restriccin de clave nica de la columna nombre_Dep de la tabla


Departamento, se debe ejecutar la siguiente sentencia:
ALTER TABLE Departamento
DROP CONSTRAINT UQ_Departamento_nombre ;

Para eliminar la restriccin de clave primaria de la tabla Departamento, primero se


debe eliminar la restriccin de clave fornea de la tabla Proyecto, ya que hace
referencia a la tabla Departamento, luego se podr eliminar la restriccin PRIMARY KEY
en la tabla solicitada, tal como se indica en las siguientes sentencias:
ALTER TABLE Proyecto
DROP CONSTRAINT FK_Proyecto_Departamento ;
ALTER TABLE Departamento
DROP CONSTRAINT PK_Departamento ;

Ing. Martn Leiva Castillo

14/14

También podría gustarte