一张桌子内多对多

时间:2011-02-02 21:54:56

标签: database

我有一个关系,我的产品表包含原材料,子装配,装配等。它们都被称为具有独特产品的“产品”。我不认为它适合BOM,因为BOM由合并创建子装配的材料,合并以创建装配等组成。

这意味着一个原材料批次可用于许多子组件,一个子组件可以有多个原材料批次。新的子组件可用于许多组件,反之亦然。这是一个多对多关系,但是在无限级别,因此连接两个表将不起作用(如材料,程序集表,如果我只有这两个级别)。

许多父母,同桌内的许多孩子,以及雇佣制模式似乎都处理正常的雇佣关系。

我可以使用id_Parent和id_Child创建一个“family”表,这两个键都是products表中相同的标识符吗?通过这种方式,我可以为多个孩子重复一个父母,或为多个父母重复一个孩子。

还有其他/更好的方法吗?

1 个答案:

答案 0 :(得分:3)

实际上我认为这是一个BOM,尽管表格设计没有规定。产品是否是“材料”,“装配”或“子装配”仅仅是由它是否有任何子项定义(尽管如果查询性能有问题,您可以将该事实反规范到产品表本身)。

我用两个表实现了这个:

Product (product ID etc)
Components (Parent product, child product ID, quantity)

这非常有效。在SQL Server中,您可以使用公用表表达式轻松查询它,以建立任何给定BOM的“离开”。

小心使用组件表。在此示例中,产品和组件表一起为您提供了构建工具包/组件的模式。对于以后的报告,您需要有效地获取BOM的副本(或“实例”,如果您愿意)并将其存储在其他位置。我可能让Product和Component描述了一个程序集的BOM,而ProductItem和ComponentItem描述了一个实际的组装程序集,表示一旦发生程序集就会显示一个真实的项目。

可以Product / ComponentClass ProductItem / ComponentItem object相同其中第二个是第一个实例