如何有效地连接这 3 个表?

How to efficiently join these 3 tables?

我正在开发一个在数据库中有 4 个表的个人议程。如何获取用户对应的联系人以及该用户联系人对应的地址和电话?

关注 diagram ER.

我还不是很有经验,也没有开发过真正的系统不知道这个关系结构是否正确。如果您有任何有助于改进或纠正此结构的东西,我将不胜感激。

注意:我正在使用 PostgreSql

是这样的吗?

SELECT  *

FROM    contacts
    JOIN user ON contacts.id_user = user.id
    JOIN addres ON contacts.id_addres = addres.id
    JOIN phones ON contacts.id_phone = phone.id

也许您想要 LEFT JOIN,但这取决于您的数据和要求。当然,您可以将 * 替换为您需要的列的名称。

因为 PG SQL 引擎没有聚集索引,也没有组织索引 Table,添加一个“超级键”而不是用三个 FK 列创建 PRIMARY KEY 效率不高.所以放弃你额外的 PK,让三个 FK 列成为 PK。

基于我根据@SQLpro 的解释所做的 diagram 这是我的问题的解决方案:

SELECT * FROM contacts 
         INNER JOIN user ON contacts.id_user = user.id
         INNER JOIN addres ON adresses.id_contact = contacts.id
         INNER JOIN phones ON phones.id_contact = contacts.id

此 sql returns 与最终与用户关联的联系人关联的地址和电话。