En este artículo, aprenderemos sobre las restricciones FOREIGN KEY y cómo definir una restricción FOREIGN KEY para construir la relación entre dos tablas.
En un Sistema de gestión de bases de datos relacionales (RDBMS), una CLAVE EXTERNA es un campo o grupo de campos que se utiliza para crear una relación entre dos tablas o unir las dos tablas.
- LA CLAVE EXTERNA también se conoce como clave de referencia en el RDBMS
- Usando restricciones FOREIGN KEY entre dos tablas, definimos una relación padre-hijo entre dos tablas.
- El campo define las restricciones PRIMARY KEY en una tabla conocida como tabla principal, mientras que el mismo campo define las restricciones FOREIGN KEY en otra tabla que se conoce como tabla secundaria.
- Solo puede haber una CLAVE PRIMARIA en la tabla, pero no hay un límite definido en la CLAVE EXTERNA. Podemos tener una o más de una LLAVE EXTRANJERA sobre la mesa.
- Podemos definir restricciones de FOREIGN KEY al crear la tabla o definir restricciones de FOREIGN KEY en la tabla ya existente.
Tomemos un ejemplo para entender y aprender acerca de las restricciones FOREIGN KEY.
Ejemplo:
Aquí, tenemos dos tablas, una es la tabla del Curso y la segunda es la tabla del Estudiante:
Los estudiantes seleccionan cursos. El siguiente ejemplo de restricciones FOREIGN KEY se define en un campo.
Mesa Número Uno:Mesa de Estudiantes
Student_Id | Nombre | Apellido | Email_Id | Ciudad |
101 | Kareena | Decir | [email protected] | Hyderabad |
102 | Anmol | Temani | [email protected] | Jalgaon |
103 | Harshal | Patel | [email protected] | Mumbai |
104 | Sakshi | Capucha | [email protected] | Puno |
105 | Seguro | Coli | [email protected] | Hyderabad |
Tabla número dos:Mesa del curso
Id_del_curso | Nombre_del_curso | Estudiante_Id |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | Nulo |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
En la tabla Student, el campo Student_Id es la CLAVE PRIMARIA y en la tabla Course, Student_Id es la CLAVE EXTERNA.
La FOREIGN KEY
La restricción evita que se inserten datos no válidos en la columna de clave externa porque tiene que ser uno de los valores contenidos en la tabla principal.
Definir restricciones FOREIGN KEY en CREATE TABLE
El siguiente ejemplo define una CLAVE EXTRANJERA en la tabla del Curso.
Primero, hemos creado la tabla Student con los siguientes campos:
CREATE TABLE Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50), City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));
El siguiente ejemplo muestra cómo definir las restricciones FOREIGN KEY en la otra tabla.
Curso de nombre de tabla:
CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));
En la tabla de cursos, no definimos ninguna CLAVE PRINCIPAL. Simplemente defina las restricciones FOREIGN KEY en Student_Id.
El siguiente ejemplo de restricciones de FOREIGN KEY se define en varios campos.
Supongamos que tenemos tres tablas, una es la tabla Paquete, la segunda es la tabla Datos y la tercera es la tabla Talk_time:
Tabla 1:Paquete:
Paquete_Id | ID_de_datos | Id. de tiempo de conversación |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
Tabla 2:Datos:
Id_de_datos | Límite_de_datos | Precio_de_datos |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
Tabla 3:Talk_Time:
Talk_Time_Id | Límite_de_tiempo_de_conversación | Talk_Time _Precio |
T1001 | 120 | 130 |
T1002 | 70 | 105 |
T1003 | 60 | 90 |
T1004 | 200 | 220 |
T1005 | 150 | 170 |
En la tabla Talk_Time, Talk_Time_Id es la CLAVE PRINCIPAL.
En la tabla de datos, Data_Id es la CLAVE PRINCIPAL.
Mientras que en la tabla de paquetes, Talk_Time_Id y Data_Id son las claves FOREIGN
Tabla número uno:Datos:
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
Tabla número dos:Talk_Time:
CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));
Tabla número tres:Paquete:
CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Data(Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk_Time_Id));
Restricciones FOREIGN KEY usando ALTER TABLE:
Supongamos que ya hemos creado la tabla y queremos definir las restricciones FOREIGN KEY en el campo. Usaremos la consulta ALTER TABLE para agregar restricciones FOREIGN KEY en tal caso.
La consulta de seguimiento se usa para agregar restricciones de CLAVE EXTERNA en el campo Student_Id.
ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);
ADD Keyword se usa después del nombre de la tabla para agregar las restricciones FOREIGN KEY a la tabla ya existente.
Restricción DROP FOREIGN KEY de la tabla
Utilice la siguiente consulta para eliminar la restricción FOREIGN KEY de la tabla.
ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;
La palabra clave Drop se utiliza para eliminar las restricciones de FOREIGN KEY del campo Student_Id.
Course_ibfk_1 es el nombre de restricción de clave externa.
Podemos tener valores nulos en el campo de restricciones FOREIGN KEY. Podemos tener valores duplicados en el campo de restricciones FOREIGN KEY.