sha*_*ery 15 database-design relations filemaker
我正在为我的零售业务构建一个数据库系统。我设置了一些表格,它们是:
所有这些都相互连接,并且能够显示我的库存水平。
我遇到的问题是我还销售捆绑产品 - 其价格与各自的价格不同。
示例:我以 1 美元的价格出售一个橙子,以 1.2 美元的价格出售一个苹果;我以 3.8 美元的价格出售水果套餐 1(2 个橙子和 2 个苹果),以 7 美元的价格出售套餐 2(4 个橙子和 4 个苹果)。
有没有正确的方法来为这些产品包创建关系?
PS:我正在使用 FileMaker Pro 创建这个。
Tod*_*ett 18
您所描述的模式通常称为“零件爆炸”或“物料清单”。它是数据结构研究中图和树部分的一部分。解决方案的本质是认识到任何给定的“产品”都可以由其他“产品”组成。该设计是一个网络结构,其中有一个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 |
----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
这种设计比具有递归关联的单个表更可取,因为它清楚地分离了真正的两种实体类型 - 节点和链接。在我们的例子中,产品是节点,产品组件是链接。
虽然网络设计是一个常见的结构,但查询它是有问题的,因为当它完全填充时,它是一个不同深度的递归结构。工业级 DBMS,例如 Oracle 和 SQL Server,具有特殊的语言元素(Oracle 的 CONNECT BY 和 SQL Server 的递归 CTE)来帮助使查询具有声明性。鉴于您使用的是 File Maker Pro,我对此知之甚少,您可能没有此类语言结构来提供帮助,并且可能必须编写过程代码来遍历网络。然而,如果网络的深度是固定的——比如每个产品要么没有组件,要么只有一层组件,这个问题可以得到缓解。以下是有关数据库设计中网络结构的一些参考资料:
归档时间: |
|
查看次数: |
3760 次 |
最近记录: |