昨天开会讨论到一个数据库设计的问题:表t1有个字段id(主键、自增)、另外一个字段name。
表t2参照表t1,关于选择参照字段的说法。以前我都是t2表参照t1表的主键,然后有人提出说不能参照t1的id,说如果数据库迁移会产生问题,就是序列自增会产生问题。大家说说对这个的看法,是不是外键不适合参照自增的字段?

解决方案 »

  1.   

    还是id主键好些吧如果用name 要是name以后变了,怎么办
      

  2.   


    我也一直都是这么做的,不知道把这个数据库的数据转移到另外一个数据库中,那利用序列自增的id是不是得从1开始了,那其他表参照id的会不会就全部错位了?有没有人遇到这样的问题?
      

  3.   


    1, 很奇怪,oracle的主键怎么会有自增字段呢?
    2, 外键只对应关联表的主键。你说的参照自增字段,不知道你的参照是啥意思啥含义?
      

  4.   


    不会啊,oracle迁移的时候,是迁移所有相关的objects,当然包括序列对象了。序列怎么会从1开始呢。当然不会了。
      

  5.   


    恩,这个知道,如果迁移到比如mysql或者sqlserver这样会不会有问题?
    我也只是昨天听同事说到这个问题。就想看看大家的看法!欢迎继续讨论,呵呵
      

  6.   


    你迁移到mysql的时候,你的表设计都会变掉了,因为字段类型不一样。你需要调整很多很多,不光是序列字段,还有视图、存储过程、存储函数、任务调度等,序列主键只是一个很小很小的case而已。我只有见过mysql、sqlserver迁移到oracle的。实际中几乎没有碰到过oracle迁移到mysql、sqlsever中的。
      

  7.   


    你的同事的考虑跟外键无关,跟不同数据库服务商的规范有关。可不止一个序列上的差别,你如果设计oracle数据库的时候,还要考虑迁移到mysql、sqlserver、db2上面的时候是否方便的话。那我就不太好发表意见了。这个还真的不熟悉。不过一般生产环境,是什么数据库服务商,就都是按照服务商的软件的特性进行设计的,以达到最优性能,很少去考虑别的服务商的特性。
      

  8.   

    to oraclemch:那位同事就是针对外键关联的问题提出的如我帖子里所说的观点。跟不同数据库服务商的规范没有关系。