Está en la página 1de 14

Las Restricciones de Integridad en ORACLE

Snchez E
Tejadillos E.
Facultad de Informtica Universidad Politcnica de Valencia
email: evsanar@inf.upv.es, eltepe@inf.upv.es

Resumen

Las restricciones de integridad son propiedades de la base de datos


que se deben satisfacer en cualquier momento.

Oracle es un sistema de gestin de base de datos (SGBD) relacional


que permite la definicin de restricciones de integridad dentro del
diseo de su base de datos al ser creada.

Se estudiar los diferentes tipos de restricciones que comprenden los


siguientes puntos:
Tratamiento de valores nulos.
Valores por defecto.
Integridad de clave primaria.
Claves alternativas.
Integridad referencial.
Restricciones de integridad estticas.

Estas restricciones sern definidas en la fase de diseo de la base de


datos e incluidas en la los scripts de creacin de tablas.

Otra cualidad del sistema de gestin de Oracle es la posibilidad de


modificar las restricciones definidas para una tabla. Esto puede llevar
conllevar a inconsistencia de los datos ya introducidos en la base
de datos. Por ello, Oracle tiene definidos mecanismos para
modificacin de los datos ya existentes.

Adems se estudiar cuando son ejecutas las restricciones de


integridad dentro del esquema de funcionamiento de una base de
datos Oracle.

1. Introduccin

La integridad de los datos es la propiedad que asegura que


informacin dada es correcta, al cumplir ciertas aserciones.

Las restricciones de integridad aseguran que la informacin contenida


en una base de datos es correcta.

1
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
En los primeros puntos del trabajo, se realizar una definicin a modo
general de lo que son las restricciones de integridad, los tipos y
ventajas que tiene su implementacin en el esquema de la base de
datos.

La segunda parte est orientada ms a la parte prctica. Se


especifica ms concretamente las definiciones y modificaciones que
se pueden realizar sobre restricciones de integridad en ORACLE.

Para todos y cada uno de los puntos se especificar el formato de la


clusula correspondiente en ORACLE y un ejemplo de la misma.

La modificacin de las restricciones de integridad en ORACLE tan slo


se puede implementar a travs de la clusula ALTER TABLE.

2. Definicin de restricciones

2.1 Descripcin general

La evolucin en el tiempo de una Base de Datos puede describirse por


una secuencia de estados.

Dato un estado D, su sucesor D, se obtiene aplicando a D una


transaccin T, tal que D T D [1].

Las restricciones de integridad aseguran que la informacin contenida


en la base de datos cumple ciertas restricciones para los diferentes
estados.

Existen dos tipos de restricciones:


Estticas: limitan los estados permitidos de la Base de Datos.
Dinmicas: restringen las posibles transiciones de estados de la
base datos.

Para incorporar el tratamiento de las restricciones de integridad en el


sistema pueden realizarse:
Aadiendo cdigo adicional para verificar y asegurar que se
cumplen las restricciones.
Declarando las restricciones como parte del esquema de la base
de datos.

La definicin en la fase de diseo de las restricciones de integridad


proporciona mayor nmero de ventajas, ya que:
Reduce el coste de desarrollo de software.

2
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
Es ms confiable al ser centralizado y uniforme.
Mantenimiento ms fcil.

En las siguientes secciones se describirn ms ampliamente la


definicin de las restricciones de integridad a modo general, as como
los tipos de restricciones que podemos encontrar y otras
clasificaciones.

Tambin se describir como se implementa el tratamiento de las


restricciones en ORACLE, declarndolas como parte del esquema de
la base de datos en la fase de creacin de las tablas y cmo se
pueden ser modificadas con posterioridad.

2.2 Representacin de restricciones de integridad estticas.

Restricciones de Cardinalidad: se restringe la cantidad de objetos


que puede referenciar a travs de un atributo o la cantidad de
objetos agregados que lo pueden referenciar como elemento de la
agregacin. Incluye el control de permiso para que un atributo
pueda incluir un indicador definido por el sistema, como es el
indicador NULL y que represente informacin faltante.

Restriccin de Dominio: slo los objetos especificados pueden


servir como dominio de un atributo.

Restriccin de Unicidad: un objeto podr ser unvocamente


identificable usando un determinado atributo.

Restriccin de Inverso: si un Atributo A1 es el inverso de otro A2,


entonces si O2 es un valor del atributo A1 de algn objeto O1
implica que O1 es un valor del atributo A2 para el objeto O2.

Restriccin de Coexistencia: una instancia de la clase hija debe ser


tambin existir como instancia de sus clases padre.

Restriccin de Clases hijas Disjuntas: las instancias de la clase


padre slo pueden pertenecer a una clase hija dentro de la
jerarqua.

Restriccin de Cobertura: todas las instancias de al menos una


clase hija dentro de la jerarqua.

2.3 Comprobacin de la integridad.

3
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
La comprobacin de la integridad consiste en asegurar que un par de
estados (D,D), implicados en una transaccin, satisface las
restricciones dinmicas y que el estado final D satisface las
restricciones esttica /dinmicas.

La comprobacin de la integridad dentro de ORACLE, se realiza


mediante el algoritmo OR, donde se define la ejecucin del evento
intercalado con la ejecucin de las reglas activadas por l y la
comprobacin de las restricciones de integridad relevantes para el
evento.

2.4 Restricciones de integridad elementales.

Integridad de Entidades: ningn componente de clave primaria de


una relacin puede aceptar nulos. Nulo se referir a informacin
faltante. El concepto de unicidad es parte de la definicin de clave
primaria en s.

Integridad Referencial: la base de datos no puede contener valores


de clave ajena sin concordancia. La posibilidad de aceptacin de
valores nulos deber ser evaluada por el analista, al igual de las
opciones a seguir (restriccin, propagacin o anulacin)

En el caso de ORACLE, todas las definiciones de restricciones


(tratamiento de nulos, claves primarias, ajenas etc.) ya sean a nivel
de columna o a nivel de tabla, tienen un nombre.

Como esta asignacin de nombre por parte del diseador es


opcional, si no se le asigna nombre en el momento de la definicin,
ORACLE le asigna uno interno. En cualquier caso, es conveniente
declarar una restriccin con su nombre porque as es posible
referenciarla posteriormente en sentencias ALTER TABLE, para
activarla o desactivarla.

A continuacin se indicarn cmo son tratadas las distintas variantes


de las restricciones de integridad elementales dentro de ORACLE.

2.5 Tratamiento de valores nulos en ORACLE.

Esta restriccin especifica si una columna puede contener o no


valores nulos. ORACLE por defecto se asume que la columna admite
valores nulos.

Formato:
atributo tipo [CONSTRAINT nombre] NOT NULL | NULL.

4
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
Ejemplo:
Dni integer CONSTRAINT nn_dni NOT NULL

2.6 Tratamiento de los valores por defecto en ORACLE.

En este caso, las restricciones de integridad se utilizan para


especificar valores que sern asignados a una columna, cuando en
sta no se introduzca ningn valor. El valor especificado en este
campo debe ser del mismo tipo que la columna.

Las restricciones se especifican como parte de la definicin de la


columna.

Para el tratamiento de informacin faltante, se le puede especificar un


NULL como valor por defecto siempre que la columna permita nulos.

En la expresin no se puede hacer referencia a otras columnas.

Formato:
atributo tipo DEFAULT expresin.

Ejemplo:
Num integer DEFAULT 1+3.

2.7 Tratamiento de clave primaria en ORACLE

En este caso la restriccin de integridad designa una columna o


combinacin de columnas como clave primaria de la tabla.

Para facilitar su especificacin, ORACLE permite definir la restriccin a


nivel de columna (en el mbito de definicin de una columna) o a
nivel de tabla (si se definen despus de introducir todas las columnas,
en una seccin genrica final de definicin de restricciones).

- A nivel de columna: Se define dentro de una constraint asociada a


la misma. La definicin de una clave primaria lleva implcita la
restriccin de valores no nulos. La misma columna puede ser
definida como primaria y ajena pero no como primaria y
alternativa.

- A nivel de tabla: Se utiliza para definir claves primarias


compuestas. Se declara antes o despus de haber introducido las
columnas de la tabla en cuestin.

Formato:

5
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
A nivel columna:
atributo tipo [CONSTRAINT nombre] PRIMARY KEY.

A nivel tabla:
[CONSTRAINT nombre] PRIMARY KEY(colum1,.. colum ..).

Ejemplo:

A nivel columna:

Dni integer [CONSTRAINT pk_dni] PRIMARY KEY

A nivel tabla:
CONSTRAINT pk_nomapelli PRIMARY KEY(nom,apelli).

Por defecto, ORACLE no permite la insercin de valores nulos en las


columnas definidas como clave primaria.

2.8 Tratamiento de claves alternativas en ORACLE

Para las claves alternativas en ORACLE, se designa una columna o


combinacin de columnas como clave nica alternativa a la clave
seleccionada como primaria.

Existen dos posibilidades para seleccionar una clave primaria,

