2016-04-07 67 views
0

Hey aşağıdaki Sorun var:
Veritabanı liste veri türü

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, ... 

Nasıl bir veritabanında böyle bir şey oluşturabilir?

Aynı PK ile 1'den fazla giriş oluşturamıyorum.

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) 

Bu, recipeId dosyasındaki PK kopyası nedeniyle mümkün değildir.

Umarım sorumu anlarsınız ve bir cevap verebilir.

+0

Bir yemek tarifleri tablosu, bir bileşen tablosu ve her bir öğenin her bir tarifede ne kadarının kullanıldığını belirten bir tabloyla başlayın. Bazı durumlarda, aynı içerik iki kez kullanılabilir ('pudra şekeri ile toz', 'tereyağı ile sır', 'yumurta yıkama', 'biraz zeytinyağı/maydanoz' vb.), Ancak bunu tariflere veya tariflere göre düzenleyin. – Strawberry

+0

Uygulamanızın ne olacağını söylemezsiniz. Bir veritabanı sistemi (DBMS) kullanıyor musunuz? Ya da Java gibi bir dosya depolama ile birleştirilmiş bir dil? –

cevap

1

Bir şey daha fazla gibi yapabilirdi:

Recipe 
---- 
RecipeId 
Name 
PrepTime 
CookTime 
CuisineType 

RecipeSteps 
---- 
StepId 
RecipeId 
Instructions 

RecipeStepIngredients 
---- 
Id 
StepId 
FoodId 

Not, bu mükemmel olmaktan uzak, ama en azından başladı alabilir. Temelde

:

bir yemek birçok tarifleri

tarifi birçok malzemeyi olabilir Tek bir adımda (birkaç gıda kalemlerinin kadar yapılabilir)

birçok adım

olabilir

olabilir
+0

Bu bir tür meh ... Tahmin edeceğim, ama veritabanında 100 hasta için bir hafta boyunca kahvaltı, akşam yemeği, öğle yemeği için yemek hazırlamak zorundayım. Sadece bunların hepsinin ne kadar karmaşık olduğunu ve programın DB'den tüm bu değerleri okumasının ne kadar zaman alacağını hayal edebiliyorum. – Vulkanos

+1

Mutfak türü ayrı bir masa olabilir - Örneğin, "Japonca" ve "Vejetaryen" birbirini dışlayan değildir. – Strawberry

+1

@Vulkanos Bunu geri aldınız. İlişkisel veritabanları LOVE normalleştirilmiş veri. Ve bunu muazzam bir oranda deviriyorlar. MySQL bile 2100 satır gibi çok önemsiz bir şey ter atmak olmaz. – Strawberry