pd restricciones integridad_gris

8

Click here to load reader

Upload: anghy-pena

Post on 13-Jun-2015

135 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Pd restricciones integridad_gris

1

Restricciones de Restricciones de IntegridadIntegridad

Bases de DatosBases de DatosIngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

ProtecciProteccióónn

IntroducciIntroduccióónn 22

Uno de los problemas más serios de quienes escriben aplicaciones que actualizan la Base de Datos es que una información introducida pueda ser errónea y pueda, por tanto, formar tuplas incorrectas

Las Restricciones de Integridad aseguran que las modificaciones realizadas por usuarios autorizados no provocan perdidas de Consistencia Semántica

Claves Primarias

Integridad Referencial y Claves Externas

Restricciones de Valores de Atributos

Restricciones Globales

Modificar Restricciones

Disparadores

ÍÍndicendice

IntroducciIntroduccióónn 33

Claves Claves PrimariasPrimarias

Integridad y SeguridadIntegridad y SeguridadBases de DatosBases de Datos

IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

Clave de una RelaciClave de una Relacióónn

Claves PrimariasClaves Primarias 55

El tipo más importante de restricción de una Base de Datos es una declaración de que cierto atributo o conjunto de atributos constituye una clave de una relación

Dos tuplas de una relación no pueden coincidir en el atributo o conjunto de atributos declarados como claves

Hay dos formas similares:

PRIMARY KEY y UNIQUE

En una relación (tabla) sólo puede existir una clave primaria pero puede existir varias declaraciones “únicas”

DeclaraciDeclaracióón de Clavesn de Claves

Claves PrimariasClaves Primarias 66

Hay dos formas de declarar una clave primaria en la proposición CREATE TABLE que define una relación

1. Declararla en el listado del esquema relacional (válida sólo cuando la clave primaria está formada por un atributo)

2. Agregarle a la lista de elementos declarados en el esquema una declaración más que indique el atributo o conjunto de atributos que forman la clave primaria

CREATE TABLE Estrellas (nombre CHAR(30) PRIMARY KEY,dirección VARCHAR(255),…PRIMARY KEY (nombre)

);

Page 2: Pd restricciones integridad_gris

2

UNIQUEUNIQUE

Claves PrimariasClaves Primarias 77

Otra manera de declarar una clave consiste en emplear la palabra UNIQUE (puede aparecer donde pueda hacerlo PRIMARY KEY, tras un atributo o como elemento independiente)

En una tabla puede haber varias declaraciones UNIQUE, pero sólo una clave primaria

CREATE TABLE Estrellas (nombre CHAR(30) UNIQUE,dirección VARCHAR(255) UNIQUE,…);

Integridad Integridad Referencial y Referencial y

Claves ExternasClaves ExternasIntegridad y SeguridadIntegridad y Seguridad

Bases de DatosBases de DatosIngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

DefiniciDefinicióónn

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 99

Se denomina Integridad Referencial a la condición que asegura que un valor que aparece en una relación para un conjunto de atributos determinados aparezca también en otra relación para un cierto conjunto de atributos (normalmente atributos de una clave primaria)

Plaza RojaViteFingoi

…nombre_sucursal…Sucursales

…Av. 2 de Octubre

…nombre_sucursal…Cuentas

Conceptos BConceptos Báásicossicos

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1010

Sean r(R) y s(S) un par de relaciones y sea r s su reunión natural

Pueden existir tuplas tr de r que no se reúnan con ninguna tupla de s no hay ninguna tupla ts en s tal que tr[R∩S]=ts[R∩S]

tuplascolgantes

Las tuplas colgantes pueden ser aceptables o no en función del problema concreto que se esté modelando

Tuplas ColgantesA la tupla con un valor de llave exterior que no aparezca en la relación referenciada se le llama tupla colgante (al igual que a las tuplas que no participan en una reunión); Las tuplas colgantes violan la integridad referencial de esta restricción de llaves exteriores

Ejemplo Ejemplo TuplasTuplas ColgantesColgantes

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1111

