データベースを理解する 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
更新日 :日付型
このテーブル定義であれば、登録日が入力されないとエラーになりますので、
検知ができます。