- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于数据库设计的问题。
用户
可能有多个网站
,并且用户可以为他的每个网站请求特定资源。所有请求都保存在 RequestForResource
表中。
现在,如果我想查看请求资源的用户的名称,我必须连接表 RequestForResource
Website
和表 User
。
为了避免这种情况,我可以在 RequestForResource
和 User
表之间创建外键,如下所示:
现在,为了获取用户名,我必须连接表 RequestForResource
和表 User
这对于 SQL Server 来说可能更容易,但另一方面我多一个外键。
哪种方法更好和(或)更快,为什么?
最佳答案
您始终可以复制信息以提高执行速度。这称为:非规范化。是的,它可能会通过减少所需的索引查找次数来加快查询速度。
但是
您必须编写代码以确保数据一致:使用第二种设计,可以为同一站点插入具有不同 ID 的 Website.User_idUser
和 RequestForResource.User_idUser
!根据设计,这是有效的(但这可能不满足您的业务规则)。
考虑更新仅引用 Website 表(User_idUser
、Website_idWebsite
)的外键约束(或添加第二个)并删除 User
-RequestForResource
一个。
还可以考虑构建一个 View 来使用所有必需的信息(可能使用聚集索引)查询数据。
关于mysql - ERD设计的正反面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725014/
你好,在 de Doctrine 文档中说:“Doctrine 只会检查关联的拥有方是否有更改。” 我在这里阅读了其他帖子,但我找不到一个例子让我理解为什么如果反面发生变化,这不会被 Doctrine
我是一名优秀的程序员,十分优秀!