ViteFingoiAv. 2 de Octubre

…nombre_sucursal…Cuentas

ViteFingoi

…nombre_sucursal…Sucursales

ViteFingoi

…nombre_sucursal…Cuentas

Av. 2 de Octubre

ViteFingoi

…nombre_sucursal…Sucursales

Clave ExternaClave Externa

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1212

Un atributo de un esquema de relación se denomina clave externa cuando es la clave primaria de otro esquema de relación

ViteFingoiAv. 2 de Octubre

…nombre_sucursal…Cuentas

ViteFingoi

…nombre_sucursal…Sucursales

Clave PrincipalClave Externarelación referenciante

relación referenciada

Page 3: Pd restricciones integridad_gris

3

RestricciRestriccióón de n de IntegInteg. . ReferRefer..

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1313

Sean r(R) y s(S) dos relaciones con claves primarias Kr y Ks, respectivamente

Un subconjunto α de S es una clave externa que hace referencia a Kr de la relación r si…

… se exige que para cada tupla (t2) de s haya una tupla (t1) de r tal que t1[Kr]=t2[α]

Las exigencias de este tipo se denominan restricciones de integridad referencial o dependencia de subconjuntos

(α debe ser igual a Kr o bien α y Kr deben ser compatibles)

Πα(s) ⊆ ΠKr(r)

GeneraciGeneracióón de n de IntegInteg. . ReferRefer..

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1414

Si se obtiene el esquema de la base de datos relacional creando tablas a partir de diagramas E-R, …

… cada relación que proceda de un conjunto de relaciones tendrá restricciones de integridad

… cada entidad débil proporcionará restricciones de integridad

Asignar Nombres a las RestriccionesConviene asignarle nombre a las restricciones, aun cuando no se piense que alguna vez se necesite referirse a ellasUna vez creada una restricción sin nombre, yo no se le podrá asignar después en casa de que haya que modificarla de alguna manera

DeclaraciDeclaracióón de la Restriccin de la Restriccióónn

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1515

En SQL se puede declarar que un atributo o conjunto de atributos de una relación es una clave externa que hace referencia a un atributo o atributos de otra relación

1. El atributo a atributos referenciados de la segunda relación ha de declararse como clave primaria de su relación

2. Cualquier valor que aparezca en un atributo de la clave externa en la relación referenciante habráde hacerlo en el atributo de la clave primaria de la relación referenciada (salvo NULL)

IntegInteg. Referencial en SQL. Referencial en SQL

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1616

Las claves externas se pueden especificar como parte de la instrucción CREATE TABLE

CREATE TABLE tabla (atributo tipo

REFERENCES tabla (atributos),…PRIMARY KEY (atributos),FOREING KEY (atributos)

REFERENCES tabla (atributos)…);

ComprobaciComprobacióón n IntegInteg. . ReferRefer..

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1717

Cuando se realizan modificaciones de la base de datoses necesario controlar que estas modificaciones no violan las restricciones de integridad referencial

Es necesario comprobar que las inserciones, los borrados y las actualizaciones no violan las restricciones de integridad que debe tener la base de datos

Política por Omisión: Rechazo de las Modificaciones

Política en Cascada – Política de Valor Nulo

Insertar y BorrarInsertar y Borrar

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1818

Si se inserta una tupla t2 en s, el sistema debe asegurar que existe una tupla t1 en r tal que t1[Kr]=t2[α] es decir, que

t2[α] ∈ ΠKr(r)

Si se borra una tupla t1 en r, el sistema debe calcular el conjunto de tuplas de s que hacen referencia a r

σα=t1[Kr] (s)

y, si este conjunto no es vacío, o bien rechazar la orden como errónea, o bien borrar las tuplas que hacen referencia a t1

Page 4: Pd restricciones integridad_gris

4

ActualizarActualizar

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1919

Si se actualiza una tupla t2 de la relación s, y esta actualización modifica valores de la clave externa α, se realiza una comprobación similar a la de inserción

