【问题标题】:Relational Database tables for food products - specifying different categories食品的关系数据库表 - 指定不同的类别
【发布时间】:2026-01-20 10:45:02
【问题描述】:

我正在为食品进行数据库设计,并且在决定如何在数据库中设计产品类型和类别时迷失了方向。

让我分享一下我目前的数据库结构:

现在让我们想想现实生活中的例子。假设我们服用奶酪产品。我们只是说它是有点味道的熏制奶酪。然后我们可以假设它是乳制品,它看起来像这样:乳制品 -> 奶酪 -> 烟熏 -> 大蒜味

我有一个包含不同食物类别和类型的列表:

我试图仅列出其中的一部分,但从我的角度来看,它变得非常复杂。

食物的两个主要类别是:食物饮料/饮料,但也许我应该从面包、乳制品、水果和蔬菜等类别开始。 ?因为在乳制品​​中,我可能会吃 cheesemilk 之类的食物和饮料。如果我们现在只吃奶酪,我已经用谷歌搜索了 66 种不同类型的奶酪,也许更多can be found here

我知道所有东西都可以简单地添加到一张桌子上,但是由于我有这么多不同的类别和类型,并且它们相互重复,我该如何针对所有食物类别制定最佳解决方案?

我可以得出结论是的我还不确定如何正确组织所有类别和类型,但是您可以提出任何表格结构吗?

如果有什么不清楚的地方,请告诉我,我会澄清的。

【问题讨论】:

    标签: database relational-database structure relationship


    【解决方案1】:

    在我看来,您正在寻找一些标签和类别的组合。一个对您的情况足够灵活的系统可以实现为 product:label 的 M:N 关系和 label:label 的 1:N 关系。

    这样,您的奶酪示例可能会被标记为:

    Organic type -> Dairy -> Cheese
    Cooked -> Smoked
    Flavored -> Garlic flavor
    

    如果您的应用程序允许在标签上进行全文搜索,那么添加带有标签的新产品应该很容易。另一方面,最终用户将有可能过滤一般的乳制品,或专门的奶酪。

    【讨论】:

      【解决方案2】:

      您拥有的食物类别会更好地按层次组织。作为一个关系数据库,根据您组织产品的方式,您将有重叠。理想情况下,您希望不惜一切代价避免多对多。

      也许,根据数据库的目的创建关系会更好。例如,如果这是针对超市,我会根据供应商和他们销售的产品创建关系,并可能将它们与接收产品的部门相关联。然后添加标签或标签,按食物种类(乳制品、肉类、水果等)对产品进行分类 这将允许您拥有一个基于流程的功能更强大的系统,并且添加标签将很容易被人类搜索。

      因此,我的建议是考虑如何使用它并使其适合您的流程,并专注于设计(架构、关系)。然后关注用户,并添加另一个层以使其易于使用(标签,标签)

      这有意义吗?

      【讨论】:

      • 另外,数据库的用途是什么?它将如何使用?使用该信息建议设计会更容易