Tengo esta base de datos:
CREATE TABLE ehbd.Clientes (
idClientes INT NOT NULL AUTO_INCREMENT ,
nombre VARCHAR(64) NOT NULL,
PRIMARY KEY (idClientes),
FOREIGN KEY (idUsuarios) REFERENCES ehbd.Usuarios(idUsuarios)
) engine=innodb;
create table ehbd.Usuarios (
idUsuarios int not null auto_increment ,
username varchar(64) not null,
email varchar(64) not null,
primary key(idUsuarios),
foreign key(idClientes) references ehbd.Clientes(idClientes)
) engine=innodb;
Necesito relacionar estas dos bases de datos con una relación 1:1. Esto me da error porque en la primera tabla defino una foreign key a una tabla Usuarios que todavía no existe.
¿Cómo podría hacer esto sin juntar las tablas?
Gracias anticipadas.
Un cordial saludo
Puedes añadir las claves foráneas después de haber creado las tablas (sin claves). Haces un ALTER TABLE, y un ADD FOREIGN KEY.
Hola,
He seguido tu consejo y he hecho lo siguiente:
create table ehbd.Clientes (
idClientes int not null auto_increment ,
nombre varchar(64) not null,
idUsuarios int not null,
primary key (idClientes)
) engine=innodb;
create table ehbd.Usuarios (
idUsuarios int not null auto_increment ,
username varchar(64) not null,
email varchar(64) not null,
idClientes int not null,
primary key(idUsuarios),
foreign key(idClientes) references ehbd.Clientes(idClientes)
) engine=innodb;
alter table ehbd.clientes
add foreign key (idUsuarios) references ehbd.Usuarios(idUsuarios);
El resultado de aplicar "Reverse Engineer" de Mysql Workbench es:
(http://i64.tinypic.com/n5sn5k.png)
¿Es esto una relación 1:1 bidireccional?
¿No debería tener unas fechas 1:1 ---- como sale en la imagen de la izquierda?
Un cordial saludo
solo por curiosidad, en tu base de datos cual es el rol del usuario, el enunciado tal vez seria: un usuario puede atender a muchos clientes y muchos clientes pueden ser atendidos por un mismo usuario, por lo que iria una tabla auxiliar cliente-usuario
create table cliente_usuario(
idCliente int,
idUsuario int,
fecha date
FOREIGN KEY (idUsuarios) REFERENCES Usuarios(idUsuarios)
FOREIGN KEY(idClientes) REFERENCES Clientes(idClientes
)
una relación 1:1 esta contenida por los campos en la misma tabla ej. un cliente tendrá un DNI, NIT, fecha_nacimiento
¿Realizas tu insercion dentro de un bloque de transacciòn?
Begin
...
commit;