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

时间:2015-11-08 23:09:43

标签: mysql database-design relational-database

我在数据库设计方面没有太多经验,我在尝试解决这个问题时遇到了麻烦。到目前为止,我花了很多时间没什么好事。 因此,我们的想法是能够为主表中的多个字段分配多个值。

这是一张图片,可以提供您的想法。

enter image description here

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

任何能帮助我指明正确方向的建议都会非常感激,并且可以让我免于拉扯我的头发。过早地去秃头:)

编辑: 像这样的东西,但我有一种感觉,我的设计在这里是错误的。 我需要显示ub_properties中的所有字段以及来自oub_level_two和ub_utility的所有字段。 enter image description here

2 个答案:

答案 0 :(得分:1)

  

1)如何在保持数据完整性的同时进行设计?

     

2)我是否必须使用两个中间表?

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

  

3)如果是这样,我如何在同一个查询中查询两个中间表?这有什么意义吗?

您可以使用以下连接进行一次查询:

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

答案 1 :(得分:0)

您的问题的答案是您似乎需要五个表,三个实体表和两个联结表:

  • MainTable,绿色
  • MainValues,每个MainTable.id有一行,对应该id的值。
  • 选项
  • MainOptions,每个MainTable.id都有一行,对应该id的选项。

然后,您可以在使用连接的查询中使用这些。