如何有效地连接这 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 与最终与用户关联的联系人关联的地址和电话。
我正在开发一个在数据库中有 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 与最终与用户关联的联系人关联的地址和电话。