Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: neveldine en 25 Noviembre 2015, 14:01 PM

Título: Problema con relación 1:1
Publicado por: neveldine en 25 Noviembre 2015, 14:01 PM
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
Título: Re: Problema con relación 1:1
Publicado por: ivancea96 en 25 Noviembre 2015, 16:28 PM
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.
Título: Re: Problema con relación 1:1
Publicado por: neveldine en 1 Diciembre 2015, 12:47 PM
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:

(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
Título: Re: Problema con relación 1:1
Publicado por: d91 en 12 Diciembre 2015, 15:38 PM
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
Título: Re: Problema con relación 1:1
Publicado por: Hadess_inf en 5 Enero 2016, 22:59 PM
¿Realizas tu insercion dentro de un bloque de transacciòn?

Begin
...
commit;