テーブルの列のプロパティとして「値要求」があり、必ず何らかの値を入力させる(Not Null制約)という場合は、「はい」に設定することで実現します。また、データ型がテキスト型であるときはプロパティに「空文字列の許可」が加わり、空文字列(長さ0の文字列)の可否についても設定することができます。
一見なんということもありませんが、注意すべき点がありますので、ここで実例を挙げるとともに設定の詳細を整理してみます。
ここでは例として右のようなテーブルを使います。説明上の必要のため「氏名文字数」という列を設け、データ型を「集計」に、式を「Len([氏名])」とします。これにより「氏名」列の文字数が常に表示されます。
さて、「氏名」列の設定をみてみます。テキスト型になっていて、「値要求」は「いいえ」、「空文字列の許可」は「はい」となっています(ともにデフォルト値)。
このテーブルに新しい行(レコード)を追加してみます。ただし、主キーである「会員番号」列のみ入力し「氏名」列には何も入力せず次のレコードに移ります。このとき、新しく追加した行の「氏名文字数」にも何も表示されません。当然ですが「氏名」の値がNullであるためです。
新しく追加したレコードに戻って氏名を入力すると、やはり当然ですがその文字数が表示されます。
その氏名を削除すると氏名がNullに戻り、文字数の表示は再度空白になります。
さて、データを元に戻してテーブルデザインに戻り、「氏名」列の「値要求」を「はい」にしてみます。「空文字列の許可」は「はい」のままです。
改めて新しいレコードを追加し、氏名になにも入力せず次のレコードに移ろうとすると、「値要求」の効果でエラーメッセージが現れます。
ここからがポイントです。氏名に値を入力すると当然文字数が表示されますが…
一度入力した値を削除したとき、文字数が空白にならず「0」となります。このとき氏名の値はNullではなく空文字列(長さ0の文字列)にされているのです。
したがって他の行に移ってもエラーになりません。
「値要求」を「はい」にするだけでも確実に(1文字以上の)値を入力させられるような気がするかもしれませんが、「空文字列の許可」が「はい」のままでは、このような仕様により空文字列が入力されることを防げません(もちろん、「""」と入力することによる空文字列の入力も防げません)。
以上を踏まえて、「値要求」と「空文字列の許可」による4通りの設定について設定した場合の挙動を整理してみます。
「値要求」の設定 | 「空文字列の許可」の設定 | Nullの可否 | 空文字の可否 | 行発生時の値 | 文字列削除後の値 |
---|---|---|---|---|---|
いいえ | はい | ○ | ○ | Null | Null |
いいえ | いいえ | ○ | × | Null | Null |
はい | はい | × | ○ | Null | 空文字列(長さ0の文字列) |
はい | いいえ | × | × | Null | (削除不能) |
Nullと空文字の可否、行追加時の値については当然の結果ですが、文字列を削除した場合については「Nullが許可されている場合はNull、されていない場合は空文字列」となることがわかります。
いずれ、空白に見えるものが列によってNullだったり空文字列だったり、というのでは混乱のもとですので、設定の際は十分に気をつける必要があります。