制約とは?
制約はDBにおいて、保存するデータに制限をかけるために
カラムに設定できるもののこと。
バリデーションに似ている、DBに直接設定しているため
後になって変更すると、手間がかなりかかるっぽい、、、
そのため、設計の際にしっかり考えて置く必要がある
- NOT NULL制約
- 一意性制約/UNIQUE制約
- 主キー制約
- 外部キー制約
の順に紹介
NOT NULL制約
データ保存の際に、空の状態で保存できないようにするための制約。
難しく言うと、テーブルの属性値にNULL(空の値)が入らないように制限する制約。
記述例
| Column | Type | Options |
| ------------------ | ---------- | ------------------------------ |
| user | references | null: false, foreign_key: true |
| name | string | null: false |
| info | text | null: false |
一意性制約/UNIQUE制約
テーブル内に、同じ情報のレコードの保存を制限するための制約。
emailアドレスやユーザー名など、被らせないように実装したいときに使う
__unique: true__と記述する。
主キー制約
notnull制約と一意性制約の合体のような制約。
空の状態、かつ重複しない情報のみを保存できる。
railsでは、idカラムに元々設定されているため、
あんまり使うことないのかなって感じ、、、まあそのうち使いそう(笑)
外部キー制約
外部キーの対応するデータが必ず存在しなくてはいけないという制約。
外部のテーブルを紐付けたいときに、references型と一緒に使うことが多いのかな。
マイグレーションファイルには
t.references :user, foreign_key: true
のように記述する。
このように記述すると勝手にカラム名はuser_idになる。
マイグレーションファイル記述例
class CreateMessages < ActiveRecord::Migration[6.0]
def change
create_table :messages do |t|
t.string :content
t.references :room, foreign_key: true
t.references :user, foreign_key: true
t.timestamps
end
end
end