Sqlite:将条目链接到多个条目(成分和配方)

时间:2016-06-07 11:11:47

标签: python database-design sqlite foreign-keys

我想创建一个数据库来显示成分和配方之间的关系。为此我已经定义了两个包含成分类型的表(可能稍后会加入到一个表中):

Ingredients1
-id /primary
-name
-description
-...

Ingredients2
-id /primary
-name
-description
-...

我想使用一个看起来像这样的食谱表:

Recipies
-id /primary
-name
-description
-item /foreign key-> quantity
-item /foreign key-> quantity
-...

看起来像这样:

recipe database

现在每种成分都可以在多种配方中,每次都有不同的数量。搜索时,我只能找到一个项目始终链接到一个组的关系。

是否可以(并且合理)设置这样一个配方表(如果是这样,如何?)或将这样的表分成多个表更好? E.g:

Recipedescription:
-id /primary
-name
-description

Recipeingredients:
-id /primary
-recipename /foreign
-ingrediant /foreign
-quantity

问题:单个食谱表是否有意义?如果是这样,我如何添加成分到现有食谱?

我使用python访问和创建数据库。

1 个答案:

答案 0 :(得分:0)

如果你有两个成分列(一个糟糕的设计),它们都可以是同一个表的外键。外键表示引用表中的子行值显示为在引用表中形成候选键的列的子行值。

直接设计有一个成分表,一个食谱表和一个表格,给出了食谱中成分的数量。 (了解为什么我们将规范化为多个表而不是一个表是它们的组合。)

您不一定需要ID。显然,名字是独一无二的;一对食谱名称和成分名称是独一无二的。您是否需要ID(用于名称和/或三元组)是一个单独的问题。

-- ingredient NAME is described as DESCRIPTION
Ingredient(name, description)
-- Recipe NAME is described as DESCRIPTION
Recipe(name, description)
-- recipe R_NAME has QUANTITY units of ingredient I_NAME
Quantity(r_name, i_name, quantity)