如何对该表进行规范化:
Frequency (PK) Year (PK) Quarter (PK) Month (PK) Value
Monthly 2013 1 1 1
Quarterly 2013 1 0 2
Yearly 2013 0 0 3该表不是第二范式,因为当频率=年值取决于主键的子集(频率,年份)
我考虑过添加一个代理键。则季度和月份列可以为空。
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发布于 2013-01-30 17:04:17
这个表可能没有[Frequency]和[Quarter]列。
你为什么要把这些放进去?在此表中预先计算季度和年值是否有任何附加值?评论:因为它的值不只是它的月份的总和。
所以[Quarter]是强制性的。
这也是可行的:
Year (PK) Quarter (PK) Month (PK) Value
2013 1 1 1
2013 1 0 2
2013 0 0 3年度业绩:
SELECT
[Value]
FROM [Table1]
WHERE [Year] = 2013 AND [Quarter] = 0 AND [Month] = 0季度业绩:
SELECT
[Value]
FROM [Table1]
WHERE [Year] = 2013 AND [Quarter] = 1 AND [Month] = 0月度结果:
SELECT
[Value] AS [Results]
FROM [Table1]
WHERE [Year] = 2013 AND [Quarter] = 1 AND [Month] = 1这对你有用吗?
发布于 2013-01-31 03:37:03
我假设几年的数据可能是这样的。如果我错了,请纠正我。(我将忽略使用零是一个好主意还是一个坏主意的问题。)
Frequency Year Quarter Month Value
--
Monthly 2012 1 1 1
Monthly 2012 1 2 2
Monthly 2012 1 3 3
Monthly 2012 2 4 4
Monthly 2012 2 5 5
Monthly 2012 2 6 6
Monthly 2012 3 7 7
Monthly 2012 3 8 8
Monthly 2012 3 9 9
Monthly 2012 4 10 10
Monthly 2012 4 11 11
Monthly 2012 4 12 12
Quarterly 2012 1 0 2
Quarterly 2012 2 0 5
Quarterly 2012 3 0 8
Quarterly 2012 4 0 11
Yearly 2012 0 0 3
Monthly 2013 1 1 1
Monthly 2013 1 2 2
Monthly 2013 1 3 3
Monthly 2013 2 4 4
Monthly 2013 2 5 5
Monthly 2013 2 6 6
Monthly 2013 3 7 7
Monthly 2013 3 8 8
Monthly 2013 3 9 9
Monthly 2013 4 10 10
Monthly 2013 4 11 11
Monthly 2013 4 12 12
Quarterly 2013 1 0 2
Quarterly 2013 2 0 5
Quarterly 2013 3 0 8
Quarterly 2013 4 0 11
Yearly 2013 0 0 3从这些数据中,我们可以推断出两个函数依赖关系。函数依赖回答了这个问题:“给定属性'X‘的一个值,我们是否知道且只知道属性’Y‘的一个值?”
给定属性集{Year,Quarter,Month}的一个值,我们知道且仅知道属性集{Frequency}的一个值。给定属性集{Year,Quarter,Month}的一个值,我们知道且只有一个属性集{ value }的值。
您遇到的问题涉及到将"Frequency“作为主键的一部分。真的不是。
https://stackoverflow.com/questions/14599362
复制相似问题