記事検索

検索ワードを入力してください。
Sky Tech Blog
【SQL Server】DBに​おける​各種制約に​ついて

【SQL Server】DBに​おける​各種制約に​ついて

この記事は、データベースにおける「制約」について説明しています。制約はデータの一貫性と整合性を保つために重要であり、SQL Serverを例にNOT NULL、UNIQUE、PRIMARY KEY、CHECK、DEFAULT、FOREIGN KEYの6つの制約を具体的に解説しています。

今回の記事はSQLを扱う上で当たり前のことかと思いますが、データベースの「制約」に関してです。

データベースの​制約とは

データベースにおいて、列定義にそれぞれ付与することができ、特定のデータパターンの挿入や更新を制限できる効果を持っています。

例えば、「IDは重複してほしくないよね」とか「名前は絶対入力してほしいよね」という要求に対して適した制約を設けることで、「重複したID」や「名前が空(NULL)」のデータを登録しようとしたときに制約によりエラーとすることができます。

制約を適切に使用することで、システムの意図に反したSQL文を弾くことができるので、人為的なミスの防止につながります。

本記事ではSQL Serverにおける制約を例に取って紹介させていただきます。制約は以下の6つとなります。

  • NOT NULL制約
  • UNIQUE制約
  • PRIMARY KEY制約
  • CHECK制約
  • DEFAULT制約
  • FOREIGN KEY制約

例えば、下記の列を持つ会社員テーブルというものを想定します。

社員ID 氏名 性別 年齢 部署

NOT NULL制約

データを挿入するときにNULL(空)を許さない制約です。

社員IDや氏名、部署は絶対いるけど、性別と年齢は未記入もありにしよう!という方針であれば、「社員ID」、「氏名」、「部署」にNOT NULL制約を設けることで解決します。

UNIQUE制約

データの重複を許さない制約です。

先ほどの会社員テーブルを例にすると「社員ID」をUNIQUE制約にするのが順当です。同姓同名が存在しない場合であれば「名前」もUNIQUE制約をかけられるかもしれません。

PRIMARY KEY制約

主キー制約ともいいます。この制約は主キーとしての条件(重複不可、NOT NULL)を満たしているかどうかを判定し、満たさないデータを許さない制約です。

上記で説明したNOT NULL制約とUNIQUE制約の足し算とも言える制約です。またNOT NULL制約やUNIQUE制約とは違い、1つのテーブルにつき1つしか設定できません。

CHECK制約

データベースに追加する値が指定条件を満たすかどうかをチェックする制約です。

会社員テーブルを例にすると、年齢が16歳以上でないといけないというような使い方になります。

DEFAULT制約

データベースに値を追加する際に、値を入力しなかったときに予め指定しているデフォルト値を自動で追加する制約です。

この制約を用いると、指定した初期値が入ります。

FOREIGN KEY制約

外部キー制約とも言います。他のテーブルのカラムを外部キーに指定し、そのテーブルとの参照整合性を保つための制約です。
具体的には、

  • 参照先にない値を参照元では追加できない
  • 参照元で使用している値を参照先では削除できない

という制約を課します。

少し分かりにくいかと思いますので、先ほどまでの会社員テーブルと新たに部署テーブルを例に説明します。

会社員テーブル

社員ID 氏名 性別 年齢 部署
001 田中一郎 31 1
002 山田花子 28 2
003 鈴木太郎 25 1

部署テーブル

部署ID 部署名
1 営業部
2 経理部
3 商品開発部

会社員テーブルの部署に、部署テーブルの部署IDに向けた外部キー制約をかけています。

参照先に​ない​値を​参照元では​追加できない

この制約は、会社員テーブルにて部署列に「4」を入れるような操作をするとエラーになる制約です。
参照先の部署IDに現段階で「4」はないので入力することができません。

参照元で​使用している​値を​参照先では​削除できない

部署テーブルの部署IDの「2」を削除しようとするとエラーとなります。
参照元の会社員テーブルにて「2」は使用されており、削除すると参照先が不明になるからです。部署ID「3」については現段階で使用されていないので、削除は可能となります。

テーブルのみならず、テーブル変数や一時テーブルなどにも制約を設定することができます。テーブル設計や変数の用い方を具体的にわかりやすく示すためにも、積極的に各種制約を利用することで品質/保守性の向上につなげています。

以上となります。ここまでご覧いただきありがとうございます。


XFacebookLINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム