今天负责人讨论数据库结构,非要3个字段以上来唯一的决定一条记录,不用ID,郁闷啊!大家说该不该用ID啊?

解决方案 »

  1.   

    那个人说的是复合主键!!!可以使用这种方式来唯一确定数据库中记录。如果你的表与别的表关联比较多,那么使用符合主键可能会降低效率,可以考虑使用ID莱维已确定一条记录。但是ID不是简单的1,2,3...,一个好的ID首先要保证没有重复、其次要保证有一定的可读性,例如我使用的ID是这样定义的YYYYMMDDHHMMSS###$$$,前面的一看就知道什么意思,###表示的是ID的来源(我的ID的来源非常多),$$$表示的是顺序号(我的程序是多线程的)。
    你可以考虑ID和符合主键同时定义的方案,这样一方面符合你的习惯,另外一方面你可以通过视图实现符合主键查询的功能!!!
      

  2.   

    这是要根据不同情况决定的,id是方便,但是对 需要查重的数据 或者 多地的数据 就不合适;如一个客户在多个分公司购买产品,你不可以用id记录一个客户成多个客户;如库存,需要 分公司编号+产品编号 唯一决定,用id可能会一个地区的某产品有多记录
      

  3.   

    你说的是主键吗?
    主键:field1+field2+field3
    请问,我知道主键的值要你找到这条记录,你的唯一ID可以做到吗?
    当然你会说:只要你记住ID就行了。
    事实上并不是这样的,一条记录是某一特定对象的相关信息描述,
    你给这个对象分配一个ID(如0001),更加增加了记忆的负担,
    你记住了0001(0001有什么用,谁知道他是什么),是不是还要将上面主键内容记住才能确认001是谁?
      

  4.   

    其实用不用id都无所谓的,如果你的表关联少,完全可以用自增id来给每条记录判断唯一性,不过最好用录入数据本身带有的唯一性特征做主键,id只是辅助作用。
      

  5.   

    联合主键什么时候用?我举个简单例子楼主就明白:有一表TABLE1,里面存放新闻记录,字段有TITLE,CONTENT,PHRASE等,该数据库要求在网上发布。很明显,新闻不要求重复,因此我们选定title+content为主键,这样我可以保证我的数据库里的新闻没有重复的,反之此时用id就无法达到要求
      

  6.   

    to lonaerd(罗纳尔多) :
    但是我也可以用ID来唯一的表示一条记录啊,然后在存放新闻信息时判断有无重复内容啊。不过这样是麻烦了一点。
      

  7.   

    r_james(james) :
    在主键内实行多级编码的方式,是不是就是你的主健的内容是多个意思组合起来?
    就象YYYYMMDDHHMMSS###$$$呢?
    我以前做的一个考勤系统,其中主健就是采用
    时间+员工号+am/pm+/sb/xb
    其中/sb/xb表示上下班登记
      

  8.   

    都这么复杂啊。大家有没有听过ms的GUID啊,声称几个世纪都不会重复!
      

  9.   

    呵,我也喜欢用YYYYMMDDHHMMSS+RANDOM的3-8位。若还不爽可把员工帐号007加在随机数前我现在又更觉得用天数,这样更短了。即从2000年开始算今天是第700天,前补一个0,即0700,才4位,就比YYYYMMDD省了4位了,别说你的系统能用到2030年。那就用5位吧,补两个0,可用300年的系统。秒数也用小时*3600+分种*60+秒,也只有5位数,不过省这一位数就有点小题大作了
      

  10.   

    To xiaoyuer0851(小鱼儿0851):对!多级编码的是比较先进的处理方式(我认为)!不过我现在看到的有多级编码的项目中的多级编码使用的不多,即使使用了也不规范,这样就很难体现出它的优点!更重要的是开发环境中对多级编码并没有更大的支持,所以要想在一个项目中使用多级编码,设计人员和编码人员要做的工作太多,这可能也是多级编码没能大量实现的一个原因吧!