【问题标题】:Multiple Primary Keys as single foreign key多个主键作为单个外键
【发布时间】:2011-04-18 19:35:51
【问题描述】:

我需要设计 2 个或更多表。 1. 子零件表 2. MainParts 表。

一个 MainPart 可以有多个子部分。我正在考虑做类似的事情

子零件表: 身份证和姓名

MainPart 表: 身份证和姓名

SubPart_MainPart 关系表: MainPart_ID SubPart_Ids(数组或逗号分隔)

有没有办法将多个 subpart_id 放在关系表的单个列中? 还是应该使用 MainPart_D 和 SUbPart_ID 作为关系 ID 中的组合主键?

第二种方法会增加关系表中的大量记录。 当我尝试迭代逗号分隔的列(SubPart_Ids)时,第一种方法会增加循环代码。

您还有其他方法吗?

感谢您的帮助

【问题讨论】:

    标签: database-design foreign-keys


    【解决方案1】:

    SubPart 是否有一个或多个 mainPart?

    如果只有一个 MainPart,那么您只需要 SubPart 和 MainPart 表; SubPart 表中的 MainPart ID。

    如果有多个 MainPart,那么您需要一个 SubPart_MainPart 表。这不应该是逗号分隔的列表。每一行都应该是 MainPart 和 SubPart 之间的一个链接。

    【讨论】:

    • 反之亦然。多个子部分可以在单个主要部分中使用。 2个主要部分也可以使用相同的子部分
    • 好的,所以使用第二种方法。
    • 好的,理查德。感谢您的帮助。
    【解决方案2】:

    数据库设计的第一条规则,永远不要在数组或逗号分隔列表中存储任何内容。您需要一个连接表,其中包含主要部分 id 和子部分 id 以及每个子部分的一条记录。如果索引正确,查询会更容易,而且可能会更快。

    【讨论】:

      【解决方案3】:

      您可能只需要两张表:

      MainPartTable
         *ID
         Name 
      
      SubPartTable
         *MainPartTable_ID
         *SubPartTable_ID
         Name
      

      【讨论】:

        【解决方案4】:

        拥有子部件 ID 列表将违反 1NF,并且在几乎任何情况下都强烈反对。如果您使用任何类型的 DBMS,那么在交集表中拥有更多行都不是问题。

        要考虑的另一件事是为什么您有一个单独的子零件表。做这类事情(所谓的“材料清单”)的传统方法是有一张表用于零件/组件,一张表说“这些是构成该事物的事物”。换句话说:

        ASSEMBLY
        - Assembly ID (PK)
        - Assembly Name 
        
        COMPOSITION
        - Contained In Assembly ID  (PK, FK)
        - Contains Assembly ID (PK, FK)
        

        编辑:还要注意,真实的物料清单在 COMPOSITION 表中会包含数量和计量单位(数量)的字段。

        【讨论】:

        • 所以你的建议是 ASSEMBLY ASSEMBLY_ID NAME 1 Engine Oil 2 Engine Chain COMPOSITION COMPONENT_ID ASSEMBLY_ID 1 1 2 1 3 1 4 1 2 2 4 2
        • 我不确定链条和油是否是一个很好的例子,因为它们不是另一个的一部分。我会说您的数据库的一部分可能看起来像 ASSEMBLY: { 1 Engine; 2油; 3链}和成分{1 2; 1 3 } 换句话说,发动机包含油,发动机包含链条。请注意上面关于数量和计量单位的编辑。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        • 2013-04-21
        • 2013-03-06
        • 2011-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多