programing

레일 이행(MySQL)에서 새로운 컬럼의 위치를 지정할 수 있습니까?

javaba 2022. 9. 16. 22:08
반응형

레일 이행(MySQL)에서 새로운 컬럼의 위치를 지정할 수 있습니까?

MySQL을 통해 열을 추가할 경우 테이블에서 해당 열이 AFTER 수식자를 사용할 위치를 지정할 수 있습니다.그러나 Rails 마이그레이션을 통해 add_column을 실행하면 테이블 끝에 열이 생성됩니다.

추가된 기둥의 위치를 지정하기 위한 레일 마이그레이션 기능이 있습니까?

이제 Rails 2.3.6+에서 : after 매개변수를 전달하면 가능합니다.

https://rails.lighthouseapp.com/projects/8994/tickets/3286-patch-add-support-for-mysql-column-positioning-to-migrations

이 기능의 이점을 느끼지 못하는 모든 사용자에게: ORM 이외에서는 데이터베이스를 참조하지 않습니까?어떤 UI로 보더라도 외부 키, 상태 열, 플래그 등을 모두 그룹화하는 것이 좋습니다.이것은 애플리케이션에 영향을 주지 않지만, 확실히 데이터 리뷰의 속도를 높일 수 있습니다.

예, 그러시죠.

  • 간단한 답변:

    add_column :users, :gender, :string, :after => :column_name
    
  • 장황한 답변:

예를 들어 "사용자 이름" 열 뒤에 "성별" 열을 "사용자" 테이블에 추가한다고 가정해 보겠습니다.

  1. 「」라고 입력합니다.rails g migration AddGenderToUser gender:string
  2. 다음과 같이 생성된 마이그레이션에 "after => :syslog"를 추가합니다.

    class AddSlugToDictionary < ActiveRecord::Migration
      def change
        add_column :users, :gender, :string, :after => :username
      end
    end
    

이 추가 기능을 ActiveRecord Mysql 어댑터에 추가하는 패치를 만들었습니다.마스터와 2-3 안정에 효과가 있습니다.

https://rails.lighthouseapp.com/projects/8994/tickets/3286-patch-add-support-for-mysql-column-positioning-to-migrations

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

반응형