设计数据库

时间:2011-01-27 10:26:37

标签: sql database-design

我发现很难决定数据库的有效设计。我的应用程序将从用户那里获得许多成分(表格),并与数据库一起查找可以从用户提供的成分列表中准备的配方。

我的初步设计是

Useringredients(ing_id,ing_name..);

配方数据库将是

recipe(rec_id,rec_text,...);
items_needed(rec_id,item_id,...);
items(item_id,item_name);

这是一个好方法吗?如果是这样,我将如何查询从用户成分列表中检索食谱。

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

这种设计可行。你有一个表记录食谱,一个记录项和一个记录两者之间的多对多关系(虽然我会根据你的命名约定来保持一致)。

要获取列表中至少包含一个项目的任何食谱,您可以使用以下内容:

Select rec.rec_id, 
       Count(itn.item_id) as [NumMatches]
From recipe as rec
Join items_needed as itn on itn.rec_id = rec.rec_id
Where itn.item_id in (comma-delimited-list-of-itemIDs)
Group By rec.rec_ID
Having Count(itn.item_id) > 0
Order By Count(itn.item_id) desc

这将返回包含至少一些所选项目的任何食谱,并使用具有最高匹配数的第一个食谱进行排序。

答案 1 :(得分:0)

以下查询应该使用用户搜索的任何一种成分

为您提供唯一食谱的列表
select distinct rec_id,rec_text,ii.item_name
from recipe rr
join items_needed itn on itn.rec_id=rr.rec_id
join items ii on ii.item_id=itn.item_id
join userIngredients ui on ui.ing_id=ii.item_id

Yaakov的查询看起来会处理你想要所有成分的情况。您可以使用comma-delimited-list-of-itemIDS

替换((select ing_id from userIngredients)