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

Consejo diseño base de datos

Estas en el tema de Consejo diseño base de datos en el foro de Bases de Datos General en Foros del Web. Hola! Me gustaría que me aconsejarais cual de estas opciones veis mejor para una aplicación que estoy haciendo... La descripción sería más o menos esta: ...
  #1 (permalink)  
Antiguo 28/02/2010, 21:48
 
Fecha de Ingreso: febrero-2010
Mensajes: 63
Antigüedad: 14 años, 9 meses
Puntos: 0
Consejo diseño base de datos

Hola!

Me gustaría que me aconsejarais cual de estas opciones veis mejor para una aplicación que estoy haciendo...

La descripción sería más o menos esta:

Una Dieta esta compuesta por varias comidas (mañana, tarde...), varias comidas están compuestas por varios alimentos. Un alimento puede estar en varias comidas, una comida puede estar en una única dieta.

Una posible estructura sería esta:

Código SQL:
Ver original
  1. DIETA
  2. id_dieta PK
  3. nombre
  4. fechaCreación
  5.  
  6. DIETA_COMIDA
  7. id_dieta PK FK
  8. id_comida PK FK
  9.  
  10. COMIDA
  11. id_comida PK
  12. momento (8 tipos)
  13. opcional
  14. raciones
  15.  
  16. COMIDA_ALIMENTO
  17. id_comida PK FK
  18. id_alimento PK FK
  19.  
  20. ALIMENTO
  21. id_alimento PK
  22. nombre
  23. ...


La otra sería esta:

Código SQL:
Ver original
  1. DIETA
  2. id_dieta PK
  3. nombre
  4. fechaCreación
  5.  
  6. COMIDA
  7. id_comida PK
  8. id_dieta PK FK
  9. id_alimento PK FK
  10. momento (mañana, mediodía, tarde...)
  11. opcional
  12. raciones
  13.  
  14. ALIMENTO
  15. id_alimento PK
  16. nombre
  17. ...

Cual veis más adecuada?

Se os ocurre otra forma de resolverlo?

Saludos y gracias

Última edición por AlterElt; 01/03/2010 a las 10:47
  #2 (permalink)  
Antiguo 01/03/2010, 10:39
 
Fecha de Ingreso: febrero-2010
Mensajes: 63
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consejo diseño base de datos

una ayudita :P
  #3 (permalink)  
Antiguo 01/03/2010, 11:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Consejo diseño base de datos

Me suena la primera opción que propones, pero me confunde cuando dices " una comida puede estar en una única dieta."

Si fuese así, la relación entre comida y dieta no sería N:M sino 1:N quedando así:
Cita:
DIETA
id_dieta PK
nombre
fechaCreacion

COMIDA
id_comida PK
momento (8 tipos)
opcional
raciones
id_dieta FK

COMIDA_ALIMENTO
id_comida PK FK
id_alimento PK FK

ALIMENTO
id_alimento PK
nombre
...


Pero poniendole un poco de logica.... una comida podría estar en multiples dietas... no?

Si es así, dejala como la tenías en tu primera propuesta.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 02/03/2010, 11:41
 
Fecha de Ingreso: febrero-2010
Mensajes: 63
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consejo diseño base de datos

Buenas, pues eso es lo que no tenía muy claro, gracias

Al final he decidido usar el primer método (relacion muchos a muchos entre COMIDA y DIETA), me surje una duda con todo esto... Cuando rellene la tabla tengo que llenar primero ALIMENTO, luego COMIDA y luego en la tabla COMIDA_ALIMENTO, no tendré muchos duplicados?

He hecho una pequeña modificación, porque los atributos raciones y opcional van en COMIDAS_ALIMENTOS creo, ya que se refiere a las raciones de cada alimento... (creo que esta sería la forma definitiva):

Código SQL:
Ver original
  1. DIETA
  2. id_dieta PK
  3. nombre
  4. fechaCreación
  5.  
  6. DIETA_COMIDA
  7. id_dieta PK FK
  8. id_comida PK FK
  9.  
  10. COMIDA
  11. id_comida PK
  12. nombre
  13. momento (8 tipos)
  14.  
  15. COMIDA_ALIMENTO
  16. id_comida PK FK
  17. id_alimento PK FK
  18. opcional
  19. raciones
  20.  
  21. ALIMENTO
  22. id_alimento PK
  23. nombre
  24. proteinas
  25. hidratos
  26. grasas
  27. calorias

Otra cosilla, si quisiera hacer una consulta en la cual me trajera la tabla comida y los alimentos que tienen estas comidas asociados, ¿cómo podría hacer la consulta?

Por ejemplo si tengo

tablaCOMIDA
id_comida_____nombre_______masAtributos....
1____________comida1______
2____________comida2______
3____________comida1______
4____________comida1______

tablaCOMIDA_ALIMENTOS
id_comida_____id_alimento
1____________2
1____________3
1____________4
2____________1


tablaALIMENTOS
id_alimento___________nombre________masAtributos.. ..
1___________________pollo__________
2___________________arroz__________
3___________________garbanzos______
4___________________lentejas________

¿Cómo sería la consulta para ver los alimentos de COMIDA1, por ejemplo?
  #5 (permalink)  
Antiguo 02/03/2010, 12:20
 
Fecha de Ingreso: enero-2009
Mensajes: 455
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Consejo diseño base de datos

Cita:
Cuando rellene la tabla tengo que llenar primero ALIMENTO, luego COMIDA y luego en la tabla COMIDA_ALIMENTO, no tendré muchos duplicados?
No, proque precisamente para eso estas normalizando y haciendo tu tabla de comida_alimentos que es tu tabla transitiva entre tu tabla comida y tu tabla alimentos


Cita:
Otra cosilla, si quisiera hacer una consulta en la cual me trajera la tabla comida y los alimentos que tienen estas comidas asociados, ¿cómo podría hacer la consulta?
tu tabla comida_alimentos precisamente es la que te da esa información, solo que te la regresa únicamente con los id's de las dos tablas, por lo que podrías utilizar un JOIN para generar la consulta y saber exactamente los nombres que corresponden

Espero te sirva, si no, aqui andamos para echarle monton y ayudarte
  #6 (permalink)  
Antiguo 02/03/2010, 16:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 63
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Consejo diseño base de datos

Cita:
Iniciado por eulerss Ver Mensaje
No, proque precisamente para eso estas normalizando y haciendo tu tabla de comida_alimentos que es tu tabla transitiva entre tu tabla comida y tu tabla alimentos




tu tabla comida_alimentos precisamente es la que te da esa información, solo que te la regresa únicamente con los id's de las dos tablas, por lo que podrías utilizar un JOIN para generar la consulta y saber exactamente los nombres que corresponden

Espero te sirva, si no, aqui andamos para echarle monton y ayudarte
Hola!

Muchas gracias por la respuesta. Me queda claro la parte de diseño. Respecto a la consulta, podrías ponerme un ejemplo? He mirado y creo que podría ser con INNER JOIN, pero no acabo de verlo. Con estas consultas siempre me hago la picha un lío jeje

Saludos y gracias de nuevo
  #7 (permalink)  
Antiguo 03/03/2010, 06:01
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Consejo diseño base de datos

La consulta que buscas podría ser algo así:

Código MySQL:
Ver original
  1. Select Comida.*, Alimentos.*
  2. Comida INNER JOIN
  3. Comida_alimentos on Comida.IdComida=Comida_alimentos.IdComida
  4. Alimentos on Comida_alimentos.IdAlimento=Alimentos.Idalimentos
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo

Etiquetas: consejo, diseño
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 03:45.