Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/11/2014, 15:23
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Estructura de tablas óptima.

Hola asabervgz:

Voy a meter también mi cuchara en este asunto. Lamentablemente (o afortunadamente) no hay un "mejor modelo" o un "modelo ideal" de BD's para estas cuestiones... esto depende completamente de tus necesidades. Sin embargo, debes de tener cuidado con algunos puntos.

Hay que tener en claro qué es lo que quieres "guardar" o "administrar" con tu BD's. Tal como lo planteas, tu necesidad es controlar qué PRODUCTOS están en qué NEVERAS. Desde mi punto de vista, HackmanC se enfocó más bien en un sistema de CLASIFICACIÓN DE PRODUCTOS, utilizando no un modelo E-R, sino más bien un modelo Jerárquico, ese es un enfoque distinto.

El modelo de HackmanC, insisto, está pensado en saber qué producto DEBES DE PONER en qué nevera (lo que facilitaría encontrar fácilmente esos productos y no tener necesidad de preguntarle a los empleados acerca de los huevos), pero si entendí bien, lo que tú planteas es un modelo para saber qué productos ESTÁN en qué nevera (aunque no necesariamente esto implique que los productos tengan qué estar ordenados).

Partiendo de esto último, el modelo original que planteas, es correcto:

Código:
* Una tabla NEVERAS con campos ID_Nevera y Nombre_Nevera.
* Una tabla PRODUCTOS con campos ID_Productos y Nombre_Productos.
* Una tabla NEVERAS_PRODUCTOS con campos ID_Nevera e ID_Productos para establecer una relación de muchos a muchos entre las dos tablas anteriores.
Este como dice HackmanC sería un modelo bastante básico, y como tú mismo infieres, puede traer mucha información repetitiva, sin embargo, partiendo de este modelo, puedes hacer la NORMALIZACIÓN que te permita eliminar (o por lo menos minimizar) esta información aparentemente 'duplicada'

Del lado de las NEVERAS, creo que no hay problema... en el caso de los PRODUCTOS es donde puedes hacer aun varias desagregaciones. Al poner tu lista de productos, planteas algo como eso:

Código:
* fruta manzana
* fruta pera
* fruta melocotón
* fruta(sin especificar)
* fruta ........
* leche entera
* leche semi
* leche desnatada
* ...
por lo tanto, puedes observar que aquí hay información REPETITIVA... lo qué procede entonces es sacar esa información como un catálogo, de tal manera que tus tablas entonces quedarían así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM categorias;
  2. +--------------+-------------+
  3. | id_categoria | descripcion |
  4. +--------------+-------------+
  5. |            1 | frutas      |
  6. |            2 | leche       |
  7. +--------------+-------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM productos;
  11. +-------------+--------------+-------------+
  12. | id_producto | id_categoria | descripcion |
  13. +-------------+--------------+-------------+
  14. |           1 |            1 | manzana     |
  15. |           2 |            1 | pera        |
  16. |           3 |            1 | melocotón   |
  17. |           4 |            2 | entera      |
  18. |           5 |            2 | semi        |
  19. |           6 |            2 | desnatada   |
  20. +-------------+--------------+-------------+
  21. 6 rows in set (0.00 sec)

Tus tablas NEVERAS y NEVERAS_PRODUCTOs, no necesitan tener ninguna modificación.

Así, puedes continuar con el resto de los atributos que estás guardando en tu tabla, cuando encuentres datos repetitivos, estos los puedes sacar como CATALOGOS, y manejar solamente su índice.

Insisto, no hay un modelo único, ni mejor o peor... todo depende de tus necesidades.

Saludos
Leo.