想象一下以下数据库模型:
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
答案 0 :(得分:3)
是的,如果您将address_id放在志愿者表格中,获取志愿者地址的查询会更快。
不,你不应该这样做。
为什么?
单个查询的速度不是唯一的考虑因素,并且在整体系统性能方面可能无法检测到非规范化对性能的影响 - 数据完整性和均衡性能都应该是设计的目标。
答案 1 :(得分:2)
"将志愿者升级为违反任何规范化规则?"
假设"多个志愿者" (允许并支持组织Y的X小时和组织Q的P hrs的同一个人),并假设每个人的address_id值必须与Person中所述的相同,是的。
您将拥有Person_id ===> Address_Id和志愿者表中的FD是非关键的。