На самом деле я думаю, что это спецификация, хотя дизайн таблицы не диктует этого. Является ли продукт "материалом", "сборкой" или "сборкой", определяется просто наличием у него дочерних элементов (хотя вы можете денормализовать этот факт в самой таблице продуктов, если производительность запроса является проблемой).
Я реализовал это с двумя таблицами:
Product (product ID etc)
Components (Parent product, child product ID, quantity)
Это работает очень хорошо. В SQL Server вы можете довольно легко запросить его с помощью общего табличного выражения, чтобы установить «листья» любой данной спецификации.
Будьте осторожны при использовании таблицы компонентов. В этом примере таблицы продуктов и компонентов вместе дают шаблон для сборки комплекта / сборки. Для последующих отчетов вам нужно эффективно взять копию (или, если хотите, «экземпляр») спецификации и сохранить ее в другом месте. Вероятно, я бы попросил Product и Component описать спецификацию для сборки, а ProductItem и ComponentItem описать фактическую сборку, представляющую реальный элемент после того, как сборка состоялась.
Вы могли бы сказать Product
/ Component
относительно Class
, а ProductItem
/ ComponentItem
- object
в том смысле, что второй является экземпляр первого.