10. ¿Que es la integridad de datos? Ing. BARJ – IST – UPOLI - 2008
11. Tipos de integridad de datos Ing. BARJ – IST – UPOLI - 2008 Integridad de dominio ( columnas ) Integridad de entidad (filas) Integridad referencial ( entre tablas )
14. Determinación del tipo de restricción que se va a utilizar Ing. BARJ – IST – UPOLI - 2008 Tipo de integridad Tipo de restricción Dominio DEFAULT CHECK REFERENTIAL Entidad PRIMARY KEY UNIQUE Referencial FOREIGN KEY CHECK
15.
16. ¿Qué es un Indice Ing. BARJ – IST – UPOLI - 2008
17.
18. ¿Qué es una Vista? Ing. BARJ – IST – UPOLI - 2008
19. Introducción a las vistas Ing. BARJ – IST – UPOLI - 2008 EmployeeView Lastname Firstname Davolio Fuller Leverling Nancy Andrew Janet Employees EmployeeID LastName Firstname Title 1 2 3 Davolio Fuller Leverling Nancy Andrew Janet ~~~ ~~~ ~~~ Vista del usuario USE Northwind GO CREATE VIEW dbo. Employee View AS SELECT LastName , Firstname FROM Employees
20.
21. Ejemplo: Vista de tablas combinadas Ing. BARJ – IST – UPOLI - 2008 OrderID 10663 10827 10427 10451 10515 CustomerID BONAP BONAP PICCO QUICK QUICK ~~~ ~~~ ~~~ ~~~ ~~~ RequiredDate 1997-09-24 1998-01-26 1997-02-24 1997-03-05 1997-05-07 ShippedDate 1997-10-03 1998-02-06 1997-03-03 1997-03-12 1997-05-23 Orders Customers ShipStatusView USE Northwind GO CREATE VIEW dbo.ShipStatusView AS SELECT OrderID, ShippedDate, ContactName FROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerID WHERE RequiredDate < ShippedDate CustomerID BONAP PICCO QUICK CompanyName Bon app' Piccolo und mehr QUICK-Stop ContactName Laurence Lebihan Georg Pipps Horst Kloss OrderID 10264 10271 10280 1996-08-21 1996-08-29 1996-09-11 ShippedDate 1996-08-23 1996-08-30 1996-09-12 ContactName Laurence Lebihan Georg Pipps Horst Kloss
22.
23. Ing. BARJ – IST – UPOLI - 2008 Práctica: Implementación de vistas
57. ¿Que es un TRIGGER? (DESENCADENADORES, DISPARADORES) Ing. BARJ – IST – UPOLI - 2008
58.
59.
60. Funcionamiento de los desencadenadores anidados Ing. BARJ – IST – UPOLI - 2008 2 15 UnitsInStock + UnitsOnOrder es < ReorderLevel para ProductID 2 OrDe_Update La realización de un pedido provoca la ejecución del desencadenador OrDe_Update Se ejecuta la instrucción UPDATE en la tabla Products InStock_Update Products ProductID UnitsInStock … … 1 3 4 15 15 65 20 Se ejecuta el desencadenador InStock_Update Envía un mensaje Order_Details OrderID 10522 10523 10524 ProductID 10 41 7 UnitPrice 31.00 9.65 30.00 Quantity 7 9 24 Discount 0.2 0.15 0.0 10525 19.00 2 0.2 5 2 15
61.
62. Exigir reglas de empresa Ing. BARJ – IST – UPOLI - 2008 L os productos con pedidos pendientes no se pueden elimina r IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ) > 0 ROLLBACK TRANSACTION La instrucción DELETE se ejecuta en la tabla Product El código del desencadenador comprueba la tabla Order Details ' No puede procesarse la transacción ' ' Este producto tiene historial de pedidos ' Se deshace la transacción Products ProductID UnitsInStock … … 1 2 3 4 15 10 65 20 Order Details OrderID 10522 10523 10524 10525 ProductID 10 2 41 7 UnitPrice 31.00 19.00 9.65 30.00 Quantity 7 9 24 Discount 0.2 0.15 0.0 9 Products ProductID UnitsInStock … … 1 3 4 15 10 65 20 2 0
63.
64. Ing. BARJ – IST – UPOLI - 2008 Demostracion: TRIGGERS (DESENCADENADORES, DISPARADORES)
De dominio controlado por el tipo de datos y los valores que puede aceptar
Ver Diferencia cuando le quitamos el PRINT @TOTAL
Lo de la TABLA CONTROL es para los TRIGGERS tambien, para crear una vitacora
IMPORTANTE: El esquema de propietario de la tablas deben estar definidas en la funcion. SINO da error.
Asociación a una tabla Los desencadenadores se definen para una tabla específica, denominada tabla del desencadenador. Invocación automática Cuando se intenta insertar, actualizar o eliminar datos de una tabla en la que se ha definido un desencadenador para esa acción específica, el desencadenador se ejecuta automáticamente. No es posible evitar su ejecución. Imposibilidad de llamada directa A diferencia de los procedimientos almacenados del sistema normales, no es posible invocar directamente los desencadenadores, que tampoco pasan ni aceptan parámetros.