Este documento describe diferentes tipos de restricciones de integridad en bases de datos, incluyendo claves primarias, integridad referencial y claves externas, restricciones de valores de atributos, y disparadores. Las claves primarias aseguran que no haya tuplas duplicadas en una relación, mientras que la integridad referencial y las claves externas aseguran que los valores en una relación existan también en otra relación relacionada. Las restricciones de valores de atributos limitan los valores permitidos para atributos específicos.
1. 1
Restricciones deRestricciones de
IntegridadIntegridad
Bases de DatosBases de Datos
IngenierIngenieríí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
ClavesClaves
PrimariasPrimarias
Integridad y SeguridadIntegridad y Seguridad
Bases 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. 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,
…
);
IntegridadIntegridad
Referencial yReferencial y
Claves ExternasClaves Externas
Integridad y SeguridadIntegridad y Seguridad
Bases de DatosBases de Datos
IngenierIngenieríí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 Roja
Vite
Fingoi
…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]
tuplas
colgantes
Las tuplas colgantes pueden ser aceptables o no en
función del problema concreto que se esté modelando
Tuplas Colgantes
A 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
EjemploEjemplo TuplasTuplas ColgantesColgantes
Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1111
Vite
Fingoi
Av. 2 de Octubre
…nombre_sucursal…
Cuentas
Vite
Fingoi
…nombre_sucursal…
Sucursales
Vite
Fingoi
…nombre_sucursal…
Cuentas
Av. 2 de Octubre
Vite
Fingoi
…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
Vite
Fingoi
Av. 2 de Octubre
…nombre_sucursal…
Cuentas
Vite
Fingoi
…nombre_sucursal…
Sucursales
Clave PrincipalClave Externa
relación
referenciante
relación
referenciada
3. 3
RestricciRestriccióón den 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 den 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 Restricciones
Conviene asignarle nombre a las restricciones, aun cuando no se
piense que alguna vez se necesite referirse a ellas
Una 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óónn IntegInteg.. ReferRefer..
Integridad Referencial y Claves ExternasIntegridad Referencial y Claves Externas 1717
Cuando se realizan modificaciones de la base de datos
es 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. 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 tupla
de 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ón
La 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 referenciada
La política en cascada consiste en eliminar o actualizar todas las tuplas
colgantes creadas
La 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 externa
CREATE TABLE tabla (
atributo tipo
REFERENCES 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óónn
de Valores dede Valores de
AtributosAtributos
Integridad y SeguridadIntegridad y Seguridad
Bases de DatosBases de Datos
IngenierIngenieríí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 Únicos
Una 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 sutiles
En primer lugar, una llave exterior sólo puede referenciar la llave primaria de
una relación
En 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. 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. 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 borrar
y/o modificar dominios declarados previamente
DROP DOMAIN Euros
ALTER DOMAIN Euros NUMERIC(8,1)
RestriccionesRestricciones
GlobalesGlobales
Integridad y SeguridadIntegridad y Seguridad
Bases de DatosBases de Datos
IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas
CHECK basada enCHECK 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
ModificarModificar
RestriccionesRestricciones
Integridad y SeguridadIntegridad y Seguridad
Bases de DatosBases de Datos
IngenierIngenieríía Ta Téécnica en Informcnica en Informáática de Sistemastica de Sistemas
7. 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 ellas
En 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 tablas
ALTER TABLE nombretabla
DROP CONSTRAINT nombrerestricción
ALTER TABLE nombretabla
ADD CONSTRAINT nombrerestricción …
Alteración de restricciones de dominio
ALTER DOMAIN nombredominio
DROP CONSTRAINT nombrerestricción
ALTER DOMAIN nombredominio
ADD CONSTRAINT nombrerestricción …
Alteración de asertos
DROP ASSERTION nombreaserto
DisparadoresDisparadores
Integridad y SeguridadIntegridad y Seguridad
Bases 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 disparador
1. Evento que causa la comprobación
2. 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 nombre
AFTER3 UPDATE1 OF2 atributo ON2 tabla
REFERENCING
NEW ROW4 as variable1
OLD ROW4 as variable2
WHEN condición
órdenes a realizar
FOR EACH ROW 1. Evento (insert, delete, update)
2. Especificar columna
3. Activación (before, after)
4. Referencias (old row, new row)
8. 8
TemasTemas
de Discuside Discusióónn
y Ejerciciosy Ejercicios
Restricciones de IntegridadRestricciones de Integridad
Bases 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 pulgadas
Si una clase de barcos tiene más de 9 cañones, su calibre
no debe rebasar las 14 pulgadas
Ningú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