Sequelでテーブルにユニーク制約をかける
MySQLではユニーク制約を複数のカラムの組み合わせに対してかけることができる.
例えば,fruit - countryというカラムがあったとして,
というレコードを登録できるが,
- 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
とやるだけでいい.
ユニーク制約とユニークインデックスの違いは,たぶん,インデックスが作成されるか作成されないかのどちらかだろう.