【发布时间】:2013-01-31 03:37:03
【问题描述】:
如何规范化这个表:
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
【问题讨论】:
标签: sql database-design database-normalization