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

这是第一个示例:
mysql - ERD设计的利与弊-LMLPHP

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

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

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

mysql - ERD设计的利与弊-LMLPHP

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

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

最佳答案

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



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

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

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

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

10-09 06:21