2016-04-07 5 views
0

ちょっと私には、以下の問題だ:どのように私は、データベースにこのようなものを作成することができます
データベースのリストデータ型

Foods (is a Food (egg, milk, etc) OR a Recipe (bread, which is made out of eggs, flour, etc)). 
PK: foodId 
FK: recipeId 

Recipe (contains 1..many foods) Bread - eggs, flour, etc.. 
PK: recipeId 
String: name 
String: cooking 
FK: foodId, foodId2, foodId3, ... 

Meal (many foods = a meal) bread + marmelade + coffee 
PK: mealId 
String: name 
FK: foodId, foodId2, foodId,3, ... 

を?

同じPKで1つ以上のエントリを作成することはできません。

So example: 

Recipe: 
recipeId: 1 
name: bread 
cooking: mix all ingredients and then bake. 
foodId: 1 (milk) 

recipeId: 1 
name: bread 
cooking: mix all ingredients and then bake. 
foodId: 2 (flour) 

これは、recipeIdに重複したPKがあるため不可能です。

私の質問を理解し、答えを提供していただければ幸いです。

+0

レシピのテーブル、原料のテーブル、各レシピで使用される各成分の量を指定するテーブルから始めます。いくつかの例では、同じ成分を2回使用することができます(「砂糖を加えたほこり」、「バターをつけた釉」、「卵の洗浄」、「少しオリーブ油/パセリを準備する」など)それをレシピまたはレシピステップに関連付けます。 – Strawberry

+0

あなたの実装がどうなるかは言わないでください。データベースシステム(DBMS)を使用していますか?またはJavaなどの言語とファイルストレージが結合されていますか? –

答えて

1

あなたはより多くのような何か行うことができます:

Recipe 
---- 
RecipeId 
Name 
PrepTime 
CookTime 
CuisineType 

RecipeSteps 
---- 
StepId 
RecipeId 
Instructions 

RecipeStepIngredients 
---- 
Id 
StepId 
FoodId 

注意、これははるかに完璧からですが、少なくとも、あなたが始めることができます。

基本的には:

食事は、多くのレシピ

レシピを持つことができる多くの手順

を持つことができ、単一のステップでは、多くの成分を持っている(いくつかの食品で構成する)

することができます
+0

これは私のようなものです...それは私が推測することができますが、データベースの100人の患者のための一週間、breakfest、dinner、lunchの食事をつくる必要があります。私はこのすべてをどの程度複雑にリンクするのか、プログラムがDBからこのすべての値を読み取るのにどれくらいの時間がかかるのか想像することができます。 – Vulkanos

+1

料理の種類は別のテーブルかもしれません。例えば、「Japanese」と「Vegetarian」は互いに排他的ではありません。 – Strawberry

+1

@Vulkanosあなたはそれを前に持っています。リレーショナルデータベースは正規化されたデータをLOVEします。そして彼らはそれを非常に速い速度で追い求めます。 MySQLは2100行ほどの些細なことで汗をかくことさえありません。 – Strawberry

関連する問題