gpt4 book ai didi

mysql - ERD设计的正反面

转载 作者:行者123 更新时间:2023-11-29 12:04:40 25 4
gpt4 key购买 nike

我有一个关于数据库设计的问题。

这是第一个示例: Database schema

用户可能有多个网站,并且用户可以为他的每个网站请求特定资源。所有请求都保存在 RequestForResource 表中。

现在,如果我想查看请求资源的用户的名称,我必须连接表 RequestForResource Website 和表 User

为了避免这种情况,我可以在 RequestForResourceUser 表之间创建外键,如下所示:

Schema 2

现在,为了获取用户名,我必须连接表 RequestForResource 和表 User 这对于 SQL Server 来说可能更容易,但另一方面我多一个外键。

哪种方法更好和(或)更快,为什么?

最佳答案

您始终可以复制信息以提高执行速度。这称为:非规范化。是的,它可能会通过减少所需的索引查找次数来加快查询速度。

但是

您必须编写代码以确保数据一致:使用第二种设计,可以为同一站点插入具有不同 ID 的 Website.User_idUserRequestForResource.User_idUser!根据设计,这是有效的(但这可能不满足您的业务规则)。

考虑更新仅引用 Website 表(User_idUserWebsite_idWebsite)的外键约束(或添加第二个)并删除 User -RequestForResource 一个。

还可以考虑构建一个 View 来使用所有必需的信息(可能使用聚集索引)查询数据。

关于mysql - ERD设计的正反面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725014/

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