SQL
Llaves extranjeras
Buscar..
Creando una tabla con una clave externa
En este ejemplo tenemos una tabla existente, SuperHeros
.
Esta tabla contiene un ID
clave principal.
Agregaremos una nueva tabla para almacenar los poderes de cada superhéroe:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
La columna HeroId
es una clave externa a la tabla SuperHeros
.
Claves foráneas explicadas
Las restricciones de claves externas garantizan la integridad de los datos, al imponer que los valores en una tabla deben coincidir con los valores en otra tabla.
Un ejemplo de dónde se requiere una clave extranjera es: En una universidad, un curso debe pertenecer a un departamento. El código para este escenario es:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Insertar valores con la siguiente declaración:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
La siguiente tabla contendrá la información de los temas ofrecidos por la rama de informática:
CREATE TABLE Programming_Courses (
Dept_Code CHAR(5),
Prg_Code CHAR(9) PRIMARY KEY,
Prg_Name VARCHAR (50) UNIQUE,
FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);
(El tipo de datos de la clave externa debe coincidir con el tipo de datos de la clave de referencia).
La restricción de clave externa en la columna Dept_Code
solo permite valores si ya existen en la tabla a la que se hace referencia, Department
. Esto significa que si intenta insertar los siguientes valores:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
la base de datos generará un error de violación de clave externa, porque CS300
no existe en la tabla de Department
. Pero cuando intentas un valor clave que existe:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
entonces la base de datos permite estos valores.
Algunos consejos para usar llaves extranjeras
- Una clave externa debe hacer referencia a una clave ÚNICA (o PRIMARIA) en la tabla principal.
- La introducción de un valor NULL en una columna de clave externa no genera un error.
- Las restricciones de clave externa pueden hacer referencia a tablas dentro de la misma base de datos.
- Las restricciones de clave externa pueden referirse a otra columna en la misma tabla (referencia propia).