Está en la página 1de 7

INTEGRIDAD REFERENCIAL Una vez definida la estructura de datos del modelo relacional, pasamos a estudiar las reglas de integridad

que los datos almacenados en dicha estructura deben cumplir para garantizar que son correctos. Al definir cada atributo sobre un dominio se impone una restriccin sobre el conjunto de valores permitidos para cada atributo. A este tipo de restricciones se les denomina restricciones de dominios. Hay adems dos reglas de integridad muy importantes que se deben cumplir en todas las bases de datos relacionales y en todos sus estados o instancias (las reglas se deben cumplir todo el tiempo). Estas reglas son la regla de integridad de entidades y la regla de integridad referencial. Antes de definirlas, es preciso conocer el concepto de nulo. Restricciones de dominios Imponen una limitacin al conjunto de valores permitidos para los atributos en las relaciones. Restriccin de los valores que puede tomar un atributo respecto a su dominio, por ejemplo EDAD >= 18. Nulos Cuando en una tupla un atributo es desconocido, se dice que es nulo. Un nulo no representa el valor cero ni la cadena vaca, stos son valores que tienen significado. El nulo implica ausencia de informacin, bien porque al insertar la tupla se desconoca el valor del atributo, o bien porque para dicha tupla el atributo no tiene sentido. Ya que los nulos no son valores, deben tratarse de modo diferente, lo que causa problemas de implementacin en los SGBD relacionales. NULL | NOT NULL. Determina si se permiten valores NULL en la columna. ORACLE: El optimizador necesita saber que una columna no es NOT NULL, y sin este conocimiento, se limita a elegir un plan de ejecucin inferior al ptimo. SQL SERVER: NULL no es estrictamente una restriccin, pero se puede especificar de la misma forma que NOT NULL. NOT NULL se puede especificar para las columnas calculadas slo si se especifica tambin PERSISTED. Regla de integridad de entidades La primera regla de integridad se aplica a las claves primarias de las relaciones base: ninguno de los atributos que componen la clave primaria puede ser nulo. Por definicin, una clave primaria es un identificador irreducible que se utiliza para identificar de modo nico las tuplas. Irreducible significa que ningn subconjunto de la clave primaria sirve para identificar otra tupla. Los campos que conforman una llave primaria son por defecto no nulas. Ntese que esta regla slo se aplica a las relaciones base y a las claves primarias, no a las claves alternativas. Regla de integridad referencial La segunda regla de integridad se aplica a las claves ajenas: si en una relacin hay alguna clave ajena, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos. La regla de integridad referencial se enmarca en trminos de estados de la base de datos: indica lo que es un estado ilegal, pero no dice cmo puede evitarse. La cuestin es qu hacer si estando en un estado legal, llega una peticin para realizar una operacin que conduce a un estado ilegal? Existen dos opciones:rechazar la operacin, o bien aceptar la operacin y realizar operaciones adicionales compensatorias que conduzcan a un estado legal. Por lo tanto, para cada clave ajena de la base de datos habr que contestar a tres preguntas:

Regla de los nulos: Los campos involucrados en llaves primarias son por definicin no nulos. Regla de borrado: Qu ocurre si se intenta borrar la tupla referenciada por la clave ajena? o Restringir: no se permite borrar la tupla referenciada.

o o

Propagar: se borra la tupla referenciada y se propaga el borrado a las tuplas que la referencian mediante la clave ajena -borrado en cascada-. Anular: se borra la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (slo si acepta nulos).

Regla de modificacin: Qu ocurre si se intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena? o Restringir: no se permite modificar el valor de la clave primaria de la tupla referenciada. o Propagar: se modifica el valor de la clave primaria de la tupla referenciada y se propaga la modificacin a las tuplas que la referencian mediante la clave ajena. Oracle no permite la modificacin en cascada. o Anular: se modifica la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (slo si acepta nulos).

En Oracle la clausula ON DELETE dice como comportarse si se borra el registro padre: 1. Si no se especifica nada, por defecto saltar un error 2. CASCADE. Borrar los registros hijos. Considere la relacin departamentos y empleados. Es posible modificar el CONSTRAINT para que acepte el borrado en cascada.

El cdigo para esta opcin es, el cual si borramos un departamento borrara en cascada a los empleados que laboran en el: ALTER TABLE empleado DROP CONSTRAINT FK_Empleado; ALTER TABLE empleado ADD CONSTRAINT FK_Empleado

FOREIGN KEY (idDepartamento) REFERENCES departamento (idDepartamento) ON DELETE CASCADE; 3. SET NULL. Pondr los campos del registro hijo a null. Note que la clave ajena debe permitir el valor nulo. CONSTRAINT FK_columna FOREIGN KEY (columna1, columna2, ... columna_n) REFERENCES TablaReferenciada (columna1, columna2, ... columna_n) ON DELETE SET NULL

