2011-02-02 67 views
0

我有一个关系,我的产品表中包含原材料,子组件,组件等。它们都被称为具有独特productid的“产品”。我认为它不适合物料清单,因为物料清单由材料合并以创建子装配,合并以创建装配等组成。一张桌子内多对多

这意味着一个原料批次可用于许多子装配,子装配可以有多个原料批次。这个新的子组件可以用在许多组件上,反之亦然。这是一个多对多的关系,但是在无限的层次上,所以连接两个表格将不起作用(如材料,装配表,如果我只有这两个层次)。

许多父母,同一张桌子内的许多孩子,以及雇主模型似乎都是处理正常的雇佣制。

我可以使用id_Parent和id_Child这两个键在产品表中使用相同的标识符创建一个“族”表吗?这样,我可以为多个孩子或多个父母重复一个父母。

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

回答

3

其实我认为这是一个物料清单,虽然表设计并没有规定。产品是否是“材料”,“装配体”或“子装配体”,仅由其是否有任何子女来定义(尽管如果查询性能是问题,您可以将产品表本身的规范化为非规范化)。

我有两个表来实现这一点:

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

这个作品真的很好。在SQL Server中,您可以使用公用表表达式很容易地查询它,以建立任何给定BOM的“离开”。

尽管如此,小心使用组件表。在这个例子中,产品和组件表一起给你一个构建套件/组件的模式。对于以后的报告,您需要有效地获取BOM的副本(如果您愿意,可以选择“实例”)并将其存储在其他地方。我可能有产品和组件描述了一个组件的BOM,而ProductItem和ComponentItem描述了一个组装完成后的实际装配组件,它代表了一个真实的物件。

可以Product/Component是为ClassProductItem/ComponentItem是在object第二是实例第一

+0

我会试一试,我可以使用Components表来跟踪时间和数量以便以后进行报告。我正在使用SQL Server 2005.感谢您的回复,即使Celko的数据库书籍也没有提供明确的答案,每个示例都是一个正常的树形图。 – BeachBoy 2011-02-02 23:59:16