如何规范化此表:
Frequency (PK) Year (PK) Quarter (PK) Month (PK) Value
Monthly 2013 1 1 1
Quarterly 2013 1 0 2
Yearly 2013 0 0 3
该表不是第二范式,因为当频率 = 年度值取决于主键的子集(频率、年份)
我想添加一个代理键。然后 Quarter 和 Month 列可以为空。
Surrogate (PK) Frequency Year Quarter Month Value
1 Monthly 2013 1 1 1
2 Quarterly 2013 1 NULL 2
3 Yearly 2013 NULL NULL 3
但这并不能解决问题,因为第二范式定义也适用于候选键。根据频率将表分成三个表听起来不是一个好主意,因为它会在我的业务逻辑中引入 if 语句:
if (frequency == Monthly) then select from DataMonthly