Você está na página 1de 25

Mdulo 3:

Implementacin de
integridad de datos

Introduccin
Descripcin general de la integridad de datos
Implementacin de restricciones
Implementacin de desencadenadores

Leccin 1: Descripcin general de la integridad de datos


Tipos de integridad de datos
Opciones para exigir la integridad de datos

Tipos de integridad de datos


Integridad de dominio
(Columnas)

Integridad de entidad
(Filas)

Integridad referencial
(Entre tablas o columnas de la misma tabla)

Opciones para exigir la integridad de datos

Mecanismo

Descripcin

Tipos de datos

Definir los tipos de datos que se pueden almacenar en


una columna

Reglas

Definir los valores aceptables que se pueden insertar en


una columna

Valores
predeterminados

Definir el valor de una columna si no se especifica ningn valor

Restricciones

Definir cmo el Motor de base de datos exige la integridad


de datos
Definir cdigo que se ejecuta automticamente cuando

Desencadenadores se modifica una tabla


Esquemas XML

Definir el contenido aceptable de documentos XML y


fragmentos de una columna de datos xml

Leccin 2: Implementacin de restricciones


Qu son las restricciones
Restricciones PRIMARY KEY
Restricciones DEFAULT
Restricciones CHECK
Restricciones UNIQUE
Restricciones FOREIGN KEY
Integridad referencial en cascada
Consideraciones sobre la comprobacin
de restricciones
Ejercicio: Creacin de restricciones

Qu son las restricciones

Tipo de
integridad
Dominio

Entidad

Referencial

Tipo de
restriccin

Descripcin

DEFAULT

Especifica el valor predeterminado de una columna

CHECK

Especifica el valor permitido de una columna

FOREIGN KEY

Especifica la columna en la que deben existir los valores

NULL

Especifica si se permite NULL

PRIMARY KEY

Identifica cada fila de manera nica

UNIQUE

Impide la duplicacin de claves no principales

FOREIGN KEY

Define columnas cuyo valor debe coincidir con la clave


principal de esta tabla

CHECK

Especifica el valor permitido para una columna basndose


en el contenido de otra columna

Restricciones PRIMARY KEY


