Clave foránea de SQL Server: Cómo crearla con un ejemplo

⚡ Resumen inteligente

En SQL Server, una clave externa garantiza la integridad referencial al vincular una tabla secundaria con una tabla principal. Cada valor de clave externa debe existir previamente en la clave primaria de la tabla principal a la que hace referencia.

  • 🔗 ¿Qué es una clave foránea? Una clave externa vincula una tabla hija con una tabla padre y garantiza la integridad referencial entre ellas.
  • 👪 Padre e hijo: La tabla a la que se hace referencia es la tabla principal; la tabla que contiene la clave externa es la tabla secundaria, que apunta a la clave primaria de la tabla principal.
  • 🖱️ Dos métodos de creación: Las relaciones de SQL Server Management Studio y la cláusula T-SQL CREATE TABLE … FOREIGN KEY … REFERENCES definen una clave externa.
  • Agregar a una tabla existente: ALTER TABLE … ADD CONSTRAINT … FOREIGN KEY agrega la relación a una tabla que ya existe.
  • 🔄 Acciones referenciales: Las cláusulas ON DELETE y ON UPDATE controlan las filas secundarias sin ACCIÓN, CASCADA, ESTABLECER NULO o ESTABLECER PREDETERMINADO.
  • Integrity comprobar: Se rechaza la inserción de una fila hija cuya clave no tiene una fila padre coincidente.ping Los datos son consistentes.

Clave foránea en SQL Server: Cómo crearla en SQL Server con un ejemplo

¿Qué es una LLAVE EXTRANJERA?

Una clave foránea proporciona una forma de garantizar la integridad referencial dentro de SQL ServerEn pocas palabras, una clave foránea garantiza que los valores de una tabla deben estar presentes en otra tabla.

Reglas para LLAVE EXTRANJERA

  • Se permite NULL en una clave externa SQL.
  • La tabla a la que se hace referencia se denomina tabla principal.
  • La tabla que contiene la clave foránea se denomina tabla hija.
  • La clave foránea en la tabla hija hace referencia a la clave principal en la tabla principal.
  • Esta relación paterno-filial refuerza la regla conocida como “integridad referencial”.

El siguiente diagrama resume todos los puntos anteriores relativos a la clave externa.

Diagrama de una clave foránea que vincula una tabla hija con la clave primaria de la tabla padre.

Cómo crear una CLAVE EXTRANJERA en SQL

En SQL Server, puedes crear una clave externa de dos maneras:

SQL Server Management Studio

Tabla principal: Supongamos que tenemos una tabla principal existente llamada 'Curso'. Course_ID y Course_name son dos columnas, con Course_Id como clave principal.

Tabla principal Curso con clave primaria Course_Id y columnas Course_name

Tabla hija: Necesitamos crear la segunda tabla como una tabla hija. Sus dos columnas serán 'Course_ID' y 'Course_Strength'. Sin embargo, 'Course_ID' será la clave externa.

Paso 1) Haga clic con el botón derecho en Tablas > Nuevo > Tabla…

Haga clic con el botón derecho en Tablas, luego en Nuevo y, a continuación, en Tabla en SQL Server Management Studio.

Paso 2) Introduzca dos nombres de columna: 'ID_Curso' y 'Nivel_Resistencia_Curso'. Haga clic con el botón derecho en la columna 'ID_Curso' y, a continuación, haga clic en Relación.

Nuevas columnas de tabla secundarias Course_ID y Course_Strength con el menú Relación

Paso 3) En 'Relaciones de clave externa', haga clic en 'Agregar'.

Diálogo de relaciones de clave externa con el botón Agregar

Paso 4) En 'Especificación de tablas y columnas', haga clic en el icono '…'.

Campo de especificación de tablas y columnas con el botón de puntos suspensivos

Paso 5) Seleccione la 'Tabla de clave primaria' como 'CURSO' y la nueva tabla que se está creando como 'Tabla de clave externa' en el menú desplegable.

Seleccionar COURSE como tabla de clave principal en el cuadro de diálogo de relación.

