Sv Community El Salvador

Soporte y Tecnología => Programación => Base de Datos => Topic started by: kerberoz on November 15, 2011, 03:19:07 pm

Title: Doble relacion entre dos tablas, MySQL
Post by: kerberoz on November 15, 2011, 03:19:07 pm
Es posible crear una relacion doble entre dos tablas, como en la imagen.

(http://img823.imageshack.us/img823/3961/doblerelacion.png)

Sera posible este tipo de relacion?? lo que necesito basicamente es asignarle a un articulo una unidad de medida para el uso y otra unidad de medida para la compra,  las unidades las guardo en una tabla aparte que se llama unidad y en la tabla secundaria (Articulo) tengo dos claves foraneas que proceden de la misma tabla (Unidad), pero quiero guardar valores diferentes en cada uno de ellas.

De hecho la diseñe en MySQL Workbench y el diseñador todo perfecto, pero a la hora de insertar datos en las tablas extrañamente las claves foraneas en la tabla secundaria se vuelven cero  x_x, pero no al instante sino que de repente, despues de estar haciendo muchas pruebas.
Title: Re: Doble relacion entre dos tablas, MySQL
Post by: hkadejo on November 15, 2011, 03:25:48 pm
Es posible crear una relacion doble entre dos tablas, como en la imagen.

(http://img823.imageshack.us/img823/3961/doblerelacion.png)

Sera posible este tipo de relacion?? lo que necesito basicamente es asignarle a un articulo una unidad de medida para el uso y otra unidad de medida para la compra, y las unidades las guardo en una tabla aparte que se llama unidad y en la tabla secundaria (Articulo) tengo dos claves foraneas que proceden de la misma tabla (Unidad), pero quiero guardar valores diferentes en cada uno de ellas.

De hecho la diseñe en MySQL Workbench y el diseñador todo perfecto, pero a la hora de insertar datos en las tablas extrañamente las claves foraneas en la tabla secundaria se vuelven cero  x_x, pero no al instante sino que de repente, despues de estar haciendo muchas pruebas.

Si puedes hacer eso.
Son llaves foraneas distintas, solo que apuntan a la misma tabla...yo recuerdo haber hecho eso una vez y no me dio problema alguno.

Con respecto a que se te vuelve valores cero, revisa que tu aplicacion no te este actualizando registros sin que te des cuenta...porque ese error esta raro.

Title: Re: Doble relacion entre dos tablas, MySQL
Post by: Camus de Acuario on November 15, 2011, 03:36:13 pm
Como dijo Khadejo si se puede, y es muy válido.....en este contexto, donde sabes que cada artículo podrá contar con solo dos tipos de unidades, pero que pasa si tendras una unidad nueva? agregaras otra columna?, y si hay una cuarta? y una quinta?

Para esos casos, es muy recomendable crear una tabla de link. Donde enlaces el articulo con x tipo de unidades. Por si tu relacion es 1 a n o  si es n a n.

Podria ser
Tabla: articulo
Primary key: articulo_id

tabla: unidad
primary key: unidad_id

tabla: unidad_x_articulo
foreign key 1: articulo_id
foregin key 2: unidad_id

Asi te cubris la espalda si dentro de unos dias, meses, años, lustros, tu arquitectura debe ser capaz de que cada articulo cuente con varias unidades.

Si sabes que de aca al final de los tiempos, siempre seran 2 unidades, dejalo de la forma que hiciste.

Ahora con los updates, se me hace dos cosas:
-Estas haciendo un update global a esas dos columnas, sin importar filtros
-2 estas haciendo update o insert a esa columna y has creado mal la llave foranea, o no estas trabajando con tratamiento de errores, y al momento de hacer updates o inserts, no encuentra el articulo_id de tu tabla articulo y en lugar de eso te coloca un 0.
Title: Re: Doble relacion entre dos tablas, MySQL
Post by: kerberoz on November 15, 2011, 03:52:37 pm
Como dijo Khadejo si se puede, y es muy válido.....en este contexto, donde sabes que cada artículo podrá contar con solo dos tipos de unidades, pero que pasa si tendras una unidad nueva? agregaras otra columna?, y si hay una cuarta? y una quinta?

Creo que si, va ha llegar el 2012 y continuaran siendo solo esas dos unidades de medida  :D :D  Pero ya en serio si he aplicado eso que mencionas en los casos necesarios.

Pero es bastante raro, tambien lo unico adicional que recuerdo haber hecho es actualizar las claves foraneas de otra relacion, pero que esta involucrada la tabla articulo tambien y le puse DELETE y  UPDATE en CASCADE, de ahi solo pruebas  x_x

Crei que podria ser esa relacion extraña, pero veo que segun lo que dicen, es posible crearla.
Title: Re: Doble relacion entre dos tablas, MySQL
Post by: tekun on November 15, 2011, 05:04:29 pm
si vos, si se puede.....  de echo ya lo hiciste....

las relaciones sólo son para validar la información, siendo la validación, el impedir ingresar valores inexistentes en la tabla maestra....

si la unidad que intentas ingresar no existe ne la tabla "unidades" generá un error de integridad de datos, nada más....

de ahí lo del cambio de los datos, más parece que estas ejecutando scripts de formá inconsiente... es imposible que se "cambien" valores sin intervención del usuario...