未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

Sequelでテーブルにユニーク制約をかける

MySQLではユニーク制約を複数のカラムの組み合わせに対してかけることができる.

例えば,fruit - countryというカラムがあったとして,

  • apple - america
  • banana - england
  • apple - japan
  • banana - japan

というレコードを登録できるが,

  • apple - america
  • banana - england

などのような,既に存在している組み合わせを制限したい.

一般的に,MySQLでは,テーブルに対してユニーク制約をかけるか,

create table fruits (

id integer primary key, name varchar(10), country varchar(10),

unique(name, country));

 もしくは,ユニークインデックスを作成する.

create unique index index_fruits_on_name_and_country on fruits (name, country);

 Sequelでは,マイグレーションもしくはテーブル作成時に,

# ユニーク制約

unique [:name, :country]

# ユニークインデックス

index [:name, :country], name: :index_fruits_on_name_and_country

とやるだけでいい.

ユニーク制約とユニークインデックスの違いは,たぶん,インデックスが作成されるか作成されないかのどちらかだろう.