gpt4 book ai didi

mysql 多个外键与内连接

转载 作者:行者123 更新时间:2023-11-29 23:55:21 25 4
gpt4 key购买 nike

对同一个父表使用两个外键以避免内部联接是否有意义?

表:user_profile

id1, userid, username, firstname

表:user_hobby1

id2, userid(fk), hobby, movies

表:user_hobby2

id3, userid(fk), firstname(fk), hobby, movies

我想从上表中选择所有名字和爱好。我不确定 user_hobby1 或 user_hobby2 是否是性能方面最好的设计?一个添加额外的外键,另一个需要连接。

查询1:

Select firstname, hobby 
from user_hobby2;

查询2:

Select p.firstname, h.hobby
from
user_profile p
inner join user_hobby1 h on u.userid=h.userid;

最佳答案

将属性值从用户表复制到爱好表中并不是“外键”,而是冗余。

避免 JOIN 操作的方法通常无法满足我们的性能目标,而 JOIN 操作是关系数据库操作的正常部分。

我会选择标准化设计作为第一次剪辑。每个属性都应该依赖于键、整个键,并且只依赖于键。 “firstname”属性取决于用户的 ID,而不是爱好。

有时,我们确实通过在数据库中引入冗余来获得性能优势。我们必须以受控的方式做到这一点,并确保我们不会出现更新异常。 (考虑一下,如果“firstname”属性的值被更新,我们要应用哪些更改...我们是否对 user 表、user_hobby 表或两者进行更改。

很可能,“firstname”在用户表中是唯一的,因此我们绝对不希望外键引用该列;我们希望引用用户表的外键引用该表的主键。

如果 user_hobby 只与一个用户相关,则在 user_hobby 和 user 之间定义两个外键是没有意义的。我们只需要一个外键...我们只需将 user 表中的 id 存储在 user_hobby 表中即可。

关于mysql 多个外键与内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com