mysql/sql都提供自增主键,但oracle没有,但可以通过序列来生成。
现在的问题,在与其他表进行数据关联时,如果用这个自增主键来关联,如果遇到数据损坏丢失还原的情况,那么新数据的主键值有变化,导致之前与之关联的数据都需要进行修改。
我现在的做法是:系统有一个主键(自动生成),但是与其他表的关联时,不使用这个主键,我在表中又建立一个唯一键(32位的unid),这个唯一键是程序生成的,所有的数据关联用这个唯一键进行关联。 但总是感觉这样做有些多余,另外,如果是用这个唯一键进行关联,会不会有性能问题,给这个唯一键建立索引能否解决?

解决方案 »

  1.   

    你是怎么还原的?怎么会主键值变了呢?
    另外,你这样做的话,还不是直接用guid来做主键,主键会自动创建索引,在外键上建立索引就行了。
      

  2.   

    unique或pk都会自动建立唯一性索引
      

  3.   


    如果是自增主键,假使我误删除了一条数据,我再insert一下还原这条数据,但是insert之后主键值已经变了。
      

  4.   


    自增主键生成比较简单,而且对单表的查询应该比较快。 其实这个问题的根本就是:要不要用自增主键做主外键关联?  我的建议是使用自增 键,但不要用自增主键做关联,可以用其他业务字段(如果有),或者如果没有这样的业务字段,我就生成一个无意义的guid,用这个来进行数据关联。
      

  5.   


    就算存在字段关联,现在很多人在数据库中不建议做主外键约束的,说是有性能问题,具体不太清楚。  对于数据库操作,很难避免人工失误的,管理员误删除数据的情况很难避免,前两个月,有个数据库管理员操作时把一个几千万数据的表直接truncte了,幸亏通过日志还原出来的,否则就滚蛋了,原因是他用客户端连接了生产环境和开发环境,操作时把生产系统当开发系统操作了。