#制約の種類について
制約とは特定のデータの保存を許さないためのバリデーションの事。例えば同じメールアドレスのユーザーを登録できないようにする、名前のデータが空のユーザーを保存できないようにするといったことができるようになる。このように安全なデータ保存が実現する。主に下記の4つがある。
- NOT NULL制約
- 一意性制約
- 主キー制約
- 外部キー制約
NOT NULL制約
NOT NULL制約はテーブルの属性値にNULL(空の値)が入ることを許さない制約。例えば、usersテーブルのnameというカラムにNOT NULL制約を設定すると、nameが空(nil)レコードは保存できなくなる。
create_table :users do |t|
t.string :name, null: false
t.timestamps null: false
end
##一意性制約
一意性制約はカラムに設定する制約。一意性とはユニークで他とは違うという意味です。一意性制約を設定したカラムには同じ値を設定できなくなる。例えばAさんのemailが「test@gmail.com」だった場合、他にemailが「test@gmail.com」のレコードを保存できなくなる。
def change
add_column :users, :email, :string
add_index :users, :email, unique: true
end
##主キー制約
主キー制約は、主キーである属性値が必ず存在してかつ重複していないことを保証する制約。主キーに対してNOT NULL制約と一意性制約を両方設定するのと同義になる。Railsでテーブルを作成する際、主キー制約は元々実装されていて、Railsでは主キーはidカラムとして自動で作成されます。つまりidカラムの値は重複しないようにできている。
##外部キー制約
外部キー制約とは、外部キーに対応するレコードが必ず存在することを保証する制約。例えばstudent_idが3のレコードを保存するためにはstudentsテーブルにidが3のレコードが存在していなくてはいけない。
def change
create_table :scores do |t|
t.string :name
t.integer :score
t.references :user, foreign_key: true
t.timestamps null: false
end
end
foreign_key: trueとすることで外部キー制約を設定。
以上。