【问题标题】:Sqlite: link entries to multiple entries (ingredients and recipes)Sqlite:将条目链接到多个条目(配料和食谱)
【发布时间】:2016-10-07 06:18:42
【问题描述】:

我想创建一个数据库来显示成分和食谱之间的关系。为此,我定义了两个包含成分类型的表(以后可能会合并到一个表中):

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

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

我想使用如下所示的单个配方表:

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

看起来像这样:

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

是否可以(并且合理)设置这样一个单一的配方表(如果是,如何设置?)还是将这样的表拆分为多个表会更好?例如:

Recipedescription:
-id /primary
-name
-description

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

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

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

【问题讨论】:

  • 为什么有两张配料表? “一个项目始终链接到一个组”是什么意思?
  • 不幸的是,你的设计很差。一旦你更正了你的设计基础,你需要的 SQL 对你(和/或其他可以提供帮助的人)来说会变得更加明显

标签: python database-design sqlite foreign-keys


【解决方案1】:

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

简单的设计有一个成分表、一个配方表和一个给出配方中成分数量的表。 (了解为什么我们规范化为多个表而不是一个表,即它们的组合。)

您不一定需要 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2016-07-08
    • 2015-04-16
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多