Si se actualiza una tupla t1 de la relación r, y esta actualización modifica valores de la clave primaria Kr, se realiza una comprobación similar a la del borrado

Otras PolOtras Polííticatica

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 2020

Política en Cascada: Cuando se elimina (actualiza) una tuplade la relación referenciada, el sistema elimina (actualiza) todas las tuplas referenciantes con ese valor en la clave externa

Política de Valor Nulo: Cuando se elimina (actualiza) una tupla de la relación referenciada, el sistema incluye un valor NULL en todas las tuplas referenciantes con ese valor en la clave externa

Políticas de ModificaciónLa política por omisión para eliminaciones y actualizaciones en la relación referenciada establece los siguiente: se prohíbe la acción si y sólo si produce una o varias tuplas colgantes en la relación referenciadaLa política en cascada consiste en eliminar o actualizar todas las tuplascolgantes creadasLa política de establecimiento a valor nulo consiste en poner en NULL la llave exterior de las tuplas colgantes

PoPoííticasticas de Int. de Int. RefRef en SQLen SQL

Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 2121

Las políticas en cascada y de valor nulo se imponen en la declaración de la clave externaCREATE TABLE tabla (

atributo tipoREFERENCES tabla (atributos)ON DELETE {CASCADE|SET NULL}ON UPDATE {CASCADE|SET NULL},

…PRIMARY KEY (atributos),FOREING KEY (atributos)

REFERENCES tabla (atributos)ON DELETE {CASCADE|SET NULL}ON UPDATE {CASCADE|SET NULL}

…);

RestricciRestriccióón n de Valores de de Valores de

AtributosAtributosIntegridad y SeguridadIntegridad y Seguridad

Bases de DatosBases de DatosIngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

Atributos y DominiosAtributos y Dominios

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2323

Un tercer e importante tipo de restricción es la que limita los valores que pueden aparecer en los componentes de algunos atributos

1. Restricción del atributo en la definición de su esquema relacional

2. Restricción de dominio, que se declara después como el dominio del atributo

NOT NULLNOT NULL

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2424

La restricción de valor de atributo más simple es especificar la cláusula NOT NULL en su definición

Llaves Primarias y Atributos ÚnicosUna declaración PRIMARY KEY es casi sinónima de una declaración UNIQUE; La diferencia más evidente consiste en que una tabla no puede tener más que una llave primaria pero varios atributos o conjuntos de atributos UNIQUE; No obstante, se dan también algunas diferencias muy sutilesEn primer lugar, una llave exterior sólo puede referenciar la llave primaria de una relaciónEn segundo lugar, normalmente el implementador del sistema de administración de la base de datos siempre podrá poner un índice en una llave declarada como llave primaria, pero exigirá al usuario poner explícitamente un índice en los otros atributos; Las tablas de la base de datos se mantienen ordenadas por su llaves primarias

Page 5: Pd restricciones integridad_gris

5

CHECKCHECK

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2525

La restricción CHECK impone una condición que han de cumplir todos los valores del atributo

En la práctica, la restricción CHECK basada en atributos tiende a ser una limitación simple sobre los valores, como una enumeración de valores legales o una desigualdad aritmética

Puede ser cualquier cosa que se pueda especificar en una cláusula WHERE

CREATE TABLE (genero CHAR (1) CHECK (genero IN (‘F’, ‘M’)));

DominiosDominios

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2626

La Restricción de Dominio es una forma simple de Integridad Referencial

La declaración de que un atributo pertenezca a un determinado dominio actúa como una restricción sobre los valores que puede tomar el atributo

createcreate domaindomain

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2727

La cláusula CREATE DOMAIN se usa para definir nuevos dominios

CREATE DOMAIN EUROS NUMERIC(12,2)

CREATE DOMAIN DÓLARES NUMERIC(12,2)

CREATE DOMAIN SEXO CHAR(1)

ConversiConversióón de Dominion de Dominio

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2828

Los valores de un dominio de pueden convertir a otro dominio

Sea el atributo A de la relación de tipo Euros

CAST r.A AS Dólares

