Click here to load reader
Upload
anghy-pena
View
135
Download
0
Embed Size (px)
Citation preview
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)
);
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
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
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
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
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
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)
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