- Para definir una columna como nica se especifica dentro de una


constraint asociada a dicha columna.

Formato:
atributo tipo [CONSTRAINT nobmre] UNIQUE.

Ejemplo:
nombre char CONSTRAINT unq_nombre UNIQUE.

- Para definir una combinacin de columnas como clave nica se


especifica dentro de una constraint asociada a la tabla.

Formato:
[CONSTRAINT nombre] UNIQUE (columan1, columana2 ...)

Ejemplo:
CONSTRAINT unq_nomapell UNIQUE(nombre, apellidos)

2.9 Tratamiento de claves ajenas en ORACLE

6
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
En ORACLE pueden definirse claves ajenas a nivel columna o a nivel
de tabla.

La integridad referencial de claves ajenas a nivel columna se declara


detrs del tipo asociado al atributo en cuestin, con el formato
presentado a continuacin, en el que la palabra columna representa
la clave primaria o nica referenciada en la tabla n_tabla. Si no se
especifica la columna o columnas, sino tan slo el nombre de la tabla,
se asume por defecto que estamos referenciando a su clave primaria.

A diferencia de la columna a la que se hace referencia, la columna


donde se define el REFERENCES puede tener valores nulos.

A acciones a realizar:
1. Restringir (restrict),
2. poner a nulos (set null),
3. propagar (cascade),

Si la clave primaria a la que hace referencia la clave ajena es borrada


o actualizada, en este caso slo podemos especificar la situacin en
que se borre la clave primaria y queramos propagarlo a la clave
ajena.

Esto es realizado mediante la clusula on delete cascade. Si sta no


aparece, al igual que para actualizaciones de la clave primaria, la
operacin se asume restringida. Para incluir esas caractersticas
faltantes hay que generar (es decir, programar) los disparos
correspondientes.

Formato:
atributo tipo [CONSTRAINT nombre] REFENCES ntabla[(columna)]
[ON DELETE CASCADE]

Ejemplo:
Dep char(10) REFERENCES departamento(nom)

Si las restricciones se definen a nivel de tabla se especifica la


columna o composicin de columnas que forman parte de la clave
ajena despus de la palabra clave FOREIGN KEY y la columna o
columnas a la que se hace referencia despus de la palabra clave
REFERENCES.

Obviamente, el nmero de columnas y tipos de la clave ajena debe


coincidir con el nmero de columnas y tipos de la clave primaria
referenciada.

7
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
Formato:
[CONSTRAINT nombre] FOREIGN KEY (columna1, columna2, ...)
REFERENCES n_tabla[(columna1, columna2,...)] [ON DELETE
CASCADE]

Ejemplo:
FOREIGN KEY(dep) REFERENCES departamento(nom)

2.10 Tratamiento de las restricciones de integridad estticas


en ORACLE

Las restricciones de integridad estticas sern aquellas frmulas bien


formadas de primer orden construidas con atributos de la tabla como
trminos bsicos, que depende satisfacerse en todos los estados
vlidos para las tuplas de una relacin.

Estas restricciones de integridad estn especificadas en ORACLE


dentro de una restriccin de tipo CHECK asociada a una columna o
una tabla.

La implementacin de esta restriccin en una columna sera:

Formato:
atributo tipo [CONSTRAINT nombre] CHECK condicin.

Ejemplo:
Saldo integer CHECK saldo!=saldo_base

A diferencia de otros gestores, en esa condicin se puede hacer


referencia a cualquier columna de la tabla.

No se pueden introducir en estas condiciones atributos de otras


tablas. En ese caso, slo queda el recurso de programar
explcitamente la restriccin de integridad, lo que habitualmente se
hace generando disparos (triggers) de la base de datos.

La implementacin a nivel de tabla sera equivalente.

3. Modificacin de restricciones

Una vez creada una tabla es inevitable enfrentarse a situaciones en


las que cambios no previstos obliguen a modificar las restricciones de
integridad declaradas en el momento de su creacin.

La flexibilidad proporcionada por un SGBD para abordar este tipo de


modificaciones es un factor diferenciador que puede resultar bsico.

8
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
Se trata de un problema clsico en Base de Datos, al que se le conoce
como Gestin de Evolucin de Esquemas.

Entre las modificaciones a que est expuesta una base de datos en


explotacin, es importante distinguir entre:

- Aquellas que no afectan a la integridad de los datos ya existentes


(por ejemplo, aadir una columna nueva a una tabla, o permitir
que admita nulos un atributo que hasta ahora no los admita).

- Y las que s afectan a la integridad de los datos e implican toma de