lo convierte* a Dólares

(*en una aplicación real se multiplicaría r.A por el factor de cambio antes de convertirlo a Dólares)

Especificar PredicadosEspecificar Predicados

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 2929

La cláusula CHECK permite restringir los dominios de forma muy poderosa (mucho más que lo que permiten la mayor parte de los sistemas de tipos de la mayor parte de los lenguajes de programación)…

… pues permite definir un predicado que debe satisfacer cualquier valor asignado a cualquier variable cuyo tipo sea el del dominio

CREATE DOMAIN sueldo-por-hora NUMERIC (5,2)CONSTRAINT comprobación-valor-sueldo

CHECK (VALUE ≥ 4.00)nombre de la restricción

Ejemplo checkEjemplo check

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 3030

CREATE DOMAIN número-cuenta CHAR (10)CONSTRAINT comprobar-número-cuenta-nulo

CHECK (VALUE NOT NULL)

CREATE DOMAIN tipo_cuenta CHAR (10)CONSTRAINT comprobar-tipo-cuenta

CHECK (VALUE IN(‘Corriente’,’Ahorro’))

no valores nulos

limitar valores

Page 6: Pd restricciones integridad_gris

6

Borrar y Modificar DominiosBorrar y Modificar Dominios

RestricciRestriccióón de Valores de Atributosn de Valores de Atributos 3131

SQL (estándar) también tiene cláusulas para borrary/o modificar dominios declarados previamente

DROP DOMAIN Euros

ALTER DOMAIN Euros NUMERIC(8,1)

Restricciones Restricciones GlobalesGlobales

Integridad y SeguridadIntegridad y SeguridadBases de DatosBases de Datos

IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

CHECK basada en CHECK basada en TuplasTuplas

Restricciones GlobalesRestricciones Globales 3333

La condición CHECK basada en tuplas limita cualquier aspecto de las tuplas de una relación

CREATE TABLE estrellas (nombre CHAR(30) UNIQUE,sexo CHAR(1),…CHECK

(sexo=‘F’ OR nombre NOT LIKE ‘Sra%’));

AsertoAserto

Restricciones GlobalesRestricciones Globales 3434

Las condiciones CHECK definen un predicado que se debe cumplir en el momento de la creación o actualización de una tupla pero si la condición cambia posteriormente, el predicado no se reevalúa)

Un Aserto es un predicado que expresa una condición que se desea que la base de datos satisfaga permanentemente

Las restricciones de dominio y las restricciones de integridad referencial son un tipo de aserto

CREATE ASSERTION nombre CHECK predicado

ComprobaciComprobacióón de Asertosn de Asertos

Restricciones GlobalesRestricciones Globales 3535

Cuando se crea un Aserto el sistema comprueba su validez

Una vez que el aserto es válido, sólo se permiten modificaciones posteriores que no violen el aserto

La elevada sobrecarga debida a la comprobación y al mantenimiento de los asertos ha llevado a su escasa implementación en los sistemas reales

La forma típica del predicado de la condición CHECK de un aserto es una pertenencia al resultado de una consulta SELECT-FROM-WHERE

Modificar Modificar RestriccionesRestricciones

Integridad y SeguridadIntegridad y SeguridadBases de DatosBases de Datos

IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

Page 7: Pd restricciones integridad_gris

7

ModificarModificar

Modificar RestriccionesModificar Restricciones 3737

Es posible agregar, modificar y/o eliminar las restricciones en cualquier momento aunque para poder modificar una restricción es necesario que tenga un nombre

CONSTRAINT nombre

Verificación Limitada de Restricciones: ¿deficiencia o característica?¿Por qué se permite violar las verificaciones basadas en atributos y en tuplas?Se debe a que tales restricciones pueden implementarse más eficientemente que las aserciones; En el caso de las verificaciones basadas en atributos o en tuplas, tan sólo es necesario evaluar la restricción en la tupla o tuplas que se inserten o actualicen; En cambio, las aserciones han de evaluarse siempre que cambie una de las relaciones mencionadas por ellasEn tales casos, toca al diseñador de la base de datos decidir si las modificaciones adicionales justifican el mayor tiempo de ejecución de las modificaciones de la base de datos; Para garantizar la confiabilidad del código se recomiendo no utilizar verificación basada en atributos o en tuplas, cuando al hacerlo se pudiera violar la verificación

