【テーブル】制約を理解する(主キー/外部キー/一意制約 他)

テーブル

テーブルの設定では、まずフィールド名とデータ型を決めたあとに、各フィールドに対してさまざまな「制約」を設定することができます。

「制約」と聞くと、自由度を制限されるようでネガティブな印象を持つかもしれません。しかし、こうした仕組みがあるからこそ、データの信頼性が保たれ、利用者は安心してデータを活用できるのです

本記事では、データベースにおける各種制約の役割と、その具体的な設定方法について解説していきます。

制約の概要

制約とは

「制約(Constraint)」とは、データベースにおいてテーブルやフィールドに設定されるルールや条件のことを指します。これらは、データの整合性や信頼性を守るために非常に重要な役割を果たします。

なぜ、制約が必要かというと、データベースは、単なる「データの保管場所」ではなく、「正しく、意味のある情報を一貫性をもって保持する」ことが求められるからです。制約がなく自由にデータを登録した場合、例えば以下のような問題が起こり得るでしょう。

  • 顧客IDが重複して登録される(=誰が誰だかわからなくなる)
  • 商品の在庫数がマイナスで登録される(=現実的にあり得ない)
  • 存在しない顧客に対する受注データが登録される(=矛盾した情報)

さすがにデータがこの状態では、怖くて仕事で使いにくいなぁ…

こうした問題を未然に防ぐために、「この列には絶対に値が必要」「この値は他と重複してはいけない」「この項目は別のテーブルの値と一致している必要がある」といったルールを、あらかじめデータベースに対して明示的に定義するのが「制約」です

なお、制約はAccess特有のものではなく、データベース全般に共通する概念です。ただし、Accessでの具体的な設定方法についても併せて紹介しますので、概念的な理解とAccessでの実装方法をセットで把握していきましょう。

制約の種類

主な制約を一覧化しました。下表では「一般的な呼び名」と「SQL」での2種類で記載しましたが、SQL ServerやOracleといったデータベースでは、SQLを使用した定義方法が主流となっています。

一方、AccessではSQL文で直接書かなくても、デザインビューやプロパティシートで簡単に設定できるのが特徴です。画面操作を通じて直感的に制約を設定できるため、初心者でも比較的取り組みやすい設計になっています。

制約名(一般的な呼び方)制約名(SQL)
主キーPRIMARY KEY
外部キーFOREIGN KEY
一意制約UNIQUE
NOT NULLNOT NULL
チェック制約CHECK
デフォルト値DEFAULT

制約の個別解説

主キー(PRIMARY KEY)

概要

主キーは、テーブル内の各レコードを一意に識別するための制約です。主キーとして指定されたフィールドには、重複する値を入れることはできず、かつNULL(未入力)も許されません

また、主キーフィールドには「インデックス」も設定されるので、データの整合性や検索処理のパフォーマンスを向上させることができます。

使用例

取引先や社員を管理する場合、同じ会社名や同姓同名の人物が存在する可能性があるため、通常は「取引先ID」や「社員ID」といったフィールドを設けて、IDによる管理を行います。これらのIDは重複せず一意であることが絶対条件です。なぜなら、IDが重複すると誤って別の取引先に請求を行うなど、さまざまなミスが発生する恐れがあるためです。

こうした重複を防ぐために「主キー」を設定し、該当フィールドが物理的に重複できないように制約を設けます。

Accessでの設定方法

  • テーブルデザインビューで、主キーにしたいフィールドを選択し、上部メニューから「主キー」アイコンをクリック。
  • 複数フィールドを組み合わせた複合主キーも可能です。
  • 主キーが設定されたフィールドには、鍵マークが表示されます。
テーブルデザインビュー画面で主キーを設定している場面

外部キー(FOREIGN KEY)

概要

外部キーとは、あるテーブルのフィールドが、別のテーブルの主キー(または一意キー)と接続するフィールドのことを指します。このテーブル同士を接続する(関連付けるともいいます)ことを「リレーションシップ」といいます。

下記サンプル画像では、4つのテーブルをリレーションシップにより関連付けていますが、この中で「T_社員管理」と「M_組織マスタ」を結び付けている「T_社員管理テーブル側の部署ID」が外部キーです

一般的には外部キーがあることで、自動的に参照整合性や削除制約、更新制約が作用します

外部キーや参照整合性に関しては、こちらの記事で詳しく解説しています。

使用例

具体例に関しても、上記で案内した記事で解説しています。

Accessでの設定方法

