Foro de elhacker.net

Programación => 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
  1. CREATE TABLE ehbd.Clientes (
  2. idClientes INT NOT NULL AUTO_INCREMENT ,
  3.    nombre VARCHAR(64) NOT NULL,
  4.    PRIMARY KEY (idClientes),
  5.    FOREIGN KEY (idUsuarios) REFERENCES ehbd.Usuarios(idUsuarios)
  6. ) engine=innodb;
  7.  
  8. CREATE TABLE ehbd.Usuarios (
  9. idUsuarios INT NOT NULL AUTO_INCREMENT ,
  10.    username VARCHAR(64) NOT NULL,
  11.    email VARCHAR(64) NOT NULL,
  12.    PRIMARY KEY(idUsuarios),
  13.    FOREIGN KEY(idClientes) REFERENCES ehbd.Clientes(idClientes)
  14. ) engine=innodb;
  15.  
  16.  

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
  1.  
  2. CREATE TABLE ehbd.Clientes (
  3. idClientes INT NOT NULL AUTO_INCREMENT ,
  4.    nombre VARCHAR(64) NOT NULL,
  5.    idUsuarios     INT NOT NULL,
  6.    PRIMARY KEY (idClientes)
  7. ) engine=innodb;
  8.  
  9. CREATE TABLE ehbd.Usuarios (
  10. idUsuarios INT NOT NULL AUTO_INCREMENT ,
  11.    username VARCHAR(64) NOT NULL,
  12.    email VARCHAR(64) NOT NULL,
  13.    idClientes INT NOT NULL,
  14.    PRIMARY KEY(idUsuarios),
  15.    FOREIGN KEY(idClientes) REFERENCES ehbd.Clientes(idClientes)
  16. ) engine=innodb;
  17.  
  18. ALTER TABLE ehbd.clientes
  19. ADD FOREIGN KEY (idUsuarios) REFERENCES ehbd.Usuarios(idUsuarios);
  20.  

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
  1. CREATE TABLE cliente_usuario(
  2.  idCliente INT,
  3.  idUsuario INT,
  4.  fecha  DATE
  5.   FOREIGN KEY (idUsuarios) REFERENCES Usuarios(idUsuarios)
  6.   FOREIGN KEY(idClientes) REFERENCES Clientes(idClientes
  7. )
  8.  

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;