我发现这个sql 版里就求sql语句最好使,发出去马上有跟帖讨论的。
其他问题一般都石沉大海。我觉得不满足第三范式。因为存在传递依赖。

解决方案 »

  1.   

    你这个第一范式都不满足,totalprice明显可以再分
      

  2.   

    这个totalPrice 其实是间接依赖于主键。这个也有可能是反规范化的方式,可以提高性能,虽然没有满足3NF
      

  3.   

    这个显然是违反第一范式呢,
    totalprice是一个复合属性。
      

  4.   

    补充两句:
    1、是否可以再分,取决于业务。
    例如,平时我们存储姓名的时候,姓名其实也还是可以再拆分成姓和名的,但是有时业务并不需要你拆分的如此细致,那么这时候我们可以认为姓名并非是一个复合属性。同理,地址的存放也是如此。
    而在本例中,你的业务是要求你存放单价和数量的,也就说明总价在业务上是一个可拆分的属性。所以才有了上面的违反第一范式的结论。
    2、数据冗余
    由于你此处存放的总价是由单价×数量的来的,实际上是数据的冗余(你可以把这种情况等同于一个属性多次存放),而并非理解为传递性依赖。
    3、解决方法
    正如前面所说的,有时会以反规范化的形式处理,以提高性能。
    在SQL Server中,可使用计算列来处理你这种情况,而计算列是否实际存储,是可以通过参数来设置的。若设定为持久存储时,将可以在此计算列上添加索引以提高访问速度。