Una restriccin PRIMARY KEY identifica una o ms
columnas de una tabla que constituyen una clave principal
Se permite una restriccin PRIMARY KEY por tabla
El valor debe ser nico en las columnas constituyentes
No se permiten valores nulos en las columnas
constituyentes
CREATE TABLE [HumanResources].[Department](
[DepartmentID] [smallint] IDENTITY(1,1) NOT NULL,
[Name] [dbo].[Name],

CONSTRAINT [PK_Department_DepartmentID] PRIMARY KEY CLUSTERED


([DepartmentID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON
[PRIMARY]
)

Restricciones DEFAULT
Una restriccin DEFAULT define un valor de columna
predeterminado cuando no se proporciona ningn valor
Cada columna slo puede tener una restriccin DEFAULT
Slo es aplicable a instrucciones INSERT
Se permiten algunas funciones suministradas por el sistema
CREATE TABLE [Production].[Location](
...
[Availability] [decimal](8, 2) NOT NULL CONSTRAINT
[DF_Location_Availability] DEFAULT ((0.00)),
[ModifiedDate] [datetime] NOT NULL CONSTRAINT
[DF_Location_ModifiedDate] DEFAULT (getdate())
)

Restricciones CHECK
Las restricciones CHECK restringen los valores que se
pueden introducir en una columna con INSERT o con UPDATE
Puede definir varias restricciones CHECK por columna
Puede hacer referencia a columnas de la misma tabla
No puede contener subconsultas
ALTER TABLE [HumanResources].[EmployeeDepartmentHistory]
WITH CHECK
ADD CONSTRAINT [CK_EmployeeDepartmentHistory_EndDate] CHECK
(([EndDate]>=[StartDate] OR [EndDate] IS NULL))

Restricciones UNIQUE
Las restricciones UNIQUE aseguran que todos los valores
de una columna son nicos
Slo se permite un valor nulo en una columna nica
Pueden incluir una o ms columnas
CREATE TABLE [HumanResources].[Employee](
[EmployeeID] [int] IDENTITY(1,1) NOT NULL,
[NationalIDNumber] [nvarchar](15) NOT NULL UNIQUE
NONCLUSTERED,

Restricciones FOREIGN KEY


Las restricciones FOREIGN KEY garantizan integridad
referencial entre columnas de la misma tabla o
de tablas diferentes
Deben hacer referencia a una restriccin PRIMARY KEY
o UNIQUE
El usuario debe tener permiso REFERENCES en la tabla
a la que se hace referencia
ALTER TABLE [Sales].[SalesOrderHeader]

WITH CHECK

ADD CONSTRAINT [FK_SalesOrderHeader_Customer_CustomerID]


FOREIGN KEY([CustomerID])
REFERENCES [Sales].[Customer] ([CustomerID])

Integridad referencial en cascada

Controlada por la clusula CASCADE


de la restriccin FOREIGN KEY
Opcin de cascada
NO ACTION
(valor predeterminado)
CASCADE
SET NULL
SET DEFAULT

Comportamiento
de UPDATE

Comportamiento
de DELETE

Producir error; deshacer operacin


Actualizar claves externas
en las tablas de referencia

Eliminar filas en las tablas


de referencia

Establecer en NULL las claves externas


en las tablas de referencia
Establecer en los valores predeterminados
las claves externas en las tablas de referencia

Consideraciones sobre la comprobacin de restricciones


Asignar nombres significativos a las restricciones
Crear, cambiar y eliminar restricciones sin necesidad
de eliminar y volver a crear la tabla
Realizar comprobacin de errores en las aplicaciones
y las transacciones
Deshabilitar las restricciones CHECK y FOREIGN KEY:
Para mejorar el rendimiento al ejecutar trabajos
por lotes grandes
Para evitar comprobar los datos existentes al agregar
nuevas restricciones a una tabla

Ejercicio: Creacin de restricciones

En este ejercicio crear restricciones

Leccin 3: Implementacin de desencadenadores


Qu son los desencadenadores
Cmo funciona un desencadenador INSERT
Cmo funciona un desencadenador DELETE
Cmo funciona un desencadenador UPDATE
Cmo funciona un desencadenador INSTEAD OF
Cmo funcionan los desencadenadores anidados
Consideraciones sobre los desencadenadores
recursivos
Ejercicio: Creacin de desencadenadores

Qu son los desencadenadores


Procedimientos almacenados especiales que
se ejecutan cuando instrucciones INSERT,
UPDATE o DELETE modifican una tabla
Dos categoras:
Los desencadenadores TRIGGER se ejecutan despus
de una instruccin INSERT, UPDATE o DELETE
Los desencadenadores INSTEAD OF se ejecutan en
lugar de una instruccin INSERT, UPDATE o DELETE
El desencadenador y la instruccin de inicio forman
parte de una nica transaccin

Cmo funciona un desencadenador INSERT

Se ejecuta la instruccin INSERT

Se registra la instruccin INSERT

Se ejecuta el desencadenador AFTER INSERT

CREATE TRIGGER [insrtWorkOrder] ON [Production].[WorkOrder]


AFTER INSERT AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [Production].[TransactionHistory](
[ProductID],[ReferenceOrderID],[TransactionType]
,[TransactionDate],[Quantity],[ActualCost])
SELECT inserted.[ProductID],inserted.[WorkOrderID]
,'W',GETDATE(),inserted.[OrderQty],0 FROM inserted;
End

Cmo funciona un desencadenador DELETE

Se ejecuta la instruccin DELETE

Se registra la instruccin DELETE

Se ejecuta el desencadenador AFTER DELETE

CREATE TRIGGER [delCustomer] ON [Sales].[Customer]


AFTER DELETE AS
BEGIN
SET NOCOUNT ON;
EXEC master..xp_sendmail
@recipients=N'SalesManagers@Adventure-Works.com',
@message = N'Customers have been deleted!!';
END;

Cmo funciona un desencadenador UPDATE

Se ejecuta la instruccin UPDATE

Se registra la instruccin UPDATE

Se ejecuta el desencadenador AFTER UPDATE

CREATE TRIGGER [updtProductReview] ON


[Production].[ProductReview]
AFTER UPDATE NOT FOR REPLICATION AS
BEGIN
UPDATE [Production].[ProductReview]
SET [Production].[ProductReview].[ModifiedDate] =
GETDATE() FROM inserted
WHERE inserted.[ProductReviewID] =
[Production].[ProductReview].[ProductReviewID];
END;

Cmo funciona un desencadenador INSTEAD OF

Se ejecuta la instruccin UPDATE, INSERT o DELETE

La instruccin ejecutada no se realiza

Se ejecutan las instrucciones del desencadenador


INSTEAD OF

CREATE TRIGGER [delEmployee] ON [HumanResources].[Employee]


INSTEAD OF DELETE NOT FOR REPLICATION AS
BEGIN
SET NOCOUNT ON;
DECLARE @DeleteCount int;
SELECT @DeleteCount = COUNT(*) FROM deleted;
IF @DeleteCount > 0
BEGIN

END;
END;

Cmo funcionan los desencadenadores anidados

Instruccin INSERT,
UPDATE o DELETE

y as sucesivamente

El desencadenador
ejecuta INSERT,
UPDATE o DELETE
en otra tabla

Consideraciones sobre los desencadenadores


recursivos
Estn deshabilitados de forma predeterminada.
Para habilitarlos:
ALTER DATABASE AdventureWorks SET RECURSIVE_TRIGGERS ON

Consideraciones:
Puede superar el lmite de anidamiento de 32 niveles
sin necesidad de realizar un diseo cuidadoso
y unas pruebas exhaustivas
Puede resultar difcil controlar el orden de
las actualizaciones de tabla
Se puede reemplazar con lgica no recursiva

Ejercicio: Creacin de desencadenadores

En este ejercicio crear desencadenadores

Prctica: Implementacin de integridad de datos


Ejercicio 1: Creacin de restricciones
Ejercicio 2: Creacin de desencadenadores

Você também pode gostar