jueves, 20 de febrero de 2014

Restricciones de tablas en una base de datos


Default 
  • Se aplica para INSERT 
  • Solo una por columna 
  • No se pueden utilizar con IDENTITY 
  • Permite especificar valores proporcionados por el sistema 

Sintaxis parcial  
[ constraint nombre_restricción ] default expresión

Ejemplo
alter table Producto
add constraint DF_Descripcion default 'No especifica' 
for Descripcion


Check 
  • Para sentencias Insert y Update 
  • Pueden hacer referencias a columnas en la misma tabla 
  • No pueden contener subconsultas

Sintaxis parcial  
[Constraint nombrerestriccion) check ( Expresion )

Ejemplo
alter table Producto
add constraint CHK_Stock Check(Stock > -1)


Primary key  
  • Sólo una por tabla 
  • Valores exclusivos
  • No se permiten valores nulos 
  • Crea un índice exclusivo en las columnas especificadas (Predet. --> CLUSTERED )   

Sintaxis parcial  
[Constraint nombrerestriccion]   primary key [Clustered | NonClustered ] columnas

Ejemplo
alter table Producto add constraint Pk_Codigo primary key nonclustered (codigo)


Unique
  • Permite un valor nulo 
  • Permite varias en una tabla 
  • Formadas por una o mas columnas
  • Exigida con un índice único  

Sintaxis parcial  
[Constraint nombreRestriccion ]   Unique  [Clustered | non Clustered ] (Columnas,...)   

Ejemplo
alter table Producto add constraint U_Nombre Unique Nonclustered (Nombre)


Foreign key 
  • Deben hacer referencia a PRIMARY KEY o UNIQUE 
  • Proporcionan integridad referencial de una o varias columnas 
  • No crean índices automáticamente 
  • Permisos SELECT o REFERENCES 

Sintaxis parcial 
[Constraint nombreRest ] Foreign key (Columna,...) References tablaRef (Columna,…) 

Ejemplo
alter table Producto add Constraint Fk_Pro_Cat Foreign Key (CategoriaID) References Categoria(CategoriaID)
"Realizo una referencia a la tabla Categoria y el campo CategoriaID para crear una restricción que solamente me permita insertar Productos que esten en una Categoria de la tabla Categoria"


Característica orientada a las claves externas 

  • Integridad referencial en cascada 

Sintaxis parcial 
[Constraint NombreRestriccion) [Foreign Key ] (Columna) References TablaRef (Columnas,…) 
[On Delete {Cascade | No Action}] 
[On Update {Cascade | No Action}] 

NO Action es la predeterminada 

Dadas las tablas y columnas

-Products  
PK ProductId 

-Orders 
PK OrderId 
FK ProductId 

Con cascade si borras, borrara lo que este asociado a ella en la otra tabla, pero con No Action no te dejara borrarlo ya que esta asociado a otra tabla la cual tiene la clave principal. 
Con cascade puedes borrar ProductId de products , lo cual borrara productId de orders, con No Action no lo podras borrar.

Ejemplo
alter table Producto 
add Constraint Fk_Pro_Cat Foreign Key (CategoriaID) References Categoria (CategoriaID) 
On delete Cascade 
On update Cascade


Con estas dos instrucciones al final de la restricción le estoy diciendo que borre todos los productos de una categoria si dicha categoria es eliminado de la tabla Categoria.  Lo mismo sucederá al modificar.

  • Deshabilitacion de restricciones 

Deshabilitación para la comprobación de los datos existentes o Aplicable a Check y Foreign Key o Utilizar la opción With NoCheck 

Sintaxis parcial 
Alter Table [With Check | With NoCheck] 
Add Constrain restriccion { Foreign key (Columna,…) 
References TablaRef (Columna,…) {  Check (Condicion)}

  • Restricción de una tabla consigo misma

alter table employees 
with NoCheck add Constraint Fk_employees_employees 
Foreign Key (ReportsTo) References employees(EmployeeId) 

alter table emp2 
with NoCheck add Constraint FK_Emp_Dir 
Foreign Key (Dir) References emp2(Emp_no) 


  • Deshabilitación al cargar nuevos datos 

Los datos verifican la restricción 
Datos que no cumplen la restricción pero que se quieren guardar en la tabla 

Sintaxis parcial 
Alter Table tabla {Check | NoCheck } 
Constraint {All | Restricción 1, … } => Para hacer la restriccion a todo , o a sólo lo que está separado por comas “,” 

  • Deshabilita la restricción hecha antes 

alter table employees NoCheck Constraint Fk_Employees_Employees

Con esto introduces los datos y vuelves a habilitar la restricción
Solamente en restricciones de tipo Check y Foreign Key



Espero haber ayudado en algo. Hasta la próxima oportunidad!




No hay comentarios:

Publicar un comentario en la entrada