Paso 6) Para la 'Tabla de clave primaria', seleccione la columna 'Course_Id' como la columna de la tabla de clave primaria.

Para la tabla de clave externa, seleccione la columna 'Course_Id' como columna de la tabla de clave externa. Haga clic en Aceptar.

Mapearping Course_Id como columna de clave primaria y de clave externa.

Paso 7) Haga clic en Agregar.

Haga clic en Agregar para confirmar la relación de clave externa.

Paso 8) Asigne el nombre 'Course_Strength' a la tabla y haga clic en Aceptar.

Nombrar la tabla secundaria Course_Strength y hacer clic en Aceptar

Resultado: Hemos establecido una relación padre-hijo entre 'Curso' y 'Fortaleza_del_Curso'.

Relación paterno-filial establecida entre Curso y Fuerza_del_Curso

T-SQL: Creación de una tabla padre-hijo mediante T-SQL

Tabla principal: Consideremos que ya tenemos una tabla principal con el nombre 'Curso'. Course_ID y Course_name son dos columnas, con Course_Id como clave principal.

Tabla principal existente llamada Course con Course_Id como clave primaria.

Tabla hija: Debemos crear una segunda tabla como tabla hija con el nombre 'Course_Strength_TSQL'. Sus dos columnas serán 'Course_ID' y 'Course_Strength'. Sin embargo, 'Course_ID' será la clave externa.

A continuación se muestra la sintaxis para crear una mesa con una TECLA EXTRANJERA.

Sintaxis:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

Aquí hay una descripción de los parámetros anteriores:

  • childTable es el nombre de la tabla que se va a crear.
  • column_1, column_2 son las columnas que se agregarán a la tabla.
  • fkey_name es el nombre de la restricción de clave externa que se va a crear.
  • child_column1, child_column2 … child_column_n son las columnas de la tabla hija que hacen referencia a la clave primaria en parentTable.
  • parentTable es el nombre de la tabla principal cuya clave se referencia en la tabla secundaria.
  • parent_column1, parent_column2 … parent_column_n son las columnas que componen la clave primaria de la tabla principal.
  • ON DELETE es un parámetro opcional que especifica qué sucede con los datos secundarios después de que se eliminan los datos principales. Los valores posibles son NO ACTION, SET NULL, CASCADE o SET DEFAULT.
  • ON UPDATE es un parámetro opcional que especifica qué sucede con los datos secundarios después de que se actualizan los datos principales. Los valores posibles son NO ACTION, SET NULL, CASCADE o SET DEFAULT.
  • NO ACTION significa que no ocurre nada con los datos secundarios después de que se actualicen o eliminen los datos principales.
  • CASCADE significa que los datos secundarios se eliminan o actualizan después de que los datos principales se hayan eliminado o actualizado.
  • SET NULL significa que los datos secundarios se establecen en nulo después de que los datos principales se actualizan o eliminan.
  • ESTABLECER VALOR PREDETERMINADO significa que los datos secundarios se restablecen a su valor predeterminado después de una actualización o eliminación de los datos principales.

Veamos un ejemplo de clave foránea que crea una tabla con una columna como CLAVE FORÁNEA, utilizando una tipo de datos para cada columna.

Ejemplo de clave externa en SQL

consulta:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Paso 1) Ejecute la consulta haciendo clic en Ejecutar.

Ejecutar la consulta CREATE TABLE que define la clave externa Course_ID.

Resultado: Hemos establecido una relación padre-hijo entre 'Curso' y 'Course_Strength_TSQL'.

Se ha creado una relación padre-hijo entre Course y Course_Strength_TSQL.

Usando ALTER TABLA

Ahora aprenderemos cómo agregar una clave externa en SQL Server a una tabla que ya existe utilizando la instrucción ALTER TABLE. Usaremos la sintaxis que se muestra a continuación:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Aquí hay una descripción de los parámetros utilizados anteriormente:

  • childTable es el nombre de la tabla que se va a crear.
  • column_1, column_2 son las columnas que se agregarán a la tabla.
  • fkey_name es el nombre de la restricción de clave externa que se va a crear.
  • child_column1, child_column2 … child_column_n son las columnas de la tabla hija que hacen referencia a la clave primaria en parentTable.
  • parentTable es el nombre de la tabla principal cuya clave se referencia en la tabla secundaria.
  • parent_column1, parent_column2 … parent_column_n son las columnas que componen la clave primaria de la tabla principal.

Ejemplo de ALTER TABLE para agregar clave externa:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Hemos creado una clave externa llamada fkey_student_admission en la tabla de departamentos. Esta clave externa hace referencia a la columna de admisión de la tabla de estudiantes.

Ejemplo de consulta CLAVE EXTRANJERA

Primero, veamos los datos de nuestra tabla principal, COURSE.

consulta:

SELECT * from COURSE;

SELECCIONAR resultado que muestra la tabla principal COURSE datos

Ahora vamos a insertar algunas filas en la tabla secundaria 'Course_Strength_TSQL'. Intentaremos insertar dos tipos de filas:

  • El primer tipo, para el cual Course_Id en la tabla hija existe en Course_Id de la tabla padre, es decir, Course_Id = 1 y 2.
  • El segundo tipo, para el cual Course_Id en la tabla hija no existe en Course_Id de la tabla padre, es decir, Course_Id = 5.

consulta:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Insertando filas secundarias, incluyendo Course_ID 5 que no tiene un padre coincidente

Resultado: Ejecutemos la consulta juntos para ver nuestras tablas padre e hija.

Las filas con Course_ID 1 y 2 existen en la tabla Course_Strength. Sin embargo, Course_ID 5 es una excepción, ya que no tiene una fila correspondiente en la tabla principal.

Se compararon las tablas padre e hijo; Course_ID 5 viola la integridad referencial.

Preguntas Frecuentes

Una clave primaria identifica de forma única cada fila dentro de su propia tabla y no puede ser NULL. Una clave foránea hace referencia a esa clave primaria de otra tabla para garantizar la integridad referencial. clave primaria versus clave foránea La comparación explica cada distinción.

Sí. Una clave externa puede hacer referencia a una clave primaria o a cualquier columna de la tabla principal que tenga una restricción UNIQUE. La columna referenciada debe contener valores únicos, de modo que cada fila secundaria coincida exactamente con una fila principal.

ON DELETE CASCADE elimina automáticamente las filas secundarias coincidentes cuando se elimina su fila principal, manteniendoping Las tablas son consistentes. Las alternativas son SET NULL, que borra la clave foránea hija, y NO ACTION, que bloquea la eliminación.

Sí. Una clave externa autorreferencial apunta a una clave primaria en la misma tabla, lo que modela jerarquías como la de una fila de empleado que hace referencia a su gerente. Para las autorreferencias, SQL Server recomienda usar ON DELETE NO ACTION para evitar ciclos en cascada.

Sí, a menos que la columna esté declarada como NOT NULL. Una clave externa NULL significa que la fila secundaria aún no está vinculada a ninguna fila principal, y SQL Server omite la comprobación de referencia para ese valor NULL.

Ejecute ALTER TABLE child_table DROP CONSTRAINT fkey_name. Debe proporcionar el nombre de la restricción, que puede encontrar en sys.foreign_keys. Eliminarping La clave externa elimina la relación, pero deja ambas tablas y sus datos sin cambios.

Sí. Copiloto de GitHub Puede escribir restricciones de clave externa dentro de las sentencias CREATE TABLE o ALTER TABLE a partir de una solicitud en lenguaje natural y sugerir la tabla principal y la columna referenciada. Siempre revise las claves, las acciones referenciales y los tipos de datos antes de ejecutar el script.

Las herramientas de IA y aprendizaje automático analizan datos de muestra y patrones de consulta para sugerir qué columnas deberían convertirse en claves foráneas, detectar relaciones faltantes o huérfanas y recomendar acciones ON DELETE adecuadas. El desarrollador revisa cada sugerencia antes de aplicarla.

Resumir este post con: