概要
知らなかったが MySQL で複合キーのユニーク制約を付けた場合、nullのあるカラムは許容してくれるみたいだ。
たとえば column_1
と column_2
で複合ユニーク制約のあるテーブルで、 以下2個のレコードを追加した場合、 ユニーク制約に引っ掛かりそうだが許容してくれる
column_1の値: AAA
column_2の値: NULL
column_1の値: AAA
column_2の値: NULL
こうすると例えば、1テーブルで複数の複合ユニーク制約があっても、問題なく扱うことが出来る
たとえば column_1 / column_2
の組み合わせと column_3 / column_4
の組み合わせでそれぞれ複合ユニーク制約がある場合、片方の組み合わせはNULLでも問題なくなるのだ
column_1の値: NULL
column_2の値: NULL
column_3の値: YES
column_4の値: YES
column_1の値: NULL
column_2の値: NULL
column_3の値: YES
column_4の値: NO
Ruby on Rails でのマイグレーションの例
普通に複合ユニーク制約を複数追加するだけで良い
class AddUniquenessToExampleTable < ActiveRecord::Migration[7.1]
def change
add_index :examples, [:column_1, :column_2], unique: true, name: 'index_examples_uniqueness_1'
add_index :examinees, [:column_3, :column_4], unique: true, name: 'index_examples_uniqueness_2'
end
end
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。