Clave externa

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 11 de diciembre de 2021; la verificación requiere 1 edición .

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:

  1. La variable de relación R 1 tiene una clave potencial CK tal que FK y CK coinciden hasta el cambio de nombre del atributo (es decir, al cambiar el nombre de algún subconjunto de atributos FK , se puede obtener un subconjunto de atributos FK ' tal que FK' y CK coincidan en nombre y en tipos de atributos).
  2. En cualquier momento dado, cada valor FK en el valor R 2 actual es idéntico al valor CK en alguna tupla en el valor R 1 actual . En otras palabras, en un momento dado, el conjunto de todos los valores FK en R 2 es un subconjunto (no estricto) de los valores CK en R 1 .

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.

Ejemplo

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:

  • Si se permite la eliminación por cadena para la clave foránea, las calles Svetlanskaya y Pushkinskaya con ID=3 se eliminarán junto con la eliminación de Vladivostok.
  • Si la eliminación de cadenas está deshabilitada para la clave externa, entonces la operación generará un error de violación de integridad referencial, ya que la tabla CALLE contendrá calles con el código ID_CIUDAD=3, que no está en la tabla CIUDAD.

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:

  • Si se permite que la clave externa cambie a lo largo de la cadena, junto con el cambio en el código de San Petersburgo, se cambiarán los valores de ID_CITY para las calles correspondientes.
  • Si no se permite modificar la clave foránea en una cadena, la operación provocará un error de violación de integridad referencial, ya que la tabla CALLE contendrá calles con código ID_CIUDAD=2, que no está en la tabla CIUDAD.

Literatura

  • Fecha CJ Introducción a los Sistemas de Base de Datos = Introducción a los Sistemas de Base de Datos. - 8ª edición. - M. : "Williams" , 2006. - 1328 p. — ISBN 0-321-19784-4 .