레일 이행(MySQL)에서 새로운 컬럼의 위치를 지정할 수 있습니까?
MySQL을 통해 열을 추가할 경우 테이블에서 해당 열이 AFTER 수식자를 사용할 위치를 지정할 수 있습니다.그러나 Rails 마이그레이션을 통해 add_column을 실행하면 테이블 끝에 열이 생성됩니다.
추가된 기둥의 위치를 지정하기 위한 레일 마이그레이션 기능이 있습니까?
이제 Rails 2.3.6+에서 : after 매개변수를 전달하면 가능합니다.
이 기능의 이점을 느끼지 못하는 모든 사용자에게: ORM 이외에서는 데이터베이스를 참조하지 않습니까?어떤 UI로 보더라도 외부 키, 상태 열, 플래그 등을 모두 그룹화하는 것이 좋습니다.이것은 애플리케이션에 영향을 주지 않지만, 확실히 데이터 리뷰의 속도를 높일 수 있습니다.
예, 그러시죠.
간단한 답변:
add_column :users, :gender, :string, :after => :column_name
장황한 답변:
예를 들어 "사용자 이름" 열 뒤에 "성별" 열을 "사용자" 테이블에 추가한다고 가정해 보겠습니다.
- 「」라고 입력합니다.
rails g migration AddGenderToUser gender:string
다음과 같이 생성된 마이그레이션에 "after => :syslog"를 추가합니다.
class AddSlugToDictionary < ActiveRecord::Migration def change add_column :users, :gender, :string, :after => :username end end
이 추가 기능을 ActiveRecord Mysql 어댑터에 추가하는 패치를 만들었습니다.마스터와 2-3 안정에 효과가 있습니다.
mysql에 따라 다를 수 있지만 마이그레이션의 이동성이 저하되는 것은 아닙니다(다른 어댑터는 추가 포지셔닝 옵션을 무시합니다).
것 .add_column
메서드(이행)입니다.그러나 마이그레이션은 리터럴 SQL 실행을 지원합니다.레일즈
class AddColumnAfterOtherColumn < ActiveRecord::Migration
def self.up
execute "ALTER TABLE table_name ADD COLUMN column_name INTEGER
AFTER other_column"
end
def self.down
remove_column :table_name, :column_name
end
end
레일 내에서 기둥의 위치를 지정할 수 없습니다.실제로 컬럼이 이행 시에 이름 붙여진 순서대로 작성되는 것은 우연의 일치일 뿐입니다(따라서 신뢰할 수 없습니다).
표 내의 열 순서는 거의 관련성이 있으며, 그렇게 해야 합니다.일반적인 "이유"는 "SELECT *"를 실행할 때 특정 서브셋을 표시할 수 있기 때문입니다.그러나 이는 좋은 이유가 아닙니다.
다른 이유는 아마도 디자인 냄새일 것입니다만, 제가 틀린 타당한 이유를 알고 싶습니다!
플랫폼에 따라서는 NULL일 가능성이 가장 높은 컬럼을 마지막에 배치함으로써 (미소한) 공간과 퍼포먼스를 절약할 수 있습니다(DMBS는 NULL 값을 추적하기 위해 디스크 공간을 사용하지 않기 때문에). 단, 1980년대 하드웨어에서 실행해야 합니다.
언급URL : https://stackoverflow.com/questions/371796/in-a-rails-migration-mysql-can-you-specify-what-position-a-new-column-should
'programing' 카테고리의 다른 글
Mysql 성능 불량 (0) | 2022.09.16 |
---|---|
"|"를 사용하지 않고 두 세트를 한 줄로 연결하는 방법 (0) | 2022.09.16 |
""", """ 및 페르시아어의 차이점 - Mysql (0) | 2022.09.16 |
긴 패스워드(72자 이상)를 복어와 해시하는 방법 (0) | 2022.09.16 |
파일 리스트가 있는 각각에 대해 사용할 수 없음 (0) | 2022.09.16 |