decisiones (por ejemplo, cambiar una restriccin de integridad: la
cuestin que se plantea es qu hacer con los datos preexistentes
que no la cumplen, borrarlos? ignorarlos y aplicar la restriccin a
partir del momento de su introduccin en el esquema?). Las
eleccin del mecanismo a seguir para mantener la base de datos
ntegra deber ser elegida por el diseador de la base de datos,
segn considere oportunas. Estas comprobaciones se realizarn
mediante disparos o reglas de actividad definidas tambin en la
base de datos.

La sentencia ALTER TABLE sirve para aadir o redefinir una columna,


aadir o borrar una restriccin de integridad y para activar o
desactivar cualquier restriccin de integridad o disparo.

Su implementacin en ORACLE sera la siguiente:

Formato:
ALTER TABLE [esquema.]nom_tabla
[ADD nom_col + defe_de_restriccion_col]
[MODIFY nom_col tipo + def_de_restriccion_col]
[ADD + def_restriccion_tabla]
[DROP PRIMARY KEY | UNIQUE | CONSTRAINT nombre [CASCADE]]
[ENABLE PRIMARY KEY | UNIQUE | CONSTRAINT nombre | ALL
TRIGGERS]
[DISABLE PRIMARY KEY | UNIQUE | CONSTRAINT nombre
[CASCADE]]

donde:

- def_de_restriccion_col y def_restriccion_tabla se refieren a las


declaraciones de restricciones que se pueden realizar en el mbito
de una columna o de la tabla en su conjunto respectivamente.

9
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
- Si deshabilitamos una restriccin tenemos la posibilidad de
deshabilitar en cascada todas las restricciones que dependan de
ella a travs de la clusula cascade.

- Si habilitamos una restriccin de integridad referencial, la


restriccin de clave primaria o nica asociada debe ser habilitada
con anterioridad (si no lo estaba ya).

- Las opciones asociadas a UNIQUE identifican la clave nica


implicada en la modificacin indicndola entre parntesis.

La clusula ENABLE ALL TRIGGERS permite activar disparos que


puedan haber sido desactivados con la orden ALTER TRIGGER opcin
DISABLE proporcionada por ORACLE.

4. Mecanismo de activacin de las restricciones de integridad


en ORACLE.

La ejecucin de los eventos en una base de datos ORACLE viene


definida por el Algoritmo A2 or y OR.

Algoritmo A2or recursivo:

Mientras existan reglas activadas


1. seleccionar una regla activada R
2. comprobar la condicin de R
3. si la condicin de R es cierta:
a. ejecutar la accin de R
b. ejecutar OR para las reglas activadas por la accin de
R
fin mientras

El algoritmo OR indica como se intercala la ejecucin de las reglas


activadas por l y la comprobacin de las restricciones de integridad
relevantes para el evento.

1. Procesar con A2or las reglas activadas de tipo BEFORE evento FOR
EACH STATEMENT.

2. Para cada tupla afectada por el evento

