DB规范化是否会影响查询速度?

时间:2016-09-06 21:01:40

标签: database database-design relational-database

想象一下以下数据库模型:

Volunteer:
-id(PK)
-person_id
-organization
-hours_a_week

person_id是外键。现在,Person有2个外键本身指向Address& Workplace。我当然希望在我的应用程序中显示志愿者的联系信息,我将从Person模型中获取。但我还要展示志愿者的地址。

所以我的问题是:升级Volunteer会如下所示 违反任何规范化规则?引起关注的原因是,在应用程序的某些部分,我只关心志愿者的地址 - 通过将志愿者表更改为这样,我只需要在这些情况下查询地址表,这会显着提高查询速度吗?

Volunteer:
-id(PK)
-person_id
-address_id
-organization
-hours_a_week

2 个答案:

答案 0 :(得分:3)

是的,如果您将address_id放在志愿者表格中,获取志愿者地址的查询会更快。

不,你不应该这样做。

为什么?

单个查询的速度不是唯一的考虑因素,并且在整体系统性能方面可能无法检测到非规范化对性能的影响 - 数据完整性和均衡性能都应该是设计的目标。

答案 1 :(得分:2)

"将志愿者升级为违反任何规范化规则?"

假设"多个志愿者" (允许并支持组织Y的X小时和组织Q的P hrs的同一个人),并假设每个人的address_id值必须与Person中所述的相同,是的。

您将拥有Person_id ===> Address_Id和志愿者表中的FD是非关键的。