最近在设计数据库表时,碰到一些困惑:
假如有如下的表tbl(s1,s2).表名tbl,有两个字段s1和s2
其中s1和s2不能都一样,即(s1,s2)为主键。像这种情况,我一般都这么设计tbl(id,s1,s2),即加一个字段id(主键,自动增长),因为我感觉这种方式查询起来比较方便。请教大家,哪种设计方式比较合理?或者要遵循什么原则?好像跟平时讲的范式也都没矛盾

解决方案 »

  1.   

    那s1、s2到底能不能重复,
    能的话自增挺好,你别以id为准,断号小问题;如果不能得话,你添加数据之前难道还搞个程序先去库里验证一下。
      

  2.   

    既然(s1,s2)为主键了,何必要加id主键呢。那这个(id,s1,s2)也算是主键了,前面是不是还要加哦不太理解楼主,呵呵!直接建就是可以的。
      

  3.   


    我的意思是:
     如果表设计成tbl(s1,s2),那么就以(s1,s2)为主键
     如果表设计成tbl(id,s1,s2),那么就以id为主键(但s1,s2也是要满足不能完全一样),这时可能就要手动检查s1,s2是否有重复的情形。。
      举例如下:
               s1 s2
              1  2
              1  3
         这样的数据是可以的,只要s1和s2不是完全一样就可以。。实际开发中,哪种方式比较好呢?
      

  4.   

    如果表设计成tbl(s1,s2),那么就以(s1,s2)为主键 
    如果表设计成tbl(id,s1,s2),那么就以id为主键(但s1,s2也是要满足不能完全一样),这时可能就要手动检查s1,s2是否有重复的情形。。 加 unique index 在 s1, s2.