NOT NULL制約・DEFAULT制約・UNIQUE制約
NOT NULL制約とは
NOT NULL=空のカラムを禁止する制約
NOT NULL制約はデータベースに保存するときに空のまま保存することを禁止します。
つまり、何かしらの値が入っているかどうかを検証してくれる役割を持っています。
投稿する際などに、フォームの中が空の状態で投稿できてしまうとダメな場合に設定していると便利です。
空(NULL)を禁止する場合には「null: false」をオプションに指定します。
「null: false」はテーブルに記述。
下記のバリデーションも、指定した属性(:カラム名)が存在しているかどうかを確認します。
以下の記述はモデルに記述。
validates :カラム名, presence:true
Not Null制約とバリデーションの違い
「Not Null制約」とバリデーション「presence: true」の違いは、空文字(””)が許可されるかされないかの違いになります。
「Not Null制約」では空文字は許可される一方で、バリデーションの「presence: true」では空文字は許可されません。
nullも空文字も弾きたい場合はどのように記述すれば良い?
結論、以下の3点を記述することが理想形となります。
- フォームに「required: true」
- モデルに「presence: true」
- テーブルに「null: false」
DEFAULT制約とは
DEFAULT = データの初期値を設定する機能
初期値を設定しておく制約です。「default: ' '」を付けます。
DEFAULT制約を設定すると、そのカラムにデータが挿入されなかった場合に、デフォルトの値が自動的に代入されます。
つまり、カラムがNULLのままである場合でも、デフォルト値がセットされるということです。
UNIQUE制約
UNIQUE = 一意性(重複を禁止する)
UNIQUE制約は、他の行のカラムに同じデータが存在する場合、データ登録を行えないようにする制約です。
たとえば、emailカラムのように、同じデータを重複して登録させたくない場合に設定します。
validates :カラム名, uniqueness: true
その他の制約の種類
主キー制約
主キー制約は、データベースのテーブル内の特定のカラムに適用されるルールです。
この制約を設定すると、そのカラムには一意の値が設定されるようになります。
つまり、同じ値のデータが複数存在することを許しません。
例:idなど
※ Railsでは、テーブルを作成する際にidカラムに元々実装されています。
外部キー制約
IDなどのキーを利用してテーブルとテーブルを関連付けているとき、
親元のテーブルにデータが存在していなければいけないという制約です。
例えば、userテーブルとpostテーブルがあるとします。
userテーブルにはuserの情報が保存されており、postテーブルにはuserが作成したpostのデータが保存されています。この場合、user_idがuserテーブルの主キーであり、postテーブルにもそれを外部キーとして参照させることができます。
つまり、postテーブルに保存されるデータは、usetテーブルのidに存在する値のみが許可されるという制約を設けることができます。
この制約により、間違ったデータがpostテーブルに保存されることを防ぐことができます。例えば、存在しないuser_idを持つpostが作成されることはありません。
このように外部キー制約を設定することで、関連するテーブル間でデータの整合性を確保することができます。
t.references :カラム名, foreign_key: true
t.references
は、テーブルとの関連性を表現するために使用されます。具体的には、外部キー制約を作成する際に使用します。
foreign_key: true
は、この外部キーカラムに外部キー制約を適用するためのオプションです。外部キー制約は、関連するテーブルの値が存在するかどうかを確認します。
つまり、外部キー制約を使用することで、関連するレコードが存在しない外部キー値を持つレコードを作成することができなくなります。
参考:
Discussion
昨日に引き続き2投稿目!適度な投稿の更新楽しみにしてます!
本日から4ヶ月目難しいフェーズに入ると思いますが、頑張ってください!!!
KENさんありがとうございます😂4ヶ月目の目処が立ったらまた定期的に投稿できるようにしたいと思います!