数据库与表之间有很多关系?

问题描述 投票:0回答:1

我有一张摆满产品的桌子。每个产品都可以有 0..n 个特征。例如。 “Linux Server S”或“Windows Server M”等

每个产品还可以有一个按选项组分组的选项列表。例如。选项组“操作系统”,然后该选项组具有诸如“Windows”、“Linux”之类的选项参数。

在矩阵中,我将选项参数映射到特征。

我希望 optionparams 属于 optiongroup,而 optiongrop 属于产品;甚至特征也属于产品。具体矩阵也属于产品。

我不知道表之间的关系是否正确,或者矩阵和产品之间的关系是否不正确,因为我可以将特征加入到产品中。但在这种情况下,如果有人(应用程序应该阻止)在矩阵中进行了错误的映射,例如。他们从另一个产品中选择一个选项参数而不是特性,我找不到错误。

database-design erd
1个回答
0
投票

但在这种情况下,如果有人(应用程序应该阻止)在矩阵中进行了错误的映射,例如。从另一个产品而不是特性中选择一个选项参数,我找不到错误。

在正常情况下,您不会想要直接从 Matrix

Product
 的 FK,这是多余的,只会使事情处理起来更加复杂。另一方面,如您的问题所示,这对于能够应用交叉一致性约束来说是“必要的”。
但是正确的方法是使用整个主键链

直到

Product,事实上你应该在两侧都这样做,Product

以及
Characteristics
:也就是说,你还应该有(参考)
OptionGroup.ID
中的
Matrix
并在FK到
OptionParams
中使用它;并且您应该在 FK 中添加 
Product.ID
Characteristics
这个问题解决了,我基本上看到了两种强制一致性约束的方法:

只需
  • Matrix

    中使用同一个字段来指代FK中的Product.ID

    OptionParams
    和1中的
    Characteristics
    ;或者,

  • Product.ID
  • 中为

    Matrix

    使用不同的字段,两个FK各一个,但
    添加一个约束,即两个字段必须相等

    通常第一个选项是首选,因为第二个选项有一些冗余,另一方面第二个选项更统一,在某些情况下,例如如果涉及代码生成,可能会更好。
(顺便说一句,该图很难阅读,特别是因为字段名称不一致/约定俗成,并且不清楚哪些字段是 FK。)

© www.soinside.com 2019 - 2024. All rights reserved.