我有一个关于数据库设计的问题。
这是第一个示例:User
可能有多个Websites
,并且用户可以为其每个网站请求特定资源。所有请求都保存在RequestForResource
表中。
现在,如果我想查看请求资源的用户的名称,则必须将表RequestForResource
Website
和表User
连接起来。
为避免这种情况,我可以在RequestForResource
和User
表之间创建外键,如此处所示:
现在,为了获得用户名,我必须将表RequestForResource
和表User
连接起来,这对于SQL Server来说可能更容易,但是另一方面,我还有一个外键。
哪种方法更好和(或)更快,为什么?
最佳答案
您始终可以复制信息以提高执行速度。这称为:非规范化。是的,它可能会通过减少所需的索引查找数来加快查询速度。
但
您必须编写代码以确保数据一致:
通过第二种设计,可以为同一站点插入Website.User_idUser
和具有不同ID的RequestForResource.User_idUser
!根据设计,这是有效的(但可能无法满足您的业务规则)。
考虑更新仅引用网站表(User_idUser
,Website_idWebsite
)的外键约束(或添加第二个约束),并删除User
-RequestForResource
一个。
还可以考虑构建一个视图,以使用所有必需的信息(可能带有聚集索引)来查询数据。
关于mysql - ERD设计的利与弊,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31725014/