Проблемы с моделированием/нормализацией данных

У меня есть сценарий рецепта кухни, над которым я работаю, и у меня возникают проблемы с доступом к полям в объединенных таблицах. Мои таблицы настроены следующим образом:

ingredients
-----------
ingredient_id (pk)
ingredient_name (pk)
ingredient_calories (pk)

recipes
-------
recipe_id (pk)
recipe_name (pk)

meals
-----
meal_id (pk)
meal_name (pk)

recipe_has_ingredients
----------------------
recipe_id (fk)
ingredient_id (fk)

meal_has_recipes
----------------
meal_id (fk)
recipe_id (fk)

рецепт содержит много ингредиентов, а блюдо содержит множество рецептов.

ПРОБЛЕМА:

Хотя я могу ВЫБРАТЬ СУММУ (ингредиент_калорий) ИЗ рецепта_имеет_ингредиенты, я не могу понять, как это сделать с помощью таблицы еда_имеет_рецепты (для расчета общего количества калорий в еде).

Любая помощь приветствуется :)


person phgdanny    schedule 01.08.2012    source источник


Ответы (1)


Вы чрезмерно ограничиваете первичные ключи в таблицах фактов: ингредиенты, блюда и рецепты. Просто используйте поле id в качестве pk.

Вы можете создать уникальное ограничение для любого поля имени.

В таблице рецепта есть таблица ингредиентов, в качестве составного первичного ключа должны быть recipe_id и ингредиенты_id.

В таблице «Еда есть рецепты» в качестве составного первичного ключа должны быть указаны food_id и recipe_id.

Запрос калорий для еды теперь

 select meal_name, sum ( ingredients_calories)   from

    meals, meal_has_recipes, recipes_has_ingredients, recipes, ingredients

   where

      meal_name = ' good   food'   

      and   meal_has_recipes.meal_id =  meals.meal_id 

      and   meals_has_recipes.recipe_id = recipes.recipe_id

      and   recipes.recipe_id = recipes_has_ingredients.recipe_id

      and    ingredients.ingredients_id = recipes_has_ingredients.ingredients_id;
person Tim Child    schedule 02.08.2012