Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Insertar en dos tablas

Estas en el tema de Insertar en dos tablas en el foro de Mysql en Foros del Web. Hola buenas tardes. Tengo dos tablas con una relacion de 1: 1, las cuales son: cliente y entidad, la relacion es de cliente a entidad ...
  #1 (permalink)  
Antiguo 21/11/2014, 16:42
Avatar de zerokull  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 14 años, 4 meses
Puntos: 1
Insertar en dos tablas

Hola buenas tardes.
Tengo dos tablas con una relacion de 1: 1, las cuales son:
cliente y entidad, la relacion es de cliente a entidad
Código MySQL:
Ver original
  1. CREATE TABLE `clientes` (
  2.   `idCliente` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Lave primaria',
  3.   `nombreCompleto` varchar(100) DEFAULT NULL COMMENT 'Nombre y apellidos del clientes',
  4.   `idEntidad` int(11) NOT NULL COMMENT 'Llave foranea de la tabla de entidad',
  5.   PRIMARY KEY (`idCliente`),
  6.   KEY `idEntidad` (`idEntidad`),
  7.   CONSTRAINT `FK_clientes_entidad` FOREIGN KEY (`idEntidad`) REFERENCES `entidad` (`idEntidad`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='Tabla de clientes';
  9.  
  10. CREATE TABLE `entidad` (
  11.   `idEntidad` int(11) NOT NULL AUTO_INCREMENT,
  12.   `domicilio` varchar(150) DEFAULT NULL,
  13.   `idCodigoPostal` int(11) NOT NULL,
  14.   `telefono` varchar(15) DEFAULT NULL,
  15.   `email` varchar(50) DEFAULT NULL,
  16.   `mobil` varchar(20) DEFAULT NULL,
  17.   PRIMARY KEY (`idEntidad`),
  18.   KEY `idCodigoPostal` (`idCodigoPostal`),
  19.   CONSTRAINT `FK_entidad_CodigoPostal` FOREIGN KEY (`idCodigoPostal`) REFERENCES `codigopostal` (`idCodigoPostal`)

Mi problema erradica al momento de insertar los datos. Como le puede hacer para insertar un cliente y afectar la tabla de entidad, sabiendo que entidad esta relacionada con el cliente.

Espero me hayan entendido.

Gracias y saludos
  #2 (permalink)  
Antiguo 21/11/2014, 18:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Insertar en dos tablas

No existen los INSERT automagicos.
Si tienes dos tablas, son dos INSERT. Uno por tabla. Eso es inevitable porque no puedes enviar en un INSERT a una tabla datos que no le pertenecen, y por la relación que has creado deberías pasarle a "Entidad", el nombre y apellido del usuario... y no tiene cómo recibirlo porque ese atributo no pertenece a su estructura.

Más allá de eso, a mi entender estás definiendo mal tu modelo por varia causas.
- ¿El usuario pertenece a la entidad, o los datos de esa "entidad" son propios del usuario?
Para que se entienda, en una relación 1:1 o 1:N, la FK va en la tabla que conceptualmente depende de la otra. En tu esquema creas primero una instancia de datos como dirección, teléfono, etc, sin que necesariamente exista alguien a quien pertenezcan.
¿Te parece lógico eso?
Para mi es manifiesto que esos datos pertenecen al usuario, y por tanto primero existe el usuario y luego sus datos, por lo que entidad debería tener la FK de Usuario, y Usuario no tener ninguna FK

- Estás integrando en un mismo atributo nombre y apellido. Eso es un error de diseño, porque luego no podrás separar las partes del nombre cuando quieras hacer consultas por apellido o por nombre.
Los atributos de ese tipo se ponen por separado: un campo para Nombre y otro para Apellido.

- En domicilio pareces estar poniendo todo: calle, numero, piso, departamento, ciudad, provincia, país...
Por lo mismo de antes, ¿te parece razonable?
La verdad, no. Cada atributo debe tener un único dominio, y en tu caso hay al menos cinco para ese solo campo...

- Estás definiendo una dependencia de cumplimiento imposible...
Dos entidades que se relacionan entre sí, no pueden tener cada una la FK de la otra, porque no podrías insertar nada.
En pocas palabras, en ese esquema, para poder insertar una entidad debería existir previamente el usuario, de lo contrario no podrías agregar el registro. Pero a su vez has definido que el usuario dependa de la entidad, es decir que debe insertarse el registro en entidad para poder meter el de usuario.
Obviamente eso es una dependencia imposible de cumplir.
Se denominan "dependencias circulares" y son uno de los peores errores de diseño que pueden hacerse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 21/11/2014 a las 19:33
  #3 (permalink)  
Antiguo 23/11/2014, 08:12
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 9 años, 5 meses
Puntos: 2
Respuesta: Insertar en dos tablas

tenia que reiniciar wamp server para que me muestre las tablas ( estan cargando y no muestra nada)

Código SQL:
Ver original
  1. DROP DATABASE persona;CREATE DATABASE persona;USE persona;
  2. CREATE TABLE nombre(
  3. idN INT PRIMARY KEY AUTO_INCREMENT,
  4. n VARCHAR(30));
  5. CREATE TABLE nombre2(n2 VARCHAR(30));
  6.  
  7.  
  8.  
  9. delimiter &
  10. CREATE TRIGGER copiarNombre
  11. after
  12. INSERT ON nombre
  13. FOR each ROW
  14. BEGIN
  15. DECLARE obtener_codigo INT;
  16. DECLARE obtener_nombre VARCHAR(30);
  17. SET obtener_codigo = (SELECT idN FROM nombre ORDER BY idN DESC LIMIT 1);
  18. SET obtener_nombre = (SELECT n FROM nombre WHERE idN = obtener_codigo);
  19. INSERT INTO nombre2 VALUES(obtener_nombre);
  20. END &
solucione el error reiniciando wamp pero si instalas mysql community (+ de 300 mb) quizá se solucione ....

Última edición por gnzsoloyo; 23/11/2014 a las 09:28
  #4 (permalink)  
Antiguo 23/11/2014, 09:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Insertar en dos tablas

NO USES CARACTERES RESERVADOS de SQL para el DELIMITER... En especial signos como "&".
Te generarán problemas en algún momento.

Por algo el manual usa un doble $, porque el signo "$" no se usa para otras cosas...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/11/2014, 16:03
Avatar de solmedina87  
Fecha de Ingreso: noviembre-2014
Mensajes: 68
Antigüedad: 9 años, 5 meses
Puntos: 4
Respuesta: Insertar en dos tablas

Como en la tabla clientes tenés que guardar un dato de la tabla entidad, primero hacé el insert en la tabla entidad y seguidamente hacé el insert en la tabla cliente.

Sería algo asi:

Código SQL:
Ver original
  1. INSERT INTO entidad (domicili no, idCodigoPostal, ... )
  2. VALUES ($domicilio, $idCodigoPostal, ...);
  3.  
  4. INSERT INTO clientes (nombrecompleto, idEntidad, ... )
  5. VALUES ($nombre, $idEntidad);

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

Última edición por gnzsoloyo; 24/11/2014 a las 16:55
  #6 (permalink)  
Antiguo 25/11/2014, 12:32
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 9 años, 5 meses
Puntos: 2
Respuesta: Insertar en dos tablas

que quieres afectar en entidad
no puedes insertar
foreign key y luego crear primary key
cliente entidad

Etiquetas: key, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:27.