新手问题 想改变 Rails 生成的表的默认主键的数据类型怎么弄

lzj_ykds · 2015年06月26日 · 最后由 ericguo 回复于 2015年06月26日 · 2660 次阅读

我想建一个表,比如在 sqlite 中,系统会默认增加 id 列为主键,类型为整型。但是现在我想改变这个 id 的数据类型为字符串型,列的名字不用改变,migrate 的那个文件怎么写好。

这个我也看过了,照着试验了一下,没成功。主要我想列的名字还是 ID,但是想改变一下数据类型为字符串,还用这个列作主键,没成功

这是在给自己挖坑啊,能说说目的是什么吗?

比如我有一个高考分数的数据,其中一个是考号,姓名,分数,我就想用考号做主键,这个考号是字符串类型,应该没有重复值,然后我觉得列的名字用 ID 也行。当然也可以把学号起个不同的名字,用系统默认生成的 id 做主键,但是我怎么感觉都有点多余呢

#4 楼 @lzj_ykds 不多余,新建一个字段是最佳实践,给它加上索引。

很多被认为不变的数据都是有可能变化的,例如身份证号从 15 位增加到 18 位。如果某一天数据模式变了(例如加几个填充位),而这个字段被用作数据关联的外键,那么就要做大量数据迁移。

@rei 你这么一说还是有道理奥,谢谢

用 auto increased int 作为 primary key 还有性能优势,你看 primary key index 的实现原理。 所以,不要改,直接加字段就好了。

这样申明即可。

Migration:

create_table :reject_codes, id: false, primary_key: 'reject_code' do |t|
  t.string  :reject_code, null: false
  t.string  :reject_type
  t.string  :sap_location
end

Model

class RejectCode < ActiveRecord::Base
  self.primary_key = 'reject_code'
  validates :reject_code, presence: true, uniqueness: true
end

另外如果只是想单纯改变 ID 的类型,我觉得绝对是不推荐的,没试过,楼主想试可以试试,不过 Rails 开发要顺势而为,逆框架而运功的话。。。你就是高级开发人员啦^_^

需要 登录 后方可回复, 如果你还没有账号请 注册新账号