Integridad de Base de Datos Una base de datos es una colección de datos relacionados. Con la palabra "datos" nos referimos a los hechos conocidos que se pueden grabar y que tienen un significado implícito. La integridad en una base de datos se refiere a la corrección y exactitud de la información contenida. Una base de datos determinada podría estar sujeta a cualquier cantidad de restricciones de integridad (en general) de una complejidad arbitraria. En la mayoría de los sistemas actuales, la verificación de la integridad se realiza mediante códigos de procedimientos escritos por los usuarios. La Integridad es el término utilizado para decir que la información almacenada tiene calidad. El DBMS tiene que asegurar que los datos se almacenan de acuerdo a las políticas previamente determinadas por el DBA. En otras palabras, el DBMS debe principalmente, a este respecto, comprobar las restricciones de integridad, controlar la correcta ejecución de las actualizaciones y recuperar la base de datos en caso de pérdida. La Integridad conserva la seguridad en un sistema de bases de datos que permite el acceso a múltiples usuarios en tiempos paralelos. Reglas de Integridad Una vez definida la estructura de datos del modelo relacional (es decir, una vez que se determina el modelo conceptual) 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 restricción sobre el conjunto de valores permitidos para cada atributo. A este tipo de restricciones se les denomina restricciones de dominio. Hay además dos reglas de integridad muy importantes que son restricciones que se deben cumplir en todas las bases 1 de datos relacionales y en todos sus estados o instancias (las reglas se deben cumplir todo el tiempo). Estas reglas son la de integridad de entidades y la de integridad referencial. Antes de definirlas es preciso conocer el concepto de nulo y dominio. Nulo: Es un indicador que le dice al usuario que el dato falta o no es aplicable. Por conveniencia, un dato que falta normalmente se dice que tiene valor Nulo, pero el valor de Nulo no es un valor de dato real. En vez de ello es una señal o un recordatorio de que el valor falta o es desconocido. Dominio: Posibles valores que puede tener un campo. Un dominio no es más que un tipo de dato; posiblemente un tipo simple definido por el sistema o por el usuario. El Dominio de un atributo define los valores posibles que puede tomar este atributo. Además de los Dominios "naturales", usados como tipos de datos, el administrador del sistema puede generar sus propios dominios definiendo el conjunto de valores permitidos. Esta característica, usada en forma correcta, se convierte en mecanismo de control, restricción y validación de los datos a ingresar. Restricciones Básicas Las restricciones de los datos se imponen para asegurarnos que los datos cumplen con una serie de condiciones predefinidas para cada tabla. Estas restricciones ayudan a conseguir la integridad de referencia: todas las referencias dentro de una BD son válidas y todas las restricciones se han cumplido. Las restricciones se van a definir acompañadas por un nombre, lo que permitirá activarlas o desactivarlas según sea el caso; o también mezcladas en la definiciones de las columnas de la tabla. 2 Not Null. Establece la obligatoriedad de que esta columna tenga un valor no nulo. Se debe especificar junto a la columna a la que afecta. Los valores nulos no ocupan espacio, y son distintos a 0 y al espacio en blanco. Hay que tener cuidado con los valores nulos en las operaciones, ya que 1 * NULL es igual a NULL. Si muchos de los tributos no se aplican a todas las duplas de la relación, es decir, son nulos, se acabará con un gran número de nulos en esas duplas. Esto puede originar un considerable desperdicio en el nivel de almacenamiento y posiblemente dificultar el entendimiento del significado de los atributos y la especificación de operaciones de reunión con en el nivel lógico. Restricciones de usuario Podemos considerar la restricción de usuario, dentro del contexto relacional, como un predicado definido sobre un conjunto de atributos, de duplas o de dominios, que debe ser verificado por los correspondientes objetos para que éstos constituyan una ocurrencia válida del esquema. Dentro de las restricciones de usuario destaca la restricción de integridad referencial que dice que los valores de clave ajena deben coincidir con los de clave primaria asociada a ella o ser nulos. Llave primaria Establece el conjunto de columnas que forman la clave primaria de esa tabla. Se comporta como única y obligatoria sin necesidad de explicitarlo. Sólo puede existir una clave primaria por tabla. Puede ser referenciada como clave ajena 3 por otras tablas. Crea un índice automáticamente cuando se habilita o se crea esta restricción. Aserción Una técnica más formal para representar restricciones explícitas es con un lenguaje de especificación de restricciones, que suele basarse en alguna variación del cálculo relacional. Este enfoque declarativo establece una separación clara entre la base de restricciones (en la que las restricciones se almacenan en una forma codificada apropiada) y el subsistema de control de integridad del SGBD (que tiene acceso a la base de restricciones para aplicar estas últimas correctamente a las transacciones afectadas). Cuando se usa esta técnica, las restricciones suelen llamarse aserciones. Se ha sugerido el uso de esta estrategia con SGBD relaciónales. El subsistema de control de integridad compila las aserciones, que entonces se almacenan en el catalogo del SGBD, donde el subsistema de control de integridad puede consultarlas e imponerlas automáticamente. Esta estrategia es muy atractiva desde el punto de vista de los usuarios y programadores por su flexibilidad. 4