データベースを理解する 013「必ず値が入る項目」

前回、登録日と更新日の項目を追加して、社員テーブルの定義とデータは以下の通りになっています。

【定義】
社員番号:文字列型の4文字(一意性制約あり)
社員名 :文字列型の50文字
入社日 :日付型
退職日 :日付型
登録日 :日付型
更新日 :日付型
【データ】
社員番号  | 社員名  | 入社日   | 退職日    | 登録日   | 更新日
=========+==========+===========+============+===========+===========+
1759   | X山 B郎 | 2001-04-01| 2015-03-31| 2001-03-31| 2015-04-01
2827   | C田 D彦 | 2016-04-01| (null)   | 2016-03-31| (null)
3339   | A口 F子 | 2015-04-01| (null)   | 2015-03-31| (null)
4210   | G本 H行 | 2008-04-01| 2011-05-31| 2008-03-31| 2011-06-01
4211   | D藤 Z子 | 2018-02-01| (null)   | 2018-01-31| (null)
0212   | Z坂 X人 | 2018-03-01| (null)   | 2018-02-28| (null)

新たに社員が入ってきたので、以下のデータを登録します。
・社員番号=1846
・社員名=C田 W三
・入社日=2018-03-16

社員番号  | 社員名  | 入社日   | 退職日    | 登録日   | 更新日
=========+==========+===========+============+===========+===========+
1759   | X山 B郎 | 2001-04-01| 2015-03-31| 2001-03-31| 2015-04-01
2827   | C田 D彦 | 2016-04-01| (null)   | 2016-03-31| (null)
3339   | A口 F子 | 2015-04-01| (null)   | 2015-03-31| (null)
4210   | G本 H行 | 2008-04-01| 2011-05-31| 2008-03-31| 2011-06-01
4211   | D藤 Z子 | 2018-02-01| (null)   | 2018-01-31| (null)
0212   | Z坂 X人 | 2018-03-01| (null)   | 2018-02-28| (null)
1846   | C田 W三 | 2018-03-16| (null)   | (null)   | (null)

登録しました!
が、登録日に値を入れ忘れています。
この時点では困りませんが、いつ登録したのかを後から確認することができませんので、困ります。

* * * * * *

項目に何かの値を必ず入れて欲しい場面はそこかしこにあります。
例えば、サービスの申し込みフォームではメールアドレスと氏名は必須入力に
なっていたり、座席の予約では座席番号を選択必須になっていたりします。
必須項目に値が入っていないと、エラーとなり処理は先に進められません。

テーブルにおいても、必ず値を入れる必要がある項目かどうか、の指定ができます。
それが「not null制約」です。
この制約があると、nullでの登録をしようとすると、エラーとなり登録できません。つまり、何かの値を入れることが必須となります。

* * * * * *

社員テーブルへのnot null制約を考えてみましょう。
社員番号、社員名、入社日、登録日は必ず何かの値が入りますから、not null制約をつけます。これにより、社員テーブルの定義は↓となります。

【定義】
社員番号:文字列型の4文字(一意性制約あり), not null
社員名 :文字列型の50文字,not null
入社日 :日付型,not null
退職日 :日付型
登録日 :日付型,not null
更新日 :日付型

このテーブル定義であれば、登録日が入力されないとエラーになりますので、
検知ができます。

この記事が気に入ったらサポートをしてみませんか?