Clave externa ( eng. clave externa ): el concepto de la teoría de las bases de datos relacionales , relacionado con las restricciones sobre la integridad de la base de datos .
Informalmente hablando, una clave foránea es un subconjunto de atributos de alguna variable de relación R 2 cuyos valores deben coincidir con los valores de alguna clave potencial de alguna variable de relación R 1 .
Definicion formal. Sean R 1 y R 2 dos variables relacionales, no necesariamente distintas. Una clave foránea FK en R 2 es un subconjunto de los atributos de la variable R 2 tal que se cumplan los siguientes requisitos:
Además, para esta clave foránea particular FK → CK , la relación R 1 que contiene la clave potencial se llama relación principal , objetivo o padre , y la relación R 2 que contiene la clave foránea se llama relación subordinada o secundaria .
El mantenimiento de claves foráneas también se denomina mantenimiento de la integridad referencial . Los DBMS relacionales admiten el control automático de la integridad referencial.
Supongamos que hay dos tablas en la base de datos: City (ciudades) y Street (calles), que se definen de la siguiente manera:
CREAR TABLA Ciudad ( ID INTEGER NOT NULL PRIMARY KEY , name CHAR ( 40 ) ) CREAR TABLA Calle ( id INTEGER NOT NULL PRIMARY KEY , name CHAR ( 40 ), id_city INTEGER NOT NULL FOREIGN KEY REFERENCES Ciudad ( id ) )El contenido de estas tablas es el siguiente:
CIUDAD
IDENTIFICACIÓN | NOMBRE |
---|---|
una | Moscú |
2 | San Petersburgo |
3 | Vladivostok |
CALLE
IDENTIFICACIÓN | NOMBRE | ID_CIUDAD |
---|---|---|
181 | Malaya Bronnaya | una |
182 | Bulevar Tverskoy | una |
183 | Avenida Nevski | 2 |
184 | Pushkinskaya | 2 |
185 | Svetlánskaya | 3 |
186 | Pushkinskaya | 3 |
La tabla CALLE tiene un campo ID_CIUDAD, que es una clave externa y hace referencia a la tabla CIUDAD. El valor de este campo corresponde a la clave primaria en la tabla CITY para la ciudad donde se encuentra la calle. Así, Nevsky Prospekt tiene ID_CITY=2, que corresponde a San Petersburgo (ID=2 en la tabla CITY).
La tabla STREET contiene dos calles con el mismo nombre Pushkinskaya, que difieren en el valor del campo ID_CITY. Uno de ellos está ubicado en San Petersburgo (ID_CITY=2), el otro está en Vladivostok (ID_CITY=3).
Un intento de agregar la calle "Deribasovskaya" con ID_CITY=4 a la tabla STREET provocará un error de violación de integridad referencial, ya que no hay ninguna ciudad con ID=4 en la tabla CITY. Sin embargo, después de agregar la ciudad "Odessa" con ID=4 a la tabla CITY, volver a ingresar la calle "Deribasovskaya" con ID_CITY=4 tendrá éxito.
Al eliminar la ciudad de Vladivostok de la tabla CITY, el resultado depende de las propiedades de la clave externa:
Al cambiar el código de ciudad de San Petersburgo de 2 a 48 en la tabla CITY, el resultado depende de las propiedades de la clave externa:
Base de datos | |
---|---|
Conceptos | |
Objetos |
|
Llaves | |
sql |
|
Componentes |