Reglas de negocio Toda aplicacin trata de reflejar parte del funcionamiento del mundo real, para automatizar tareas que de otro modo seran llevadas a cabo de modo ms ineficiente, o bien no podran realizarse. Para ello, es necesario que cada aplicacin refleje las restricciones que existen en el negocio dado, de modo que nunca sea posible llevar a cabo acciones no vlidas. A las reglas que debe seguir la aplicacin para garantizar se les denomina reglas de negocio. Ejemplos de tales reglas son: no permitir crear facturas pertenecientes a clientes inexistentes, controlar que el saldo negativo de un cliente nunca sobrepase cierta cantidad, etc. En realidad, la informacin puede ser manipulada por muchos programas distintos: as, una empresa puede tener un departamento de contabilidad que controle todo lo relacionado con compras, cobros, etc., y otro departamento tcnico, que est interesado en relacionar diversos parmetros de produccin con los costes. La visin que ambos departamentos tendrn de la informacin y sus necesidades sern distintas, pero en cualquier caso siempre se debern respetar las reglas de negocio. El hecho de que la informacin sea manipulada por diversos programas hace ms difcil garantizar que todos respetan las reglas, especialmente si las aplicaciones corren en diversas mquinas, bajo distintos sistemas operativos, y estn desarrolladas con distintos lenguajes y herramientas. INTEGRIDAD REFERENCIAL DECLARATIVA 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. 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. 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 costo de desarrollo de software. Es ms confiable al ser centralizado y uniforme. Mantenimiento ms fcil.

De acuerdo con la forma de especificacin del comando CREATE TABLE dada anteriormente, la clusula <table_constraint> puede entonces tener las siguientes formas: CONSTRAINT <constraint_name> PRIMARY KEY (<column_name>[,<column_name>]) CONSTRAINT <constraint_name> UNIQUE (<column_name>[,<column_name>]) CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>[,<column_name>]) REFERENCES <table_name> CONSTRAINT <constraint_name> CHECK (<condition>) Donde: <constraint_name> es el nombre con el que se designar al constraint" en el esquema donde se crea la tabla que lo incluye. <column_name> es el nombre de una columna de la tabla en la que se define el constraint" <table_name> es el nombre de una tabla definida en el esquema donde existe la tabla que incluye el constraint". <condition> es una expresin lgica de SQL.

En el manual de referencia de SQL usted podr encontrar informacin sobre las reglas de formacin de expresiones lgicas de SQL. Un punto importantsimo a destacar es el de garantizar que los nombres de los constraints" sean nemnicos. Toda vez que un "constraint" sea violado, el SGBDgenerar un mensaje de error indicando el constraint" que ha fallado. Asignar nombres nemnicos permitir hacer la depuracin de programas y la carga de datos mucho ms sencilla, adems de garantizar una perfecta cohesin entre el esquema de implantacin y la documentacin del esquema lgico.

Es as como se sugiere utilizar el siguiente estndar de nomenclatura: Para restricciones de no-nulidad se recomienda no crear constraints" sino declarar la no-nulidad al momento de crear la tabla y para cada columna. Esto se debe al hecho de que el mdulo de chequeo de integridad de ORACLE no utiliza el nombre de la restriccin de integridad para indicar que el valor de una columna en una fila deba ser nulo si se indica lo contrario. Para asociar un constraint" de clave primaria a una tabla <table_name> se recomienda designar el constraint" con el nombre PK_<table_name>. Para asociar un constraint" de unicidad relacionado con una clave alterna de la tabla<table_name>, se recomienda designar el constraint" con el nombreAK_<table_name>. Si existen varias claves alternas podr agregrsele al nombre del constraint" un indicador que permita diferenciar cada una de estas claves alternas. Para asociar un constraint" de clave fornea a una tabla <table_name1> que referencia a una tabla <table_name2> designe el constraint" con el nombreFK_<table_name1>_<table_name2>. Si existen mltiples claves forneas en la

tabla<table_name1> que referencia a la tabla <table_name2> entonces ser necesario colocar algn indicador que permita diferenciar cada uno de los contraints". Un posible nombre a utilizar ser el nombre de la interrelacin (y en rol en caso de interrelaciones recursivas) del esquema conceptual a partir de la cual se gener la clave fornea que define el "constraint" Asociar un constraint" que represente una restriccin de dominio sobre una columna <column_name> de una tabla <table_name>, se sugiere utilizarD_<table_name>__<column_name> como nombre del constraint" Para asociar un constraint" que represente una restriccin explcita, descrita a travs de una restriccin de tipo CHECK, de una tabla <table_name> useEXP_<table_name>__R<constraint_number> como nombre del constraintconstraint_number> representar el nmero de restriccin explcita asociado en la documentacin del esquema relacional que se implanta. Los constraints" pueden ser agregados a una tabla previamente creada, o eliminados de una tabla existente. Para tal fin se pueden utilizar dos variaciones del comando ALTER TABLE, cuya sintaxis a continuacin se indica:

ALTER TABLE <table_name> ADD (<table_constraint> [,<table_constraint>]); Permitir agregar una o ms constraints" a la tabla <table_name> existente en la base de datos. Cada uno de los constraints" que se aaden a la tabla seguirn las convenciones sintcticas de la clusula <table_constraint>.

ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name> [CASCADE]; Eliminar de la tabla <table_name> la restriccin <constraint_name>. Si se utiliza la clusula CASCADE, la eliminacin del constraint tendr como efecto eliminar cualquier otro constraint" que est relacionado con el "constraint" que se elimina. Por ejemplo, si se elimina un "constraint" de clave primaria de una tabla A bajo modalidad constraint" entonces se eliminarn los "constraints" de clave fornea que referencien a A. SOBRE LMITES ORACLE impone los siguientes lmites en lo que respecta a los objetos descritos en esta seccin:

La longitud de cualquier identificador (nombre de tabla, nombre de columna, nombre de "constraints", entre otros) se limita a un mximo de 30 caracteres.

El nmero mximo de columnas que puede tener una tabla es de 1000. El nmero mximo de columnas que pueden constituir una clave primaria, una clave alterna o una clave fornea es de 16.

Considere los siguiente ejemplos: Departamento empleado

Futball

Proyecto de investigacion