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 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.
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 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…
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.
Paso 3) En 'Relaciones de clave externa', haga clic en 'Agregar'.
Paso 4) En 'Especificación de tablas y columnas', haga clic en el icono '…'.
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.
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.
Paso 7) Haga clic en Agregar.
Paso 8) Asigne el nombre 'Course_Strength' a la tabla y haga clic en Aceptar.
Resultado: Hemos establecido una relación padre-hijo entre 'Curso' y 'Fortaleza_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 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.
Resultado: Hemos establecido una relación padre-hijo entre 'Curso' 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;
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');
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.

















