none
这种情况下如何让数据分割到不能在分割? RRS feed

  • 问题

  •     学SQL之初,范式定律规定:数据库的各个数据应该分割成到最小、不能再分割的部分,然而在实际中,我遇到了一个要违背该定律的情况。
    -----
        举例说明:
        我有三个门面,分别是A、B、C,门面一年一租,合同一年一签。
        1.2010年有3个人租了我的门面,张三租了A,李四租了B,王五租了C。一共签了3份合同,分别是a,b,c。
        2.2011年有2个人租了我的门面,张三租了A、C,李四租了B,一共签了2份合同,分别是a+c、b。
        3.2012年有2个人租了我的门面,张三租了A,李四租了B、C,一共签了2份合同,分别是a、b+c。
        4.2013年有1个人租了我的门面,张三租了A、B、C,一共签了1份合同,a+b+c
        因为我的程序记录的是以每一份合同所填写的门面为最小单位,那么我要看A门面的收入情况就只有2010和2012年可以(因为2011、2013年A门面都和其他门面一起签订的合同),要对A门面历年来的收入情况作对比就会缺少2010、2012年的数据
    -----
        有个蠢办法可以解决这个问题:那就是一个门面就签一个合同,比如2013年张三租了A、B、C,就由原来的“一共签了1份合同,a+b+c”变成了“一共签了3份合同,分别是a,b,c”,这样2013年A门面的数据就出来了。
        然而在实际操作中往往是“2013年张三租了A、B、C,一共签了1份合同,a+b+c”这种情况居多。
        有什么其他更合理办法可以解决这个问题么?

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2012年1月29日 4:15

答案

全部回复

  • 数据库设计要求遵守范式(至少是第三范式)

    但是实际我们在使用中,由于各种原因(比如性能,冗余)常常是违反范式,这个称谓反范式设计,这个是容许的。

    没有绝对的,只有最合适的。

     


    family as water
    2012年1月29日 14:04
  • 谢谢您的回复!有更合适的方法来解决这个问题么?
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2012年1月30日 10:12
  • It depends on how you query those tables.
    2012年1月30日 14:33