Accessでは、外部キーに関する明確な設定項目は存在しません。外部キーとは、他のテーブルの主キーと接続することで論理的に外部キーとして扱う概念的な位置づけになります。

一方で、SQL Server、Oracle、PostgreSQLなどの本格的なリレーショナルデータベースでは、SQL文で FOREIGN KEY を明示的に定義することで、参照整合性の自動的な適用など、より厳密な制約が動作します。この点はAccessとの大きな違いです。

Accessにおける外部キー相当の操作は、「リレーションシップ」画面での参照整合性の設定によって行います。具体的な設定方法については、上記記事内でも詳しく解説していますので、あわせてご覧ください。

一意制約(UNIQUE)

概要

一意制約は、指定されたフィールドにおいて重複した値の入力を禁止する制約です。主キーと異なり、NULL(空の値)は許容されます。

使用例

マスタデータにおける「メールアドレス」や「電話番号」など、重複を避けたいが主キーには適さないフィールドに設定することが多いでしょう。


Accessでの設定方法

  • テーブルデザインビューで対象のフィールドを選択。
  • フィールドプロパティの「インデックス」設定を「はい(重複なし)」に変更。
一意制約を設定している様子

NOT NULL制約

概要

NOT NULL制約は、そのフィールドに値が必ず入力されている必要があるという制約です。NULL(空の値)を許容しません。

使用例

アンケートの必須項目のように必ず入力が必要なフィールドに設定します。例えば、社員管理テーブルにおける「氏名」「採用年月日」「生年月日」などは、基本的情報として漏れなく登録したいため、NOT NULL制約を設定します。(これらは同姓同名や同一年月日もありえるので、一意を担保する主キーではなくNOT NULL制約です。)

Accessでの設定方法

  • テーブルデザインビューで対象フィールドを選択。
  • フィールドプロパティの「値要求」を「はい」に設定。
NOT NULL制約を設定している様子

チェック制約(CHECK)

概要

チェック制約は、ある条件に合致するデータのみを入力可能にする制約です。これにより、想定外の値が入力されるのを未然に防ぐことができます。たとえば、0以上の数値のみ許可する、特定の文字列のみ入力可などの制限が可能です。また、制約に反した場合は、任意に設定したメッセージを表示することも可能です。

使用例

具体的な使用例を5例ほどピックアップします。

  • 「年齢」フィールド → 「0歳以上の整数のみ」を許可する(マイナスな小数点は不可)
  • 「メールアドレス」フィールド → 「@を含む文字列のみ」を許可する
  • 「郵便番号」フィールド → 「7桁の数字のみ」を許可する(ハイフンなし)
  • 「性別」フィールド → 『「男」または「女」のみ』を許可する
  • 「数量」フィールド → 「1~100の範囲の整数のみ」を許可する

Accessでの設定方法

  • テーブルデザインビューで対象フィールドを選択
  • 下部のフィールドプロパティから「入力規則」を設定
  • 同じく「エラーメッセージ」に適切な文言を設定
チェック制約を設定している
様子

前述の使用例であげた5例の具体的設定例は以下のとおりです。

設定するフィールド入力規則欄への設定値
年齢フィールド>= 0
メールアドレスフィールドLike “*@*.*”
郵便番号フィールドLike “#######”
性別フィールドIn (“男”,”女”)
数量フィールドBetween 1 And 100

設定値は、比較演算子やワイルドカードを組み合わせると、いくらでも応用が利くよ

デフォルト値(DEFAULT)

概要

テーブルに新規レコードを入力する際、デフォルト値を設定したフィールドは、設定した値が自動的に入力されます。広義では制約の一つとされていますが、厳密には制約というよりは、入力効率化の性質が高いかもしれません。

使用例

  • 「登録日」フィールド → 現在日付を自動設定する
  • 「進行ステータス」フィールド →「未着手」を自動設定する
  • 「削除フラグ」フィールド → 「No(False)」を自動設定する

Accessでの設定方法

  • テーブルデザインビューで対象フィールドを選択
  • フィールドプロパティの「既定値」に初期値を記入
デフォルト値を設定している様子

まとめ

「制約」は、データベースとして、データの一貫性や整合性を保つための重要な仕組みです。

Accessでは、その制約を特別意識せずとも、プロパティ等を通じて視覚的に設定できるのが強みです。リレーショナルデータベースの原則ともいえる各制約の意味を理解して、より信頼性の高いデータベースを構築していきましょう。

タイトルとURLをコピーしました