¿Qué significa clave ajena?
Una clave ajena es una columna o grupo de columnas de una tabla de una base de datos relacional que proporciona un enlace entre los datos de dos tablas. Actúa como una referencia cruzada entre tablas porque hace referencia a la clave primaria de otra tabla, estableciendo así un vínculo entre ellas.
La mayoría de las tablas de un sistema de base de datos relacional se adhieren al concepto de clave ajena. En bases de datos complejas y almacenes de datos, los datos de un dominio deben agregarse en varias tablas, manteniendo así una relación entre ellas. El concepto de integridad referencial se deriva de la teoría de las claves foráneas.
Las claves foráneas y su implementación son más complejas que las claves primarias.
Definición de clave ajena
Mientras que una clave primaria puede existir por sí misma, una clave ajena siempre debe hacer referencia a una clave primaria en algún lugar. La tabla original que contiene la clave primaria es la tabla padre (también conocida como tabla referenciada). Esta clave puede ser referenciada por múltiples claves ajenas de otras tablas, conocidas como tablas «hijas».
Para cualquier columna que actúe como clave ajena, debe existir un valor correspondiente en la tabla vinculada. Hay que tener especial cuidado al insertar datos y eliminar datos de la columna de clave ajena, ya que una eliminación o inserción descuidada podría destruir la relación entre las dos tablas.
Si la integridad entre las dos bases de datos se ve comprometida, pueden producirse errores.
Por ejemplo, si hay dos tablas, cliente y pedido, se puede crear una relación entre ellas introduciendo una clave ajena en la tabla pedido que haga referencia al CUSTOMER_ID de la tabla cliente. La columna CUSTOMER_ID existe tanto en la tabla cliente como en la tabla pedido.
El CUSTOMER_ID de la tabla pedido se convierte en la clave ajena, que hace referencia a la clave primaria de la tabla cliente. Para insertar una entrada en la tabla pedido, debe cumplirse la restricción de clave externa.
Un intento de introducir un CUSTOMER_ID que no esté presente en la tabla de clientes falla, manteniendo así la integridad referencial de la tabla.
En las bases de datos del mundo real, la integridad entre tablas de clave foránea y de clave primaria puede garantizarse aplicando restricciones referenciales siempre que se actualicen o eliminen filas de una tabla referenciada.
Algunas acciones referenciales asociadas a una acción de clave foránea son las siguientes:
Cascada
Cuando se borran filas de la tabla padre, también se borran las columnas de clave ajena coincidentes de la tabla hija, creando un borrado en cascada.
Establecer nulo
Cuando se elimina o actualiza una fila referenciada en la tabla padre, los valores de clave ajena de la fila referenciada se establecen como nulos para mantener la integridad referencial.
Disparadores
Las acciones referenciales se implementan normalmente como desencadenantes. En muchos aspectos, las acciones de clave externa son similares a los activadores definidos por el usuario. Para garantizar una ejecución correcta, las acciones referenciales ordenadas se sustituyen a veces por sus equivalentes activadores definidos por el usuario.
Establecer por defecto
Esta acción referencial es similar a «establecer nulo». Los valores de la clave externa en la tabla hija se establecen en el valor por defecto de la columna cuando se elimina o actualiza la fila referenciada en la tabla padre.
Restringir
Ésta es la acción referencial normal asociada a una clave ajena. Un valor de la tabla padre no puede borrarse ni actualizarse mientras esté referenciado por una clave ajena en otra tabla.
Sin acción
Esta acción referencial tiene un funcionamiento similar a la acción «restringir», salvo que la comprobación de no acción se realiza sólo después de intentar alterar la tabla.