我有一个关系,其中我的产品表包含原材料、子组件、组件等。它们都被称为"products“,具有唯一的productid。我不认为它适合BOM,因为BOM由材料合并以创建子装配件、合并以创建装配件等组成。
这意味着一个原材料批次可以用于多个子装配件,一个子装配件可以有多个原材料批次。新的子部件可以在许多部件上使用,反之亦然。这是一种多对多的关系,但在无限级别上,连接两个表将不起作用(就像我只有这两个级别时的物料、装配表)。
许多父母,许多孩子在同一张桌子上,层级模型似乎处理正常的层级结构。
我可以在products表中用id_Parent和id_Child两个键创建一个相同标识符的“系列”表吗?这样,我可以对多个孩子重复一个父母,或者对多个父母重复一个孩子。
有没有其他/更好的方法来做到这一点?
发布于 2011-02-03 05:58:49
实际上,我认为这是一个BOM,尽管表的设计并没有规定这一点。一个产品是"material“、"assembly”还是“simply”,这只取决于它是否有子级(不过,如果查询性能有问题,您可以将这一事实反规范化到product表本身)。
我已经用两个表实现了这一点:
Product (product ID etc)
Components (Parent product, child product ID, quantity)这真的很好用。在SQL Server中,您可以相当容易地使用公用表表达式对其进行查询,以建立任何给定BOM的“叶子”。
不过,使用components表时要小心。在本例中,products和components表一起为您提供了构建套件/组件的模式。对于以后的报告,您需要有效地获取BOM的副本(或“实例”,如果您愿意),并将其存储在其他地方。我可能会让Product和Component描述一个装配的物料清单,而ProductItem和ComponentItem描述一个实际装配的装配,一旦装配发生,它就代表一个真实的项目。
你可以说Product/Component是Class,就像ProductItem/ComponentItem是object一样,因为第二个是第一个的实例。
https://stackoverflow.com/questions/4880321
复制相似问题