请准确理解ID(或者说主键Primary Key)的含义。主键应当是业务无关的(in most cases if not all)。它只代表了某条数据在数据库中的位置,方便查询定位以及其他表的对其的引用。举个例子(只是例子),假设你网上商店,某个ID=1的货物不卖了,要删掉,不再显示。难道因为这个原因,所有数据库里面的订单,购物车等等,全部要把对应的货物ID - 1吗??!!

解决方案 »

  1.   

    主键应当是业务无关的(in most cases if not all)。它只代表了某条数据在数据库中的位置,方便查询定位以及其他表的对其的引用。补充一下,连身份证号码都有可能升级。因此,如果某个数据库,有多达几百张表和客户这张表关联,并且如果客户表的主键用了身份证号码的话(也就是其他表里面也存了这个身份证做关联),当身份从15位升级到18位且有可能包含字符的情况下,这个库的所有表结构必须统统重新修改,而且,每条记录都要相应升级成新的身份证。而如果,当时设计的时候,客户表的主键是自增/Sequence/或者其他“业务无关”的类型——也就是只代表这个记录的位置而已——在身份证升级的时候,唯一要做的工作,就是把客户表的身份证字段的结构和数据调整一下,其他几百张表根本不需要任何处理。
      

  2.   

    你完全可以在加入一个排序id(orderid) 来控制排序的,主键完全不需要变化。
      

  3.   

    无法做到自动填补
    分页一般用limit 来做
      

  4.   


    多谢!也就是说具体问题只能通过具体的sql语句和业务逻辑解决,是这样吗?
      

  5.   


    这好像跟操作主键id难度是一样大啊每次orderid重新都赋一遍值,好像数据量大了行不通的。。