a. Procesar con A2 or las instancias (para la tupla actualizada= de


las reglas activadas de tipo BEFORE evento FOR EACH ROW

b. Ejecutar la actualizacin sobre la tupla y comprobar las


restricciones de integridad relevantes para la tupla actualizada.

10
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
Aqu se comprueba las restriciones de integridad relevantes par
ael evento que son comprobadas a nivel de tupla individual
(NOT NULL, CHECK(), ...).

c. Procesar con A2or las instancias (para la tupla actualizada ) de


las reglas activadas de tipo AFTER evento FOR EACH ROW

3. Comprobar las restricciones de integridad relevantes para la


operacin de actualizacin a nivel de sentencia SQL (FOREING KEY).

5. Procesar con A2or las reglas activadas de tipo AFTER evento FOR
EACH STATEMENT.

6. Ejemplo prctico sobre una base de datos comn.

El diseo de las tablas de esta pequea base de datos vendra dado


por:

CREATE TABLE Departamento


(codigo CHAR(5) NOT NULL,
nombre VARCHAR(100) NOT NULL,
director VARCHAR(50),
telefono CHAR(11),
CONSTRAINT CP_dpto PRIMARY KEY (codigo);

Para la tabla departamento tiene definidas las restricciones de


integridad de:
tratamiento de no nulos para las columnas:
cdigo
nombre
tratamiento de clave primaria denominada CP_dpto para la
columna cdigo

CREATE TABLE Profesor


(codigo CHAR(5) NOT NULL,
nombre VARCHAR(100) NOT NULL
11
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
direccion VARCHAR(50),
telefono CHAR(11),
categoria CHAR(3) NOT NULL CONSTRAINT RI_cat CHECK
(categoria=TEU OR categoria=CU OR categoria=CEU), dpto
CHAR(5),
CONSTRAINT CP_prof PRIMARY KEY (codigo),
CONSTRAINT Caj_prof_dpto FOREIGN KEY (dpto) REFERENCES
Departamennto);

Como puede verse, la tabla profesor tiene definidas las


restricciones de integridad de:
tratamiento de no nulos para las columnas:
cdigo
nombre
categora
restricciones de integridad estticas con la clusula check llamada
RI_cat para la columna categora, que delimita el rango de valores
que puede contener la columna a tres cadenas de caracteres,
TEU, CU y CEU.
tratamiento de clave primaria denominada CP_prof para la
columna cdigo
tratamiento de clave ajena denominada Caj_prof_dpto de la
columna dpto haciendo referencia a la tabla departamento.

CREATE TABLE Asignatura


(codigo CHAR(5) NOT NULL,
nombre VARCHAR(100) NOT NULL,
cre_teo NUMBER(3,1) NOT NULL CONSTRAINT RI_teo CHECK
(cre_teo>0),
cre_pra NUMBER(3,1) NOT NULL CONSTRAINT RI_teo CHECK
(cre_pra>0),
dpto CHAR(5),
CONSTRAINT CP_asg PRIMARY KEY (codigo),
CONSTRAINT Caj_asg_dpto FOREIGN KEY (dpto), REFERENCES
Departamento);

La tabla asignatura tiene definidas las restricciones de integridad


de:
tratamiento de no nulos para las columnas:
cdigo
nombre
cre_teo
cre_pra
restricciones de integridad estticas con la clusula check para las
columnas:
12
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
cre_teo (denominada RI_teo)
cre_pra (denominada RI_pra)
tratamiento de clave primaria denominada CP_asg para la columna
cdigo
tratamiento de clave ajena denominada Caj_asg_dpto de la
columna dpto haciendo referencia a la tabla departamento.

CREATE TABLE Docencia


(cod_prof CHAR(5) NOT NULL,
cod_asg CHAR(5) NOT NULL,
creditos NUMBER(3,1) NOT NULL CONSTRAINT RI_cre CHECK
(creditos>0),
CONSTRAINT CP_doc PRIMARY KEY (cod_prof, cod_asg),
CONSTRAINT Caj_doc_prof FOREIGN KEY (cod_prof) REFERENCES
Profesor,
CONSTRAINT Caj_doc_asg FOREIGN KEY (cod_asg) REFERENCES
Asignatura);

Finalmente, la tabla docencia tiene definidas las restricciones de


integridad de:
tratamiento de no nulos para las columnas:
cod_prof
cod_asg
crditos
restricciones de integridad estticas con la clusula check
denominada RI_cre para la columna crditos.
tratamiento de clave primaria denominada CP_doc para la
combinacin de columnas cod_prof y cod_asg.
tratamiento de clave ajena denominada CAj_doc_prof de la
columna cod_prof haciendo referencia a la tabla profesor.
Tratamiento de clave ajena denominada CAj_doc_asg de la
columna cod_asg haciendo referencia a la tabla asignatura.

7. Conclusiones

Finalmente, podemos establecer que la inclusin de las restricciones


de integridad dentro del diseo del esquema de la base de datos se
traduce en ventajas.

ORACLE da muchas posibilidades a la hora de implementar los


distintos tipos de restricciones de integridad que se pueden dar sobre
una base de datos. Las restricciones de entidades son definidas al
mismo tiempo que son creadas las tablas. Las restricciones
referenciales se definen primeramente en la creacin de las tablas, y

13
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia
su mecanismo de validacin de datos puede hacerse mediante
disparos (triggers).

Los disparos (triggers) es un punto importante dentro de las


restricciones de integridad que no ha sido desarrollado en este
trabajo. La razn de no profundizar sobre los disparadores es debido a
que otros compaeros nuestros son los encargados de desarrollar el
tema.

8. Referencias

[1] Pastor O., Blesa P., Gestin de Bases de Datos, Servicio de


Publicaciones UPV-2000.4171

[2] Oracle Corporation, Oracle 7 Server Concepts Manual.

[3]www.dsic.upv.es/asignaturas/facultad/bdv. Transparencias del


curso de 2000/2001 de la asignatura Base de Datos Avanzadas.

14
Laboratorio de Sistemas de Informacin
Facultad de Informtica
Universidad Politcnica de Valencia