ALTERALTER

Modificar RestriccionesModificar Restricciones 3838

Alteración de restricciones sobre tablasALTER TABLE nombretabla

DROP CONSTRAINT nombrerestricciónALTER TABLE nombretabla

ADD CONSTRAINT nombrerestricción …

Alteración de restricciones de dominioALTER DOMAIN nombredominio

DROP CONSTRAINT nombrerestricciónALTER DOMAIN nombredominio

ADD CONSTRAINT nombrerestricción …

Alteración de asertosDROP ASSERTION nombreaserto

DisparadoresDisparadores

Integridad y SeguridadIntegridad y SeguridadBases de DatosBases de Datos

IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

DefiniciDefinicióónn

DisparadoresDisparadores 4040

Un disparador es una orden que el sistema ejecuta de manera automática como efecto secundario de una modificación de la base de datos (pero a diferencia de CHECK y asertos, no asociado a todas las modificaciones)

Requisitos:1. Especificar las condiciones en las que se va

a ejecutar el disparador1. Evento que causa la comprobación2. Condición que se debe cumplir

2. Especificar las acciones que se van a realizar cuando se ejecute

Modelo ECA: evento-condición-acción

Uso de los DisparadoresUso de los Disparadores

DisparadoresDisparadores 4141

Alertar a los usuarios sobre alguna operación que realizan

Realizar de forma automática ciertas tareas

Controlar los valores de algunos atributos

Los disparadores NO realizan acciones fuera de la base de datos

Disparadores en SQLDisparadores en SQL

DisparadoresDisparadores 4242

Los disparadores no estaban en la norma anterior a SQL:1999 y cada sistema implementó su propia sintaxis

CREATE TRIGGER nombreAFTER3 UPDATE1 OF2 atributo ON2 tabla

REFERENCINGNEW ROW4 as variable1OLD ROW4 as variable2

WHEN condiciónórdenes a realizar

FOR EACH ROW 1. Evento (insert, delete, update)2. Especificar columna3. Activación (before, after)4. Referencias (old row, new row)

Page 8: Pd restricciones integridad_gris

8

TemasTemasde Discuside Discusióónny Ejerciciosy Ejercicios

Restricciones de IntegridadRestricciones de IntegridadBases de DatosBases de Datos

IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas

Temas de DiscusiTemas de Discusióónn

Temas de DiscusiTemas de Discusióón y Ejerciciosn y Ejercicios 4444

Demostrar, mediante un ejemplo, que son necesarias las aserciones y no son suficientes las restricciones de atributos y tuplas

EjerciciosEjercicios

Temas de DiscusiTemas de Discusióón y Ejerciciosn y Ejercicios 4545

Dado el siguiente esquema de una base de datos de batallas

clases_de_barcos (clase, tipo, pais, numero_cañones, tipo_cañon, desplazamiento)barcos (nombre_barco, clase, fecha_botadura)batallas (nombre_batalla, fecha)consecuencias (nombre_barco, nombre_batalla, resultado)

Escribir como restricciones las siguientes ideas:Ninguna clase de barcos puede tener cañones de un calibre

mayor que 16 pulgadasSi una clase de barcos tiene más de 9 cañones, su calibre

no debe rebasar las 14 pulgadasNingún barco puede participar en una batalla antes de

haber sido botado

EjerciciosEjercicios

Temas de DiscusiTemas de Discusióón y Ejerciciosn y Ejercicios 4646

En el ejemplo anterior escriba asertos que desarrollen las siguiente ideas

Ninguna clase puede tener más de dos barcos

En toda clase hay un barco con el mismo nombre de la clase

No puede botarse un barco antes del que lleve el nombre de su clase