我想建一个表,比如在 sqlite 中,系统会默认增加 id 列为主键,类型为整型。但是现在我想改变这个 id 的数据类型为字符串型,列的名字不用改变,migrate 的那个文件怎么写好。
http://stackoverflow.com/a/4769884
这个我也看过了,照着试验了一下,没成功。主要我想列的名字还是 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 开发要顺势而为,逆框架而运功的话。。。你就是高级开发人员啦^_^