DEFINICIÓN:
La
integridad referencial es propiedad de la base de datos. La misma significa que
la clave externa de una tabla de referencia siempre debe aludir a una fila
válida de la tabla a la que se haga referencia. La integridad referencial
garantiza que la relación entre dos tablas permanezca sincronizada durante las
operaciones de actualización y eliminación.
Todas
las bases de datos relacionales gozan de esta propiedad gracias a que el
software gestor de base de datos vela por su cumplimiento. En cambio, las bases
de datos jerárquicas requieren que los programadores se aseguren de mantener
tal propiedad en sus programas.
Existen
tres tipos de integridad referencial:
© Integridad
referencial débil: si en una tupla de R todos los valores de los atributos de K
tienen un valor que no es el nulo, entonces debe existir una tupla en S que
tome esos mismos valores en los atributos de J;
© Integridad
referencial parcial: si en una tupla de R algún atributo de K toma el valor nulo, entonces
debe existir una tupla en S que tome en los atributos de J los mismos valores
que los atributos de K con valor no nulo; y
© Integridad
referencial completa: en una tupla de R todos los atributos de K deben tener el valor
nulo o bien todos tienen un valor que no es el nulo y entonces debe existir una
tupla en S que tome en los atributos de J los mismos valores que toman los de
K.
Tipos de relaciones
Entre
dos tablas de cualquier base de datos relacional pueden haber dos tipos de
relaciones, relaciones uno a uno y relaciones uno a muchos:
Relación Uno a Uno:
Cuando un
registro de una tabla sólo puede estar relacionado con un único registro de la
otra tabla y viceversa.
Por
ejemplo: tenemos dos tablas una de profesores y otra de departamentos y
queremos saber qué profesor es jefe de qué departamento, tenemos una relación
uno a uno entre las dos tablas ya que un departamento tiene un solo jefe y un
profesor puede ser jefe de un solo departamento.
Relación Uno a Varios:
Cuando un registro de una tabla (tabla secundaria) sólo puede estar relacionado
con un único registro de la otra tabla (tabla principal) y un registro de la
tabla principal puede tener más de un registro relacionado en la tabla
secundaria, en este caso se suele hacer referencia a la tabla principal como
tabla 'padre' y a la tabla secundaria como tabla 'hijo', entonces la regla se
convierte en 'un padre puede tener varios hijos pero un hijo solo tiene un
padre (regla más fácil de recordar).
Por
ejemplo: tenemos dos tablas una con los datos de diferentes poblaciones y otra
con los habitantes, una población puede tener más de un habitante, pero un habitante
pertenecerá (estará empadronado) en una única población. En este caso la tabla
principal será la de poblaciones y la tabla secundaria será la de habitantes.
Una población puede tener varios habitantes pero un habitante pertenece a una
sola población. Esta relación se representa incluyendo en la tabla 'hijo' una
columna que se corresponde con la clave principal de la tabla 'padre', esta
columna es lo denominamos clave foránea (o clave ajena o clave externa).
CLAVE
FORANEA
Una
clave foránea es pues un campo de una tabla que contiene una referencia a un
registro de otra tabla. Siguiendo nuestro ejemplo en la tabla habitantes
tenemos una columna población que contiene el código de la población en la que
está empadronado el habitante, esta columna es clave ajena de la tabla
habitantes, y en la tabla poblaciones tenemos una columna código de población
clave principal de la tabla.
Relación Varios a Varios:
Cuando un
registro de una tabla puede estar relacionado con más de un registro de la otra
tabla y viceversa. En este caso las dos tablas no pueden estar relacionadas
directamente, se tiene que añadir una tabla entre las dos que incluya los pares
de valores relacionados entre sí.
Por ejemplo: tenemos dos tablas una con los
datos de clientes y otra con los artículos que se venden en la empresa, un
cliente podrá realizar un pedido con varios artículos, y un artículo podrá ser
vendido a más de un cliente.
No se puede definir entre clientes y
artículos, hace falta otra tabla (por ejemplo una tabla de pedidos) relacionada
con clientes y con artículos. La tabla pedidos estará relacionada con cliente
por una relación uno a muchos y también estará relacionada con artículos por un
relación uno a muchos.
¿ Cuándo se pueden producir errores
en los datos?
© Cuando
insertamos una nueva fila en la tabla secundaria y el valor de la clave foránea
no existe en la tabla principal. insertamos un nuevo habitante y en la columna población
escribimos un código de población que no está en la tabla de poblaciones (una
población que no existe).
© Cuando modificamos el valor de la clave principal de un registro que tiene 'hijos', modificamos el código de Valencia, sustituimos el valor que tenía (1) por un nuevo valor (10), si Valencia tenía habitantes asignados, qué pasa con esos habitantes, no pueden seguir teniendo el código de población 1 porque la población 1 ya no existe, en este caso hay dos alternativas, no dejar cambiar el código de Valencia o bien cambiar el código de población de todos los habitantes de Valencia y asignarles el código 10.
© Cuando modificamos el valor de la clave foránea, el nuevo valor debe existir en la tabla principal. Por ejemplo cambiamos la población de un habitante, tenía asignada la población 1 (porque estaba empadronado en valencia) y ahora se le asigna la población 2 porque cambia de lugar de residencia. La población 2 debe existir en la tabla de poblaciones.
© Cuando
queremos borrar una fila de la tabla principal y ese registro tiene 'hijos',
por ejemplo queremos borrar la población 1 (Valencia) si existen habitantes
asignados a la población 1, estos no se pueden quedar con el valor 1 en la
columna población porque tendrían asignada una población que no existe. En este
caso tenemos dos alternativas, no dejar borrar la población 1 de la tabla de
poblaciones, o bien borrarla y poner a valor nulo el campo población de todos
sus 'hijos'.
Asociada a la integridad referencial están
los conceptos de actualizar los registros en cascada y eliminar registros en
cascada.
Actualización y borrado en cascada
El actualizar y/o eliminar registros en
cascada, son opciones que se definen cuando definimos la clave foránea y que le
indican al sistema gestor qué hacer en los casos comentados en el punto
anterior.
Actualizar registros en cascada:
Esta opción le indica al sistema gestor de la
base de datos que cuando se cambie un valor del campo clave de la tabla
principal, automáticamente cambiará el valor de la clave foránea de los
registros relacionados en la tabla secundaria.
Por ejemplo, si cambiamos en la tabla de
poblaciones (la tabla principal) el valor 1 por el valor 10 en el campo código
(la clave principal), automáticamente se actualizan todos los habitantes (en la
tabla secundaria) que tienen el valor 1 en el campo población (en la clave
ajena) dejando 10 en vez de 1.
Si no se tiene definida esta opción, no se
puede cambiar los valores de la clave principal de la tabla principal. En este
caso, si intentamos cambiar el valor 1 del código de la tabla de poblaciones ,
no se produce el cambio y el sistema nos devuelve un error o un mensaje que los
registros no se han podido modificar por infracciones de clave.
Eliminar registros en cascada:
Esta opción le indica al sistema gestor de la
base de datos que cuando se elimina un registro de la tabla principal
automáticamente se borran también los registros relacionados en la tabla
secundaria.
Por ejemplo: Si borramos la población
Onteniente en la tabla de poblaciones, automáticamente todos los habitantes de
Onteniente se borrarán de la tabla de habitantes.
Si no se tiene definida esta opción, no se
pueden borrar registros de la tabla principal si estos tienen registros
relacionados en la tabla secundaria. En este caso, si intentamos borrar la
población Onteniente, no se produce el borrado y el sistema nos devuelve un
error o un mensaje que los registros no se han podido eliminar por infracciones
de clave.
Excelente información
ResponderBorrar