多个主键作为单个外键

发布于 2024-11-02 09:56:46 字数 386 浏览 1 评论 0原文

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

单个 MainPart 可以有多个子部分。我正在考虑做类似

SubPart 表的事情: ID 和名称

MainPart 表: SubPart_MainPart Id和Name

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

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

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

您对此还有其他方法吗?

感谢您的帮助

I have a requirement to design 2 or more tables.
1. SubParts table
2. MainParts table.

A single MainPart can have multiple subparts. I am thinking of doing something like

SubPart table:
Id and Name

MainPart table:
Id and Name

SubPart_MainPart relationship table:
MainPart_ID SubPart_Ids(array or comma seperated)

Is there a way to put multiple subpart_id in single column in the relationship table?
or should I use MainPart_D and SUbPart_ID as combined primary key in the relationship id?

the second approach will increase lot of records in the relationship table.
where as the first approach will increase looping the code when I try to iterate the comma separated column(SubPart_Ids).

Do you have any other approach for this?

thanks for your help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

鹿童谣 2024-11-09 09:56:46

SubPart 是否有一个或多个 mainPart?

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

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

Does the SubPart have one or multiple mainParts?

If only one MainPart, then all you need is the SubPart and MainPart table; which the MainPart ID in the SubPart table.

If multiple MainParts, then you need a SubPart_MainPart table. This should NOT be a comma seperated list. Each row should be one link between a MainPart and SubPart.

兔小萌 2024-11-09 09:56:46

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

Fisrt rule of database design, do not ever store anything in a an array or comma delimited list. You want a join table that has the mainpart id and the subpart id and one record for each subpart. It will be easier to query and probably faster if correctly indexed.

深空失忆 2024-11-09 09:56:46

您可能只需要两个表:

MainPartTable
   *ID
   Name 

SubPartTable
   *MainPartTable_ID
   *SubPartTable_ID
   Name

You may only need two tables:

MainPartTable
   *ID
   Name 

SubPartTable
   *MainPartTable_ID
   *SubPartTable_ID
   Name
堇色安年 2024-11-09 09:56:46

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

另一件需要考虑的事情是为什么你有一个单独的子零件表。执行此类操作(所谓的“物料清单”)的传统方法是使用一张用于零件/组件的表和一张用于表示“这些是构成该东西的东西”的表。换句话说:

ASSEMBLY
- Assembly ID (PK)
- Assembly Name 

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

编辑:还要注意,真实的物料清单将在“组合”表中包含用于数量和(数量)计量单位的字段。

Having a list of sub part IDs would be violating 1NF and is highly discouraged in almost any circumstance. If you're using any kind of a DBMS then having more rows in your intersection table is not a problem.

Another thing to think about is why you have a separate sub-parts table. The conventional way to do this sort of thing (so-called "bill of materials") is to have one table for parts/assemblies and one table to say "these are the things that make up that thing". In other words:

ASSEMBLY
- Assembly ID (PK)
- Assembly Name 

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

Edit: Note too that a real bill of materials would have fields in the COMPOSITION table for quantity and unit of measure (of the quantity).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文