我对表的正确设计有疑问。让我们说我有一个名为汉堡的桌子,这个汉堡可以有很多调味品,如奶酪,番茄酱等。我想把这些信息保存在一组表格中。每种调味品必须在自己的表中,因为每种调味品都有不同的列。
这就是我所拥有的:
汉堡 - (ham_id,title等等)ham_condiments(ham_id,condiment_id,parent_condiment_id,condiment_type)
奶酪(cheese_id,名称,奶酪专用栏)
肉(meat_id,名称,一些特定牛肉专栏)
mayo(mayo_id,name,some mayo specific columns)
因此,ham_condiments显示汉堡包表中的一对多,并且在ham_condiments表的condiment_id列中使用了mayo_id,meat_id和cheese_id。
所有这一切的原因是parent_condiment_id,它将显示汉堡包中调味品的正确顺序。
所以,如果你想看一个汉堡上的所有调味品,你会:
select ham.title, c.name, m.name, mo.name, condiment_type
hamburger ham,
ham_condiments hc,
cheese c,
meat m,
mayo mo
where
ham.ham_id = hc.ham_id and
hc.condiment_id = c.cheese_id and
hc.condiment_id = m.meat_id and
hc.condiment_id = mo.mayo_id
order by hc.parent_condiment_id
(parent_condiment_id可能只是一个sort_order列,其值也从1,2,3,4开始)
我只是在想这个吗?我基本上要添加另一张桌子来保存汉堡包内的调味品的顺序,但我很难把它放在一起。谢谢你的帮助。
答案 0 :(得分:1)
首先,您要查看类型/子类型数据库模式 - 在这些主题上搜索SO答案,或在线查找详细文章。以下是我过去发布的两个问题:
Foreign Key Referencing Multiple Tables
Derived concepts - database design considerations
一般的想法是你有一个“主”表定义所有可能的调味品,然后你有每种类型的调味品的另一个表,其中每个表作为它的父母的“主调味品”表。细节是微妙的,实施可能很棘手。
其次,你所描述的“parent_condiment_id”听起来更像是“condiment_order”,这是汉堡包和调味品之间联合的一个属性。 (或者它实际上是否引用了另一个表?)