En este post de base de datos en MySQL te mostraré cómo crear una tabla con relaciones, es decir, un ejemplo de uso para que puedas guiarte. Simplemente vamos a relacionar dos tablas usando foreign key y primary key.
Vamos a relacionar las tablas en el momento de la creación de las mismas.
Sintaxis
Si solo vienes por la sintaxis o un ejemplo simple para relacionar tablas, recuerda que en la principal debes declarar un id (puede ser autoincrementable) que sea la primary key:
CREATE TABLE tabla(
id bigint unsigned not null primary key auto_increment,
otro_campo varchar(255) not null
);
Presta atención al tipo de dato. En este caso es un bigint unsigned
. Ahora en la otra tabla haces dos cosas; declaras el id de la tabla a la que te refieres, y luego usas foreign key
para indicar la relación:
CREATE TABLE otra_tabla(
id bigint unsigned not null primary key auto_increment,
un_campo varchar(255) not null,
id_tabla_principal bigint unsigned not null,
foreign key (id_tabla_principal) references tabla(id) on delete cascade on update cascade
);
Si te fijas, estamos declarando también el id propio de la segunda tabla.
Lo que crea la relación es declarar el campo id_tabla_principal
que relacionará a la otra tabla, y la relación se indica usando foreign key
indicando que se va a usar la columna id_tabla_principal
la cual se refiere a la columna id
dentro de la tabla llamada tabla
.
De este modo puedes relacionar varias tablas entre sí, ya sea con un campo, dos, o más. En el ejemplo voy a relacionar más tablas.
Ejemplo
Lo que vamos a hacer para ejemplificar es relacionar 3 tablas. Las segundas no tienen relación entre sí, pero la tercera las va a tener una relación de ambas:
CREATE TABLE estudiantes(
id bigint unsigned not null primary key auto_increment,
nombre varchar(255) not null,
grupo varchar(255) not null
);
CREATE TABLE materias(
id bigint unsigned not null primary key auto_increment,
nombre varchar(255) not null
);
CREATE TABLE notas_estudiantes_materias(
id bigint unsigned not null primary key auto_increment,
id_estudiante bigint unsigned not null,
id_materia bigint unsigned not null,
puntaje decimal(9,2) not null,
foreign key (id_estudiante) references estudiantes(id) on delete cascade on update cascade,
foreign key (id_materia) references materias(id) on delete cascade on update cascade
);
En este caso es para relacionar estudiantes, notas y materias. Es un ejemplo sencillo que convertido a diagrama se ve así: