【问题标题】:Define This Entity Relationship定义此实体关系
【发布时间】:2014-05-06 22:34:02
【问题描述】:

首先,请原谅我的无知。我无法掌握如何在我正在尝试设计的库存数据库中定义特定关系。

我打算在纸板包装上保留库存。在大多数情况下,包装公司为每个包装箱设计提供一个纸板组件。例如,Case type x 只需要 1 个纸板类型 y 即可完成组装。这是一个简单的“多对多”关系供我定义。从tblCasetblCardboard 中获取主键并创建一个新表tblCaseCardboard 等...

对我来说,麻烦在于需要多个组件的案例类型。示例:案例类型z 需要纸板组件a,b,c 来完成组装。显然,我以前的多对多表不会为我解决这个问题。

我确信有一种有效的方法来相对定义它,而不是用粗略的条件语句列表来捕获异常。任何投入将不胜感激!谢谢。

【问题讨论】:

  • 我不明白你的意思。 “简单”的情况可以通过一对一的关系来解决,但复杂的情况可以通过多对一或多对多来解决(首选,因为您不知道在未来)。你试过什么,什么叫“多对多”?
  • @SJuan76 所说的。我想问一下:你真的是说你需要一个多层次的层次结构,其中一个程序集可以有一个子程序集(和子子程序集等)?

标签: database-design uml relational-database relationship


【解决方案1】:

除了真实的包装数据之外,您还应该考虑对包装规则进行建模。正如您自己所说,规则并不总是微不足道的(n..n),而是取决于大小写和组件类型。这一事实自然提出了对规则建模的需求,并基于这些规则能够检查包装结构的有效性。

换句话说...在您的示例中,您谈到了不属于您的模型的“tvpes”。如果您想将相应的验证逻辑从“粗略的条件语句”中移出,您只需将其带到数据库中(一种元建模:))

这是一个示例图,可以模拟您的情况,如上所述。

请务必仔细分析所有可能的规则,以便涵盖所有规则。如果规则比这更简单,您可以删除关联类。

【讨论】:

    【解决方案2】:

    理想化的 2 个实体之间的多对多关系,实际上是指 3 个实体,其中一方存在一对多关系,另一方存在反转多对一关系。

    通常,两个端点实体是目录或工作表,而位于两者中间的实体只存储其他表的键以及自己的键。

    在您的帖子中,目录表(“Province”表)可能与工作表(“Customers”表引用“Province”表)混淆。

    ...........................
    ..+---------------------+..
    ..|     <<Catalog>>     |..
    ..|         Case        |..
    ..+----------+----------+..
    .............|.1...........
    .............^.............
    ............/.\............
    ...........<...>...........
    ............\./............
    .............v.............
    .............|.*...........
    ..+----------+----------+..
    ..|     <<Catalog>>     |..
    ..|  ComponentForCase   |..
    ..+---------------------+..
    .............|.*...........
    .............^.............
    ............/.\............
    ...........<...>...........
    ............\./............
    .............v.............
    .............|.1...........
    ..+----------+----------+..
    ..|     <<Catalog>>     |..
    ..|  CardboardComponent |..
    ..+---------------------+..
    ...........................
    

    在这种情况下,目录意味着标题表加上明细表,而不仅仅是单个表。

    Case = {CaseID, CaseEtc};

    CardboardComponent = {CCID, CCShortName, CCLongDescr};

    ComponentForCase = {CFCID, CaseID, CCID, Qty};

    而且,只有目录。

    干杯。

    【讨论】:

    • 这不是“2个实体之间的多对多关系真的意味着3个实体”而是“两个实体之间的一个多对多关系表示为三个 " 翻译成关系模型时。
    • 这正是他目前拥有但不适合他的模型。您刚刚在 ER 表单中显示了它。
    【解决方案3】:

    感谢您的各种意见! @Aleks 和 @SJuan76 都帮助我看到了光明。 @SJuan76 在他的一个 cmets 中透视所有内容。 @Aleks 帮助我实现了抽象。

    原始模型是为 2 个实体(箱子和纸板)设计的。添加纸板组件实际上是添加了第三个实体。我试图建模仍然是字面上的 2 个实体。

    我刚刚将 finished_cardboard 变成了一个抽象的第三实体。 finished_cardboard 与 cardboard_components 和 finished_case 是一对多的关系。因此,我可以通过来自finished_cardboard 的链接与finished_case 中的_components 进行交互。

    再次感谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2011-07-28
      相关资源
      最近更新 更多