【问题标题】:Database: A design pattern for category features数据库:类别特征的设计模式
【发布时间】:2015-04-28 12:24:33
【问题描述】:

我为具有这些表的系统工作:

productscategoriesfeatures

用户想要动态添加一些功能,例如color

以下哪种说法是正确的?

第一个:

Product             category                feature
----------------    ----------------        ----------------------------
pro_id (PK)         cat_id (PK)             feature_id (PK)
pro_name            cat_name                fea_name
cat_id (FK)         feature_id (FK)

我们添加一个像color 这样的特征,然后在类别中我们选择该特征并将其添加到类别表中。然后我们访问该类别中的所有产品。

但是有一个pleonasm。因为当两个类别想要有color特征时,我们必须在类别表中重复feature_id列。

第二个:

Product             category                name_feature
----------------    ----------------        ----------------------------
pro_id (PK)         cat_id (PK)             name_feature_id (PK)
pro_name            cat_name                cat_id (FK)
cat_id (FK)                                 color
                                            ...

当我们输入一个类别时,我们会为该类别创建一个表。例如具有color 功能的笔记本电脑类别。我们在 column 中创建了一个名为 laptop_feature 的表。

哪种方式好? (类别有限)

【问题讨论】:

  • 哪个好取决于您如何定义“好”,但“pleonasm”是 +1。尽管(显然)您的第一个模型(目前)没有地方存储特征值(实际上是“属性”值)并且您的第二个模型不是动态的。
  • @Strawberry 谢谢。但是在第二个中,如果我们有 100 个类别,我们将有 100 个特征表。
  • 是的,这不好,是吗!

标签: mysql database design-patterns


【解决方案1】:

创建一个新表

feature_category
--------------------
feature_id (FK)
cat_id (FK)

这将使您可以将常用功能链接到多个类别。 - 不要为每个类别制作一个表格:)

【讨论】:

  • 但是你的桌子是第二张。如果不为每个人制作表格,这里就不应该有 cat_id 。我们在一张表中添加所有特征,在category 表中我们有一个外键,它告诉我们哪个特征属于该类别。
  • 正确,这是一个附加表 - 它允许类别和功能之间的 MANY TO MANY 关系 - 您描述的方式是 ONE TO MANY 关系,这似乎无法解决您的问题。
猜你喜欢
  • 1970-01-01
  • 2020-12-26
  • 2013-11-22
  • 2011-04-23
  • 2015-10-15
  • 2010-09-10
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
相关资源
最近更新 更多