复合主键一般需要满足:列类型够窄、自增,这两个要求的时候作为主键比较合适,否则建议优先使用自增序列

解决方案 »

  1.   

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