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. Comprobacin de la integridad.

2.3

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.

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

La flexibilidad proporcionada por un SGBD para abordar este tipo de modificaciones es un factor diferenciador que puede resultar bsico. 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

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

b. Ejecutar la actualizacin sobre la tupla y comprobar las restricciones de integridad relevantes para la tupla actualizada. 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 11
Laboratorio de Sistemas de Informacin Facultad de Informtica Universidad Politcnica de Valencia

(codigo CHAR(5) NOT NULL, nombre VARCHAR(100) NOT NULL 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 12
Laboratorio de Sistemas de Informacin Facultad de Informtica Universidad Politcnica de Valencia

restricciones de integridad estticas con la clusula check para las columnas: 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 13
Laboratorio de Sistemas de Informacin Facultad de Informtica Universidad Politcnica de Valencia

referenciales se definen primeramente en la creacin de las tablas, y 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 curso de 2000/2001 de la asignatura Base de Datos Avanzadas. del

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

También podría gustarte