Answers:
您所描述的模式通常称为“ 零件爆炸 ”或“ 物料清单”。它是数据结构研究中图和树部分的一部分。解决方案的本质是要认识到任何给定的“产品”都可以由其他“产品”组成。然后,设计就是一个网络结构,其中有一个Product
表,其中每个产品都有一个行(无论是否由其他产品组成),然后是一个Product Component
表,其中每个产品都有一个行,其中每个产品都由其他产品组成,作为该产品组成部分的每个相应产品。就您而言,每种产品都有价格。所以你会有这样的事情
Product
-----------------------------------
|Name |Price |
-----------------------------------
|Orange |1 |
|Apple |1.20 |
|Fruit Package |3.80 |
-----------------------------------
Product Component
----------------------------------------------------------
|Product |Contains |Quantity|
----------------------------------------------------------
|Fruit Package |Orange |2 |
|Fruit Package |Apple |2 |
----------------------------------------------------------
这种设计比具有递归关联的单个表更可取,因为它干净地将真正的两种实体类型(节点和链接)分开。在我们的例子中,产品是节点,产品组件是链接。
虽然网络设计是一种常见的结构,但是查询它是有问题的,因为当它完全填充时,它是一个深度可变的递归结构。具有行业实力的DBMS(例如Oracle和SQL Server)具有特殊的语言元素(Oracle的CONNECT BY和SQL Server的递归CTE)来帮助使查询具有声明性。鉴于您使用的是我所知甚少的File Maker Pro,因此您可能没有这种语言构造来提供帮助,并且可能不得不编写过程代码来遍历网络。但是,如果网络具有固定的深度,则可以缓解此问题-说每个产品都没有组件,或者没有一个组件级别。以下是有关数据库设计中网络结构的一些参考: