Integridad de entidad
La integridad de entidad define una fila como entidad única para una tabla determinada. La integridad de entidad exige la integridad de las columnas de los identificadores o la clave principal de una tabla, mediante índices y restricciones UNIQUE, o restricciones PRIMARY KEY.
Ejemplo 1
Un ejemplo a partir
del sistema de base de datos que desarrollamos paralelamente en este blog es el
de nuestros productos, ya que estos en ves de tenerlos como productos en
general los dividimos en tipo de productos que son regalos mercería y papelería,
y a su ves a cada producto en especifico se le asigna una clave primaria única.
Ejemplo 2
Como ejemplo una
empresa dedicada a la venta de bebidas, podríamos identificar las bebidas de un
modo general, a un modo más individual: todas las bebidas en un sólo grupo. Todas
las bebidas de la misma marca en un grupo. Agrupar las bebidas en función de si
son alcohólicas o no. Cada bebida de modo individual. Un hecho sobre una
determinada bebida, como puede ser el sabor de un refresco.
Integridad de dominio
La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede exigir la integridad de dominio para restringir el tipo mediante tipos de datos, el formato mediante reglas y restricciones CHECK, o el intervalo de valores posibles mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas.
Ejemplo 1
En nuestra base de
datos por ejemplo el atributo fecha_venta dividido en año mes y día solo
aceptara entradas de datos de tipo entero de 4, 2 y 2 caracteres
respectivamente; en caso de año solo aceptara entradas de números enteros de 4
caracteres entre 2012 (año en que entrara en función la BD) hasta el valor
igual o menor del año en curso de la entrada, mes solo aceptara entradas de números enteros de 2
caracteres entre 01 y 12, y en función de los datos anteriores día aceptara
entradas de números enteros de 2 caracteres entre 01 y 28,29,30 ó 31 según sea
el caso.
Ejemplo 2
Como ejemplo
supongamos el sistema de base de datos de una Universidad, en el atributo calificación
de la entidad alumno los valores permitidos deberán estar restringidos en un
dominio que acepte únicamente entradas de tipo entero menores o iguales a 100 y
mayores o iguales a 70, en caso de que la calificación sea menor a 70 la
entrada deberá ser 0.
Integridad referencial.
La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan filas. La integridad referencial se basa en las relaciones entre claves externas y claves principales o entre claves externas y claves exclusivas, mediante restricciones FOREIGN KEY y CHECK. La integridad referencial garantiza que los valores de clave sean coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos.
Sea una base de datos relacional:
· CIUDAD (C#, NOMBRE, HABITANTES)
· CARRETERA (A#, DESCRIPCION, CATEGORIA)
· RUTA (C#1, C#2, A#)
· ENLACE (C#1, C#2, C#3)
Donde C#1 y C#2 son códigos de ciudad ¿Se podría poner como restricción de integridad referencial entre la relación CIUDAD y la relación RUTA para C1# DELETE CASCADE y para C2# DELETE RESTRICT? ¿Y entre la relación CIUDAD y la relación ENLACE? ¿En ambos casos sería relevante la restricción de integridad referencial entre la relación CARRETERA y las relaciones RUTA y ENLACE?
La estructura referencial que representaría la DB relacional propuesta se representa de la siguiente manera:
Se puede observar que existen dos caminos desde la relación CIUDAD a la relación RUTA, consecuentemente por ambos las opciones de integridad deber ser iguales.
Para el caso de CIUDAD y ENLACE, el razonamiento sería idéntico.
Las restricciones de integridad referencial entre la relación CARRETERA y las relaciones RUTA y ENLACE no influyen en el carácter correcto o incorrecto de la estructura referencial
Ejemplo 2.
Sea una base de datos relacional:
· PROFESOR (P#, NOMBRE, A#)
· ASIGNATURA (A#, TITULO, D#)
· DEPARTAMENTO (D#, NOMBRE, CURSO)
· ESTUDIA (E#, A#, P#)
Se requiere contestar de una manera justificada lo siguiente:
a) ¿Qué tipo de estructura referencial tenemos?
b) ¿se podría poner como restricción de integridad referencial entre la relación ESTUDIA y la relación ASIGNATURA: DELETE CASCADE, sabiendo que entre la relación ESTUDIA y la relación PROFESOR la restricción establecida es DELETE RESTRICT?
c) ¿Y so entre la relación ESTUDIA y la relación PROFESOR la restricción es DELETE CASCADE, siendo la restricción referencial entre PROFESOR y ASIGNATURA DELETE SET NULL?
d) ¿En ambos casos sería relevante la restricción de integridad referencial entre la relación ESTUDIANTE y la relación ESTUDIA?
La estructura referencial que representaría la DB relacional propuesta se representa de la siguiente manera:
a) No existen ciclos: por lo tanto la estructura referencial es lineal
b) Hay dos caminos desde la relación ASIGNATURA a la relación ESTUDIA, consecuentemente por ambos las opciones de integridad deben ser iguales
c) Si se borra una asignatura se borrarían directamente todas las tuplas de la relación ESTUDIA cuyo valor de código de asignatura coincida con el valor borrado. Por el otro camino el código de asignatura en la relación PROFESOR se pondría a valor NULL, no borrándose tupla alguna, y así no se propaga ningún borrado a la relación ESTUDIA.
d) La restricción de integridad referencial entre la relación ESTUDIANTE y la relación ESTUDIA no influye en el carácter correcto o incorrecto de la estructura referencial.
Integridad definida por el usuario
La integridad definida por el usuario permite definir reglas de empresa específicas que no pertenecen a ninguna otra categoría de integridad. Todas las categorías de integridad admiten la integridad definida por el usuario. Esto incluye todas las restricciones de nivel de columna y nivel de tabla en CREATE TABLE, procedimientos almacenados y desencadenadores.
Tipos de restricciones de integridad
- Datos Requeridos: establece que una columna tenga un valor no NULL. Se define efectuando la declaración de una columna es NOT NULL cuando la tabla que contiene las columnas se crea por primera vez, como parte de la sentencia CREATE TABLE.
- Chequeo de Validez: cuando se crea una tabla cada columna tiene un tipo de datos y el DBMS asegura que solamente los datos del tipo especificado sean ingresados en la tabla.
- Integridad de entidad: establece que la clave primaria de una tabla debe tener un valor único para cada fila de la tabla; si no, la base de datos perderá su integridad. Se especifica en la sentencia CREATE TABLE. El DBMS comprueba automáticamente la unicidad del valor de la clave primaria con cada sentencia INSERT Y UPDATE. Un intento de insertar o actualizar una fila con un valor de la clave primaria ya existente fallará.
- Integridad referencial: asegura la integridad entre las llaves foráneas y primarias (relaciones padre/hijo). Existen cuatro actualizaciones de la base de datos que pueden corromper la integridad referencial:
- La inserción de una fila hijo se produce cuando no coincide la llave foránea con la llave primaria del padre.
- La actualización en la llave foránea de la fila hijo, donde se produce una actualización en la clave ajena de la fila hijo con una sentencia UPDATE y la misma no coincide con ninguna llave primaria.
- La supresión de una fila padre, con la que, si una fila padre -que tiene uno o más hijos- se suprime, las filas hijos quedarán huérfanas.
- La actualización de la llave primaria de una fila padre, donde si en una fila padre, que tiene uno o más hijos se actualiza su llave primaria, las filas hijos quedarán huérfanas.
No hay comentarios:
Publicar un comentario