如何使用两个中间表加入?
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
我在数据库设计方面没有太多经验,我在尝试解决这个问题时遇到了麻烦。到目前为止,我已经花了很多时间,但没有什么好处。 所以我们的想法是能够将多个值分配给主 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