mysql – 如何在使用MySQL的Ruby on Rails迁移中处理太长的索引名称?

我正在尝试添加一个由四个关联表(用户大学subject_namessubject_types)的外键创建的唯一索引:

add_index :studies, ["user_id", "university_id", \
          "subject_name_id", "subject_type_id"],
          :unique => true

MySQL对索引名称的限制会导致迁移停止。这是错误消息:

表’学习’上的索引名’index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id’太长; 限制是64个字符

我该如何处理?我可以使用别名吗?


使用:

add_index :studies, ["user_id", "university_id", \
          "subject_name_id", "subject_type_id"], 
          :unique => true, :name => 'my_index'

更多信息在add_index中


您还可以更改create_table块中列定义中的索引名称(例如,从迁移生成器中获取)。

create_table :studies do |t|
  t.references :user, index: {:name => "index_my_shorter_name"}
end

在PostgreSQL,默认情况下限制为63个字符。因为索引名称必须是唯一的,所以有一点约定是很好的。我使用(我调整了示例来解释更复杂的构造):

def change
  add_index :studies, [:professor_id, :user_id], name: :idx_study_professor_user
end

正常的索引应该是:

:index_studies_on_professor_id_and_user_id

逻辑是:

  • index 变 idx
  • 奇异的表名
  • 没有加入词汇
  • 没有 _id
  • 按字母顺序

通常做这项工作。

添加评论

友情链接:蝴蝶教程