to 海阔天空:
谢谢交流!
我认为:在复合键比较大时,会很容易产生非主属性对该复合键的部分依赖,所以就只能达到最低的范式,即1NF,那么也就带来了严重的数据冗余和更新异常等问题。
多多指教!
呵呵!~

解决方案 »

  1.   

    楼上牛!hxd001_810(寒冬) 
    部分依赖不是符合键带来的,而是设计不够规范引起的,如果存在部分依赖,那应该把表拆分。  
     
      

  2.   

    在讨论这个问题前,应该把楼主说的复合索引的概念搞清楚:楼主所说的复合主键指的是物理存在的primary key,还是只是逻辑概念上的复合主键?!如果是物理上的primary key,就不是避免了,而是应该坚决杜绝!!涉及业务相关的字段,绝对不允许作为物理primary key。其害处很多:
    1、如果有频繁的业务修改,其相应主键字段有修改的可能。会导致非聚集索引中的主键信息相应修改(假如主键默认为聚集索引),而且容易造成表中记录的物理移动。
    2、可能导致业务信息外泄。
    3、生成有业务含义的字段需要按照一定的规则生成,不可避免使用varchar等字符串类型,影响插入和查询效率。
    4、业务规则发生变化,造成的影响容易扩大。
    ...所以建议设计表的物理primary key时采用无意义的数字(可以是顺序的)。
    如果楼主指的是逻辑主键,那么一般情况下是没有什么问题的。
    当需求人员在概要设计和逻辑设计阶段,按照业务模型划分的各个表就应该首先符合3nf,在物理设计阶段,可能由DBA进行进一步的优化。回退到1nf和2nf是非常普遍的事情。否则全是3nf和4nf的表的大系统,可以预期,其数据库服务器的CPU将很容易成为系统的性能瓶颈!
      

  3.   

    学习ashzs((可以包含中文字符))
      

  4.   

    lsqkeke(可可)太客气了,我都不好意思了。 :)