多个表的数据库设计

时间:2015-10-21 13:42:24

标签: database database-design

我对表的正确设计有疑问。让我们说我有一个名为汉堡的桌子,这个汉堡可以有很多调味品,如奶酪,番茄酱等。我想把这些信息保存在一组表格中。每种调味品必须在自己的表中,因为每种调味品都有不同的列。

这就是我所拥有的:

汉堡 - (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开始)

我只是在想这个吗?我基本上要添加另一张桌子来保存汉堡包内的调味品的顺序,但我很难把它放在一起。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

首先,您要查看类型/子类型数据库模式 - 在这些主题上搜索SO答案,或在线查找详细文章。以下是我过去发布的两个问题:

Foreign Key Referencing Multiple Tables

Derived concepts - database design considerations

一般的想法是你有一个“主”表定义所有可能的调味品,然后你有每种类型的调味品的另一个表,其中每个表作为它的父母的“主调味品”表。细节是微妙的,实施可能很棘手。

其次,你所描述的“parent_condiment_id”听起来更像是“condiment_order”,这是汉堡包和调味品之间联合的一个属性。 (或者它实际上是否引用了另一个表?)