【Ruby】*制約*

「制約」をテーマに書きたいと思います!

 

■制約とは
DBのテーブルのカラムに対して制約をかけ
不正なデータや予期せぬデータが保存されることを防ぐことです。
制約とは特定のデータの保存を許さないためのバリデーションです。
例:同じメールアドレスのユーザーを登録できないようにする
例:名前のデータが空のユーザーを保存できないようにする
 
■制約の種類(4種類)
①NOT NULL制約
②一意性制約
③主キー制約
④外部キー制約
 
ではそれぞれについて見ていきましょう!
 
①NOT NULL制約
 テーブルの属性値にNULL(空の値)が入ることを許さない制約です。
 例:usersテーブルのnameというカラムにNOT NULL制約を設定すると
   nameが空(nil)のレコードは保存できなくなります
   ※名前がないと保存できないということですね!
 
記述はこうです!マイグレーションファイルに記述します。

f:id:strangechameleon8701:20190118211637p:plain

 
②一意性制約

 カラムに設定する制約です。
 「一意性」とはユニークで他とは違うという意味です。
 一意性制約を設定したカラムには同じ値を設定できなくなります
 例:Aさんのemailが「test@gmail.com」だった場合

   emailが、同じ「test@gmail.com」の他のレコードを保存できなくなります。

 一意性制約はテーブル内で重複するデータを禁止する制約です。

 emailカラムに対して一意性制約を設定すると同emailのレコードは保存できません。

 Railsでは、カラムに対してadd_indexメソッドを用いることで

 一意性制約を付けることができます。

 

記述はこうです!マイグレーションファイルに記述します。

f:id:strangechameleon8701:20190118213204p:plain

 

③主キー制約

 レコードが必ず主キーを持っていなくてはいけないことを保証するための制約です。
 主キーである属性値が必ず存在してかつ重複していないことを保証する制約です。
 ※Railsでテーブルを作成する際、主キー制約は元々実装されています。

  Railsでは主キーはidカラムとして自動で作成されます。
  つまりidカラムの値は重複しないようにできています。

 

④外部キー制約

 外部キーに対応するレコードが必ず存在することを保証する制約です。 
 例:student_idが3のレコードを保存するためには

   studentsテーブルにidが3のレコードが存在していなくてはいけません。
 外部キーのカラムに値があっても、その値を主キーとして持つ

 他のテーブルのレコードがなければいけません。

 

記述はこうです!マイグレーションファイルに記述します。

f:id:strangechameleon8701:20190118220838p:plain

 

ユーザー登録の実装や

異なるテーブル同士の紐付けが必要になるような実装を行う際は

この「制約」について理解しておかなければと思います!

 

以上「制約」についてでした!