Doble relación entre dos tablas MySQL

publicado por: Anonymous

Tengo las dos siguientes tablas:

USUARIO
id_usuario
nombre
apellidos
id_cargo

CARGO
id_cargo
nombre
creado_por

Donde “id_cargo” es FK de la tabla “Cargo” y “creado_por” es FK de la tabla “Usuario”. ¿Es posible realizar esta doble relación, puesto que son condiciones diferentes?

solución

Ten cuidado con el diseno de tu base datos ya que estas haciendo una referencia circular en tu tablas lo que dara una complejidad mayor a tu base datos.

Con respecto a tu pregunta se puede? claro que se puede siempre y cuando almenos un campo que va hacer foreign key permita valores nulos.

create table usuario(id integer primary key auto_increment,
                     nombre varchar(15) not null,
                     apellidos varchar(30) not null,
                     id_cargo integer);


create table cargo(id integer primary key auto_increment,
             nombre varchar(15) unique not null,
             id_usuario integer,
             foreign key(id_usuario) references usuario(id));


alter table usuario add foreign key(id_cargo) references cargo(id); 

Para llenar las tablas tendras que dejar temporalmente un campo que sea foreign key vacio de manera temporal y despues tendras que actualizarlo con el valor adecuado.

Ejemplo

insert into usuario(nombre,apellidos,id_cargo) values ('jose','perez', NULL);
insert into cargo(nombre,id_usuario) values ('director',1);


SET foreign_key_checks = 0;
update  usuario set id_cargo = 1 where id = 1;
SET foreign_key_checks = 1;
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *