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

Problema con una relacion en Mysql, ayuda por favor

Estas en el tema de Problema con una relacion en Mysql, ayuda por favor en el foro de Mysql en Foros del Web. Buenas. Estoy haciendo una aplicacion para llevar el control de un inventario pequeño, tengo una tabla para los proveedores, y una tabla para los tipos ...
  #1 (permalink)  
Antiguo 19/01/2010, 23:07
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 0
Problema con una relacion en Mysql, ayuda por favor

Buenas.

Estoy haciendo una aplicacion para llevar el control de un inventario pequeño, tengo una tabla para los proveedores, y una tabla para los tipos de productos que existen.

Mi problema radica en que cuando quiero ingresar un nuevo proveedor al sistema, este puede proveer mas de un tipo de producto pero en la practica no logro hacerlo, cree una FK en la tabla de proveedores para relacionarla con la tabla tipo productos pero aun asi no me funciona.

Asi va la tabla de proveedores:
Código:
CREATE TABLE `proveedor` (
  `id_proveedor` varchar(11) NOT NULL,
  `nombre_proveedor` text,
  `tipo_producto` varchar(12) DEFAULT NULL,
  `tlf_proveedor` text,
  `dir_proveedor` text,
  PRIMARY KEY (`id_proveedor`),
  KEY `FK_proveedor_referencia_tipoproductos` (`tipo_producto`),
  CONSTRAINT `FK_proveedor_referencia_tipoproductos` FOREIGN KEY (`tipo_producto`) REFERENCES `tipo_productos` (`id_tipo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Y asi va la tabla de tipo productos:
Código:
CREATE TABLE `tipo_productos` (
  `id_tipo` varchar(12) NOT NULL,
  `descripcion_tipo` text,
  PRIMARY KEY (`id_tipo`)
)
Y este es el error que me da cuando intento ingresar un nuevo proveedor en la tabla:
Código:
Cannot add or update a child row: a foreign key constraint fails (`hemodinamia`.`proveedor`, CONSTRAINT `FK_proveedor_referencia_tipoproductos` FOREIGN KEY (`tipo_producto`) REFERENCES `tipo_productos` (`id_tipo`))
Ayuda por favor :(
  #2 (permalink)  
Antiguo 20/01/2010, 02:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Problema con una relacion en Mysql, ayuda por favor

La FK te obliga a que el tipo de producto este previamente dado de alta en la tabla de tipos... si cuando das de alta un nuevo proveedor el tipo tambien és nuevo es normal que te diga que no puede....

Pero estas seguro de ese diseño, ¿solo tienes proveedores mono producto?

Lo normal es definir una relacion n:m puesto que cada proveedor es facil que tenga mas de un tipo de productos y que cada tipo de productos tenga mas de un proveedor... luego la estructura seria con tres tablas

Proveedores
idProveedor (PK)
...

tipo_productos
id_tipo (PK)
...

y una tabla relación que te permita el n:m (muchos a muchos)

RPrveeProd
idRel (PK)
idProveedor (FK)
id_tipo (FK)

donde a demas seria util definir un indice unico y compuesto sobre los dos id (idProveedor, id_tipo).


Piensalo pero creo que debe ir por ahí....

Quim
  #3 (permalink)  
Antiguo 20/01/2010, 09:46
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con una relacion en Mysql, ayuda por favor

Buenas y gracias de antemano por la respuesta.

La cuestion si va por ahi, normalmente antes de comenzar a agregar proveedores el usuario debe definir los tipos de producto que va a manejar el inventario y posteriormente es que podra agregar los proveedores.

Voy a hacer lo que me estas sugiriendo para ver como me va, gracias. :D
  #4 (permalink)  
Antiguo 20/01/2010, 09:59
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con una relacion en Mysql, ayuda por favor

Nevermind, ya esta resuelto el problema, gracias de nuevo Quim

Última edición por Agrus; 20/01/2010 a las 13:01 Razón: Problema re

Etiquetas: favor, relacion
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 00:14.