如何使用两个中间表加入?

How to join using two intermediate tables?

我在数据库设计方面没有太多经验,我在尝试解决这个问题时遇到了麻烦。到目前为止,我已经花了很多时间,但没有什么好处。 所以我们的想法是能够将多个值分配给主 table.

中的乘法字段

这里有一张图片可以给你提供思路。

1) 如何在保持数据完整性的同时进行设计? 2) 我必须使用两个中间 tables 吗? 3) 如果是这样,我如何在同一个查询中查询两个中间 tables?这有意义吗?

任何能帮助我指明正确方向的建议都将不胜感激,并且可以避免我拉头发和过早秃顶:)

编辑: 像这样,但我觉得我这里的设计是错误的。 我需要显示 ub_properties 中的所有字段以及 oub_level_two 和 ub_utility 中的所有字段。

你的问题的答案是你似乎需要五个表,三个实体表和两个连接表:

  • MainTable,绿色的
  • MainValues,其中每一行对应 MainTable.id 和对应于该 ID 的值。
  • 选项
  • MainOptions,每行对应 MainTable.id 和与该 id 对应的选项。

然后您可以在使用联接的查询中使用它们。

1) How to design it while preserving data integrity?

2) Do I have to use two intermediate tables?

是的,您需要两个中间表。如果您希望在属性行中允许相同的值和选项,那么您的设计很好。如果您不想这样做,请删除中间表中的 id 列,并将两个字段都设为主键。

3) If so, how am I going to query two intermediate tables at the same query? does this make any sense?

您可以使用这样的联接进行一个查询:

SELECT *
FROM ub_properties p
LEFT JOIN ub_level_two_meta lm ON lm.post_id = p.post_id
LEFT JOIN ub_level_two l ON l.id = lm.level_two_id
LEFT JOIN ub_utility_meta um ON um.post_id = p.post_id
LEFT JOIN ub_utility u ON u.id = um.utility_id