首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个表中实现多对多

在一个表中实现多对多
EN

Stack Overflow用户
提问于 2011-02-03 05:54:56
回答 1查看 317关注 0票数 0

我有一个关系,其中我的产品表包含原材料、子组件、组件等。它们都被称为"products“,具有唯一的productid。我不认为它适合BOM,因为BOM由材料合并以创建子装配件、合并以创建装配件等组成。

这意味着一个原材料批次可以用于多个子装配件,一个子装配件可以有多个原材料批次。新的子部件可以在许多部件上使用,反之亦然。这是一种多对多的关系,但在无限级别上,连接两个表将不起作用(就像我只有这两个级别时的物料、装配表)。

许多父母,许多孩子在同一张桌子上,层级模型似乎处理正常的层级结构。

我可以在products表中用id_Parent和id_Child两个键创建一个相同标识符的“系列”表吗?这样,我可以对多个孩子重复一个父母,或者对多个父母重复一个孩子。

有没有其他/更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-03 05:58:49

实际上,我认为这是一个BOM,尽管表的设计并没有规定这一点。一个产品是"material“、"assembly”还是“simply”,这只取决于它是否有子级(不过,如果查询性能有问题,您可以将这一事实反规范化到product表本身)。

我已经用两个表实现了这一点:

代码语言:javascript
复制
Product (product ID etc)
Components (Parent product, child product ID, quantity)

这真的很好用。在SQL Server中,您可以相当容易地使用公用表表达式对其进行查询,以建立任何给定BOM的“叶子”。

不过,使用components表时要小心。在本例中,products和components表一起为您提供了构建套件/组件的模式。对于以后的报告,您需要有效地获取BOM的副本(或“实例”,如果您愿意),并将其存储在其他地方。我可能会让Product和Component描述一个装配的物料清单,而ProductItem和ComponentItem描述一个实际装配的装配,一旦装配发生,它就代表一个真实的项目。

你可以说Product/ComponentClass,就像ProductItem/ComponentItemobject一样,因为第二个是第一个的实例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4880321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档