[英]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.