Anda di halaman 1dari 28

BASES DE DATOS I

RESTRICCIONES DE INTEGRIDAD

Facultad de Ciencias Exactas

Universidad Nac. del Centro de la Pcia. de Bs. As.


Cursada 2014
Mariana del Fresno

RESTRICCIONES DE INTEGRIDAD

Especifican condiciones que restringen los posibles valores


almacenados en la BD instancias legales de relaciones

Proveen una descripcin de estados correctos en tiempo de


diseo

Se utilizan para asegurar la semntica de una aplicacin y


prevenir inconsistencias
Ejemplos:
Los nombres de materias no pueden ser nulos
No es posible inscribirse en una materia si no estn aprobadas las
correlativas
No se puede rendir un final de una materia con cursada no aprobada
Las calificaciones de materias son un nmero entre 0 y 10
2

RESTRICCIONES DE INTEGRIDAD

Cmo mantener la integridad en una Base de datos?

cdigo en las aplicaciones que acceden a los datos


restricciones (reglas o chequeos) que interpreta el DBMS
El DBMS debe evitar manipulaciones de datos que violen una
Restriccin de Integridad mediante:

rechazo de la operacin

acciones adicionales reparadoras


Importante: Los dos tipos de acciones deben dejar a la BD en un
estado consistente
3

CLASIFICACIN DE RESTRICCIONES DE INTEGRIDAD

Segn su naturaleza, una restriccin de integridad (RI) puede ser:


- Implcita
proviene del modelo de datos (representada en el esquema)
se traducen mediante sentencias del DDL (ej. Integridad referencial)

- Explcita
establece una restriccin adicional (no incorporada al modelo de datos)
se pueden incorporar de distinta forma a la Base de Datos:
Declarativa (establece qu, no cmo)
Procedural (indica qu y cmo)

- Inherente
no se requiere especificarlas
se asumen por definicin del modelo de datos (ej. en el modelo
relacional los valores de dominio son atmicos)

CLASIFICACIN DE RESTRICCIONES DE INTEGRIDAD

Por los estados involucrados:


- RI de estado
restringe los valores que puede un atributo en la BD
(ej: un sueldo no puede ser negativo, la fecha de egreso no puede ser
inferior a la de ingreso, el DNI no puede repetirse)

- RI de transicin
restringe los posibles cambios de valores entre estados sucesivos
(ej. el sueldo no puede decrecer implica conocer el estado viejo y el
nuevo para compararlos y chequear)

CLASIFICACIN DE RESTRICCIONES
De Estado:

Unicidad (UNIQUE): no puede haber dos valores iguales de


un mismo atributo (Ej. El nmero de empleado no puede repetirse)

No Nulidad (NOT NULL): los valores de un atributo no pueden


ser nulos (Ej. Los apellidos no pueden ser nulos)

Dominio: todos los valores de un dominio deben pertenecer a


un conjunto (dominio) definido

Cardinalidad de una relacin: el nmero de veces que una


entidad participa de una relacin (Ej. Los empleados slo pueden
participar en un mximo de 5 proyectos)

Participacin en una relacin: participacin obligatoria u


opcional en una relacin (Ej. Un empleado debe (o puede) estar
vinculado a un rea)

CLASIFICACIN DE RESTRICCIONES
De Estado:

Cobertura: todos los valores de un atributo son tambin


valores de otros conjuntos de atributos
(Ej. operarios U tcnicos U administr = empleados)

Inclusin: los valores de un atributo son tambin valores de


otro atributo
(Ej. materias promocionables materias)

Exclusin: los valores de un atributo no pueden ser al mismo


tiempo valores de otro atributo
(Ej. alumnos libres y alumnos regulares)

CLASIFICACIN DE RESTRICCIONES
De Estado:

Integridad de Entidades: uno o ms atributos considerados


como clave primaria (PRIMARY KEY) no pueden ser ni total ni
parcialmente nulos

Integridad Referencial: un valor de un atributo (o conjunto de


ellos) denominado/s clave extranjera (FOREIGN KEY) se
garantiza que existe como valor de otro atributo (o conjunto de
ellos) que generalmente son clave de otra entidad, o bien es
nulo
EMPLEADO

(0,N)

TRABAJA

(0,1)

EMPLEADO (idE, nombre, . , AreaT)

AREA
AREA (idArea, )

Estas restricciones se denominan META-REGLAS y son la base


conceptual del modelo relacional

CREACIN DE TABLAS INCORPORACIN DE RI


CREATE TABLE NombreTabla
( { nombre_columna TipoDato [NOT NULL]
[DEFAULT valorDefecto]
[CHECK (condicion)] , }

[ [CONSTRAINT nom_restr] PRIMARY KEY (lista_ColumnasPK),]


{ [ [CONSTRAINT nom_restr] UNIQUE (lista_Columnas),] }
{ [ [CONSTRAINT nom_restr] FOREIGN KEY (lista_ColumnasFK)
REFERENCES nombreTablaRef [(lista_ColumnasRef)]
[ MATCH {FULL | PARTIAL | SIMPLE}]
[ON UPDATE AccionReferencial]
[ON DELETE AccionReferencial] ] }

{ [CONSTRAINT nom_restr] [CHECK (condicion)] }


);

RESTRICCIONES DE NULIDAD Y UNICIDAD


La restriccin NOT NULL sobre un atributo indica que el DBMS debe

rechazar un intento de insertar un nulo en esa columna


Las claves primarias deben especificarse como NOT NULL
Se puede especificar un valor por defecto en una columna mediante la
clusula DEFAULT
Las claves primarias (PRIMARY KEY) y alternativas (UNIQUE)
se especifican a nivel tabla (o en la definicin del atributo si es simple)
Se puede asociar varias restricciones UNIQUE a una tabla, pero slo
una restriccin PRIMARY KEY

Ej: CREATE TABLE Empleado(


idE INTEGER NOT NULL,
nombre VARCHAR(50) NOT NULL DEFAULT no especificado,
..
constraint PK_Emp PRIMARY KEY (idE)
.. );
10

RESTRICCIONES DE INTEGRIDAD REFERENCIAL


(Meta)Regla de Integridad Referencial (RIR):
Cada valor de la clave extranjera de una relacin debe coincidir con el
valor de la clave primaria de alguna tupla de la relacin a la que hace
referencia, o bien debe ser nula
Las claves extranjeras (FK) se especifican con la clusula Foreign key:

CREATE TABLE nomTabla


.
{ [ [CONSTRAINT nom_restr] FOREIGN KEY (lista_ColumnasFK)
REFERENCES nomTablaRef [(lista_ColumnasRef)]
[ MATCH {FULL | PARTIAL | SIMPLE}]
[ON UPDATE AccionReferencial]
[ON DELETE AccionReferencial] ] }
11

RESTRICCIONES DE INTEGRIDAD REFERENCIAL


Formalmente:
nomTabla [lista_Col_FK] << nomTablaRef [lista_Col_Ref]: (b, m)
donde: b= Accin Referencial Baja
m= Accin Referenvial Modificacin derecha

Lista_Col_FK es una lista de atributos que se corresponden con una


clave (primaria o alternativa) de la tabla referenciada (nomTablaRef)

No se requiere igualdad de nombres, s compatibilidad de dominios


lista_Col_Ref puede omitirse si es la PK de nomTablaRef
Si la FK es de nico atributo, puede especificarse en su definicin con
la clusula REFERENCES NomTablaRef

12

RESTRICCIONES DE INTEGRIDAD REFERENCIAL

Ej:
(0,N)

EMPLEADO

TRABAJA

CREATE TABLE Empleado


( idE INTEGER NOT NULL,
nombre VARCHAR(50) NOT NULL,
AreaT CHAR(30),
PRIMARY KEY (IdE),
FOREIGN KEY (AreaT)
REFERENCES Area) ;

(0,1)

AREA

CREATE TABLE Area


( IdArea CHAR(30) NOT NULL,

PRIMARY KEY (IdArea) );

13

RIR TIPOS DE MATCHING

Indican los requisitos que deben cumplir los conjuntos de


valores de atributos de la FK, respecto de los correspondientes
en la clave primaria referenciada

Los tipos de matching afectan cuando las FK se definen sobre


varios atributos, y pueden contener valores nulos.
MATCH SIMPLE
MATCH PARTIAL
MATCH FULL

Opcin por defecto para SQL (sin clusula MATCH explcita)SIMPLE


No necesariamente los diferentes DBMSs aplican esta eleccin
en PostgreSQL por defecto es SIMPLE, pero en ORACLE es FULL
14

RIR TIPOS DE MATCHING


La integridad referencial se satisface si para cada tupla en la tabla
referenciante se verifica lo siguiente:
Ninguna de las columnas de la FK es NULL y existe una tupla en
la tabla referenciada cuyos valores de clave coinciden con los de
tales columnas, o sino...

Al menos una de las columnas en la FK es NULL (MATCH


SIMPLE)

Los valores de los atributos no nulos de la FK se corresponden


con los correspondientes valores de la clave, al menos en una
tupla de la tabla referenciada (MATCH PARTIAL)

Todas las columnas de la FK son NULL (MATCH FULL)


15

RIR TIPOS DE MATCHING


Ej:
(1,1)

(0,N)

T2

T1

En caso de pretender insertar las siguientes tuplas en T1:

T2

T1
A

a1 b1
a1 b2
a2 b1

Matching

X
x1
x2
x3
x4
x5

a1
a2
null
null
a3

b1
b2
null
b1
null

Simple

ok
X
ok
ok
ok

Parcial

ok
X
ok
ok
X

Full

ok
X
ok
X
X
16

RIR ACCIONES REFERENCIALES

FOREIGN KEY (lista_Col_FK)


REFERENCES nombreTablaRef [(lista_Col_Ref)]
[ ON UPDATE AccionReferencial ]
[ ON DELETE AccionReferencial ]
AccionReferencial :
CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION

Si una operacin sobre la BD conduce a un estado ilegal


estrategias:
Rechazar la operacin (NO ACTION o RESTRICT)
Aceptar la operacin y realizar acciones reparadoras
adicionales que conduzcan a un estado legal (CASCADE,
SET NULL, SET DEFAULT)
17

RIR ACCIONES REFERENCIALES


Al querer borrar una tupla en la tabla referenciada (ON DELETE):
- NO ACTION: se borra slo si no existen tuplas en la tabla referenciante,
cuya FK coincida con la clave de la tupla a ser borrada (opcin por defecto)

- RESTRICT: misma semntica de NO ACTION pero se aplica antes de la


sentencia SQL que la dispara RESTRICT impide estados inconsistentes
transitorios, mientras que NO ACTION los permite

- CASCADE: el borrado implica tambin el borrado de las tuplas de la tabla


referenciante cuya FK coincida con la clave de la tupla a borrar

- SET NULL: el borrado implica adems poner en NULL la FK de las tuplas de


la tabla referenciante cuya FK coincida con la clave de la tupla a borrar (si lo
admite)

- SET DEFAULT: el borrado implica adems actualizar con el valor por


defecto la FK de las tuplas de la tabla referenciante cuya FK coincida con la
clave de la tupla a borrar (si se ha definido clusula DEFAULT)

Las acciones referenciales a ser ejecutadas cuando una tupla


referenciada es actualizada (ON UPDATE) tienen significado similar al
de las acciones por borrado.

18

RIR ACCIONES REFERENCIALES

Ej: Cmo proceden las siguientes operaciones sobre la BD (instanciada


como se muestra) considerando las diferentes acciones referenciales?

DELETE FROM Area WHERE IdArea= 101;


DELETE FROM Area WHERE IdArea= 103;
DELETE FROM Area;
EMPLEADO

AREA

IdE

Nombre

AreaT

IdArea

111

E1

101

101

222

E2

102

102

333

E3

101

103

NOTA: DESARROLLO EN CLASE


19

CLASIFICACIN DE RESTRICCIONES DE INTEGRIDAD EN SQL


La especificacin declarativa sigue la estructura jerrquica del
modelo relacional (atributotuplatablaBD):
-

RI Dominio (DOMAIN)

RI de tabla asociada a uno ms atributos (CHECK de tupla)

RI de tabla asociada a varias tuplas (CHECK de tabla) (*)

RI generales de la base de datos (ASSERTION)

(*)

Otras formas de implementacin de RI:


-

SQL Procedural: TRIGGERS PROCEDIMIENTOS FUNCIONES

(*) En general mencionadas como restricciones de tabla

20

RESTRICCIONES DE DOMINIO/ATRIBUTO
Definicin de un dominio en SQL:
CREATE DOMAIN NomDominio
AS TipoDato
[ DEFAULT ValorDefecto ]
[ [CONSTRAINT NomRestriccion] CHECK (Condicion) ]
[NOT] DEFERRABLE;

Permiten definir el conjunto de los valores vlidos de un atributo


SQL En la sentencia CREATE TABLE, se especifican las RI de
los atributos. Pueden declararse como pertenecientes al dominio.

Casos particulares NOT NULL, DEFAULT, PRIMARY KEY, UNIQUE


mbito de la restriccin = un atributo
No todos los DBMS poseen la clusula CREATE DOMAIN (ej. Oracle)
21

RESTRICCIONES DE DOMINIO/ATRIBUTO
Otra forma: Asociar a un dominio una o ms restricciones en la definicin
del atributo:

[CONSTRAINT NomRestriccion]
CHECK (Condicin)
[NOT] DEFERRABLE
Condicin: expresa una condicin que debe cumplirse (debe evaluar
como VERDADERA o DESCONOCIDA)
DEFERRABLE: se comprueba la validez de la restriccin al finalizar la
transaccin activa (no con cada operacin de actualizacin individual)
NOT DEFERRABLE: se comprueba la validez de la restriccin despus
de cada operacin de actualizacin individual
22

RESTRICCIONES DE DOMINIO/ATRIBUTO

Pueden plantearse:
- Comparacin simple: operadores (=,<,>,<=,>=,<>) Ej: Sueldo>0
- Rango: [NOT] BETWEEN (incluye extremos) Ej: nota BETWEEN 0 AND 10

- Pertenencia [NOT] IN
Lista explcita

Ej: Area IN (Acadmica, Posgrado, Extensin)

Lista implcita

Ej: NomCarrera NOT IN (SELECT nombre FROM CarrInvalidas)

- Semejanza de Patrones [NOT] LIKE


% para 0 o ms caracteres
_ para un carcter simple

Ej: LIKE s%
Ej: LIKE s_

-Test de Nulidad IS [NOT] NULL

Ej: FechaIngreso IS NOT NULL

AND, OR se utilizan para concatenar distintas condiciones

Se antepone NOT para negarlas


23

RESTRICCIONES DE DOMINIO/ATRIBUTO
Ej: El precio de un producto debe ser mayor a 0 e inferior a 1000, y tener 2
decimales

CREATE DOMAIN PrecioValido


AS Numeric(5,2)
CHECK (value>0 AND value<1000);
o

CREATE TABLE producto


( productoId integer not null,
nombre varchar(40) not null,
precio PrecioValido,
.. );

CREATE TABLE producto


( productoId integer not null,
nombre varchar(40) not null,
precio Numeric(5,2)
CHECK (value>0 AND value<1000)

24

RESTRICCIONES DE DOMINIO/ATRIBUTO
Ej: Las Areas pueden ser de tres tipos: Admin, Taller o Ventas

CREATE DOMAIN TipoArea AS CHAR(30)


CONSTRAINT CK_Area
CHECK (VALUE IN (Admin, Taller, Ventas)) ;
luego:

CREATE TABLE Empleado


( ..
AreaT TipoArea,
.. );

DOMINIO

O bien:
CREATE TABLE Empleado
( ..
AreaT CHAR(30) CHECK (VALUE IN (Admin, Taller, Ventas)),
.. );
+ Definicin similar en Tabla Area

RI DE TABLA ASOCIADA A TUPLA (CHECK DE TUPLA)

Representa una restriccin sobre los valores que puede tomar

un atributo o combinacin de ellos en una tupla.


mbito de la restriccin = tupla
Se activa siempre que se inserten tuplas en la tabla, o se
modifiquen atributos afectados a la restriccin
su incumplimiento promueve el rechazo de la operacin

Ej: Un empleado o bien no ha ascendido o , si ha ascendido, la


fecha de ascenso no puede ser anterior a la fecha de ingreso
ALTER TABLE Empleado
ADD CONSTRAINT Ascenso
CHECK ((FechaAscenso IS NULL) OR (FechaIngreso < FechaAscenso ));
26

RI DE TABLA (CHECK DE TABLA)

Representa una restriccin que afecta diferentes tuplas de una

misma tabla
Ambito de la restriccin = tabla
Casos particulares: PRIMARY KEY, UNIQUE (a nivel tabla)
Su violacin promueve el rechazo de la operacin
Ej: El premio asignado a un empleado no debe superar el 20% del
promedio de todos los sueldos
ALTER TABLE Empleado
ADD CONSTRAINT premio_max
CHECK (premio < (SELECT AVG(sueldo)*0.2 FROM Empleado))
);

27

PROBLEMAS CON SUBCONSULTAS


Ej: El sueldo de un empleado debe ser igual o superior al sueldo mnimo
(OPCION CON SUBCONSULTA)

CREATE TABLE Empleado


( ..
sueldo NUMERIC (5,2)
CHECK ( VALUE >= SELECT Min(Salario) FROM TablaSalarios )
.. );
El chequeo est correctamente declarado, pero la inclusin de
subconsultas a otras tablas puede promover estados inconsistentes
inadvertidos !
La restriccin se verifica cuando se actualiza la tabla a la que est
asociada la restriccin (Empleado)
qu ocurrira si se modifica el salario mnimo en TablaSalarios?
(plantear restriccin simtrica )
28

Anda mungkin juga menyukai