Clave foránea

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

En el contexto de bases de datos relacionales, una clave foránea o clave ajena (o Foreign Key FK) es una limitación referencial entre dos tablas. La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la tabla referendo deben ser la clave primaria u otra clave candidata en la tabla referenciada.

Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla referenciada. Así, una fila en la tabla referendo no puede contener valores que no existen en la tabla referenciada. De esta forma, las referencias pueden ser creadas para vincular o relacionar información. Esto es una parte esencial de la normalización de base de datos. Múltiples filas en la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la tabla referenciada. Mayormente esto se ve reflejado en una relación uno (tabla maestra o referenciada) a muchos (tabla hija o referendo).

La tabla referendo y la tabla referenciada pueden ser la misma, esto es, la clave foránea remite o hace referencia a la misma tabla. Esta clave externa es conocida en SQL:2003 como auto-referencia o clave foránea recursiva. Una tabla puede tener múltiples claves foráneas y cada una puede tener diferentes tablas referenciadas. Cada clave foránea es forzada independientemente por el sistema de base de datos. Por tanto, las relaciones en cascada entre tablas pueden realizarse usando claves foráneas. Configuraciones impropias de las claves foráneas o primarias o no forzar esas relaciones son frecuentemente la fuente de muchos problemas para la base de datos o para el modelamiento de los mismos.

Por ejemplo, digamos que hay dos tablas, una tabla CONSUMIDOR que incluye todos los datos de los consumidores, y otra que es la tabla de ORDENES. La intención es que todas las órdenes estén asociadas a la información del consumidor y que viven en su propia tabla. Para lograr esto debemos colocar una clave foránea en la tabla ORDENES con relación a la llave primaria de la tabla CONSUMIDOR.

La clave foránea identifica una columna(s) en una TABLA REFERENCIANTE a una columna(s) en la TABLA REFERENCIADA.

Definiendo claves foráneas[editar]

Las claves foráneas son definidas bajo el estándar SQL a través de la restricción FOREIGN KEY. La sintaxis para agregar tal restricción a una tabla existente es definida en SQL:2003 según se muestra debajo. Si se omite la lista de columnas en la cláusula REFERENCES implica que la clave foránea tendrá que referenciar o relacionarse con la clave primaria de la tabla referenciada. (y,j,r,l)

ALTER TABLE <nombre tabla> 
   ADD [ CONSTRAINT <nombre restricción> ] 
      FOREIGN KEY ( <expresión columna> [, <expresión columna>]... )
      REFERENCES <nombre tabla> [ ( <expresión columna> [, <expresión columna>]... ) ]
      [ ON UPDATE <acción> ]
      [ ON DELETE <acción> ];

Acciones referenciales[editar]

Debido a que el sistema de gestión de base de datos hace cumplir las restricciones de referencia, se debe garantizar la integridad de los datos si las filas de la tabla maestra se van a eliminar (o van a ser actualizadas). Si todavía existen filas dependientes en tablas referendo, esas referencias tienen que ser consideradas. SQL:2003 especifica 5 acciones referenciales diferentes que se ejecutarán en estos casos:

CASCADE[editar]

Cada vez que se eliminan o se actualizan las filas de la tabla maestra, se eliminarán o actualizarán las respectivas filas de la tabla hija. Esto se conoce eliminación o actualización en cascada.

RESTRICT[editar]

El valor de una columna de la tabla maestra no puede ser actualizado o borrado cuando existe una fila en una tabla hija que hace referencia al valor de la columna de la tabla maestra.

Del mismo modo, una fila no se puede eliminar, siempre que haya una referencia a la misma a partir de una tabla hija.

NO ACTION[editar]

NO ACTION y RESTRICT son muy parecidos. La principal diferencia entre el NO ACTION y RESTRICT es que NO ACTION realiza la comprobación de integridad referencial después de tratar de modificar la tabla mientras que RESTRICT hace la comprobación antes de intentar ejecutar la sentencia UPDATE o DELETE. Ambas acciones referenciales actúan de la misma forma si la comprobación de integridad referencial falla: la sentencia UPDATE o DELETE dará lugar a un error.

SET DEFAULT, SET NULL[editar]

En general, la acción tomada por el DBMS para SET NULL o SET DEFAULT es el mismo para ambos ON DELETE u ON UPDATE: El valor de la referencia afectada se cambia a NULL para SET NULL, y con el valor predeterminado especificado por SET DEFAULT .