繁体   English   中英

设计带循环引用的关系数据库

[英]Design relational database with circular reference

想象一家面包店。 我有一个产品表,与一个公式的表有一对多的关系,而公式又与成分有一对多的关系。 问题是我有一个蛋糕,但其中一个成分是结霜本身就是一种产品(你不能将糖霜分解成单独的碎片,因为结霜被应用于许多东西和蛋糕上的糖霜量可能需要改变)。 桌面设计是什么样的设置?

你的配料表中的两列如何,一个用于实际成分,另一个用于指示其他配方。 只为任何给定行设置一个。

使用两列还可以强制执行引用完整性。

您正在寻找的实际上是一种常见的数据库设计模式,称为物料清单

这是一个关于物料清单的博客

为了更容易使用这种设计所涉及的不同级别的树结构,您可以使用称为访问数字的物理实现技术,我在回答这个问题时会对其进行详细描述。

看起来你只有两个对象:公式和东西。 一个公式用其他东西来描述东西。 一件东西可能是也可能不是产品。 这是二进制属性:第三个表。 该计划将是这样的:

Stuff
-----
id : integer
name : string

FormulaPairs
------------
stuff_described_id : integer
ingredient_id : integer
amount : float

Product
-------
stuff_id : integer

示例查询:

获取Apple Pie的所有成分:

select ingredient_id from Stuff s inner join FormulaPairs p
where s.id == p.stuff_described_id and s.name == 'Apple Pie'

获取所有产品名称:

select name from Stuff s inner join Product p where s.id == p.stuff_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM