Problema con relación 1:1

Iniciado por neveldine, 25 Noviembre 2015, 14:01 PM

0 Miembros y 1 Visitante están viendo este tema.

neveldine

Tengo esta base de datos:

Código (sql) [Seleccionar]

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

ivancea96

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.

neveldine

#2
Hola,

He seguido tu consejo y he hecho lo siguiente:

Código (sql) [Seleccionar]


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:



¿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

d91

#3
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
Código (sql) [Seleccionar]

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

Hadess_inf

¿Realizas tu insercion dentro de un bloque de transacciòn?

Begin
...
commit;