Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Integridadnreferencial 106499ea3981a48
Integridadnreferencial 106499ea3981a48
-- Sintaxis general
En el ejemplo anterior hay una consulta donde se borra un usuario de una base de
datos. Hasta ahí todo bien pero ¿qué pasa si el usuario tiene datos asociadas? Vuelvo a
tomar la base de datos tutoriales como referencia – incluyo el esquema -.
En este caso el usuario tiene publicaciones asociadas como podemos ver.
Si ejecutamos una consulta después de borrar el usuario vemos que las publicaciones
siguen estando asociadas al usuario que tiene el id número 4 aunque el registro del
usuario ya no existe en la base de datos.
Lo más probable es que no queramos que suceda este comportamiento. Entonces ¿qué
hacemos?
Podemos hacer cualquiera de las opciones pero antes vamos a ver qué es – de manera
general – la integridad referencial y cómo puedes implementarla en tus bases de datos.
Integridad Referencial
“La integridad referencial es un concepto de bases de datos que asegura que la relación
entre las tablas permanezca consistente. Cuando una tabla tiene un llave foránea a otra
tabla, el concepto de integridad referencial afirma que no puedes agregar un registro a la
tabla que contiene la llave foránea a menos que exista un registro correspondiente en la
tabla vinculada.” – vía databases.about.com
Para implementar este concepto en nuestras bases de datos es necesario modificar las
tablas para que tengan ciertas restricciones en columnas específicas.
RESTRICT / NO ACTION
No realiza la acción.
Si quieres borrar un usuario puedes elegir una de las dos opciones siguientes:
Si vas a asociar las publicaciones a otro usuario – actualizar -verifica que el valor que
utilices en la llave foránea sea válido – que exista el registro en la tabla de usuarios con
el valor como llave primaria -.
Si quieres crear una publicación verifica que el valor que utilices en la llave foránea sea
válido – que exista el registro en la tabla de usuarios con el valor como llave primaria -.
“NO ACTION: Una plabra clave de SQL estándar. En MySQL es equivalente a RESTRICT” –
MySQL.
-- RESTRICT
-- NO ACTION
Si queremos modificar el valor que tiene la columna usuario_id en las publicaciones que
tienen el valor 4 pero el valor que queremos asignar “-1000” no existe – no hay un
usuario en la tabla de usuarios con el id -1000 – esto es lo que sucede.
-- CASCADE
En este caso hay que tener más cuidado. Regresando al ejemplo, si borramos el usuario
con el id = 4 se borran todas las publicaciones que están asociadas con este usuario.
Al igual que con RESTRICT – NO ACTION – esta restricción no permite actualizar el valor
de una llave foránea por el valor de una llave primaria que no existe.
CASCADE tampoco permite crear una publicación con un usuario que no existe.
SET NULL
Al eliminar el registro, sustituye el valor de la llave foránea asociada por NULL.
Si se elige esta opción hay que verificar que la columna de la llave foránea permita
NULL.
-- Modificar la tabla publicaciones
-- para que se comporte diferente
-- si un usuario se borra.
-- SET NULL
Al borrar el usuario con el id = 4 podemos ver que las publicaciones que tenía asociadas
siguen almacenadas en la base de datos pero con el valor NULL en la columna de la
llave foránea.
Al igual que las restricciones anteriores, SET NULL no permite actualizar el valor de una
llave foránea por el valor de una llave primaria que no existe.
SET NULL tampoco permite crear una publicación con un usuario que no existe.
Recordar:
En orden de riesgo las restricciones son:
Nota:
Para poder utilizar las restricciones – de claves foráneas – es necesario:
En caso de tener datos en las tablas no dejar las llaves foráneas sin asignar – no pueden
ser NULL a menos que se quiera utilizar la restricción SET NULL -.
Para finalizar:
Si todavía no tienes una base de datos hecha considera utilizar alguna de estas
restricciones para tu próximo proyecto – aún cuando le pienses dejar la tarea al
lenguaje de programación o framework que utilices para desarrollar tu aplicación – .