RDBの制約

問題

応用情報技術者平成23年特別 午前問28

“社員扶養家族”表の列”社員番号”の値が”社員”表の候補キーに存在しなければならないという制約はどれか。

  • 一意性制約
  • 形式制約
  • 参照制約
  • ドメイン制約

答え

参照制約

解説

RDB Relational Database では、間違って変な値を入力してしまわないように、格納する値に事前に制約を設けることができます。

制約には色々な種類があります。

一意性制約


一意性制約 (いちいせいせいやく、Unique Constraint)とは、データベースにおいてデータを追加、更新する際の制約の一つで、列あるいは列のグループに含まれるデータが、テーブル内のすべての行で一意(「他に同じデータがない」の意味)であることを要求する。なお、この一意性制約にNOT NULL制約を加えたものが主キー制約であると考えることもできる。


出典: フリー百科事典『ウィキペディア(Wikipedia)』

一意性制約とは、列の値に重複がないことを求める制約です。

列を作成する際に UNIQUE をつけることで、その列には重複した値を入力することができなくなります。

例えば以下のようにテーブルを定義すると、shain_bango に重複した値を入力することができなくなり、それぞれの社員は自分だけのユニークな番号を持つことになります。

CREATE TABLE shain
  (
     shain_bango  INT UNIQUE,
     name CHAR(16),
  ) ;

NOT NULL 制約

ただし、一意性制約だけでは、shain_bango に何も入力しなくとも、新しい社員の行を作成できてしまいます。

そこで、一意性制約に加え、NOT NULL 「何も入力していないのはダメ」という制約を加えることで、必ず値が入力されることを保証します。

CREATE TABLE shain
  (
     shain_bango  INT UNIQUE NOT NULL,
     name CHAR(16),
  ) ;

主キー制約

また、UNIQUENOT NULL の組み合わせは主キーに対して良く用いられるので、 PRIMARY KEY と記述することで同じ規則、つまり一意で NULL でないという規則、を適用することができます。

CREATE TABLE shain
  (
     shain_bango  INT PRIMARY KEY,
     name CHAR(16),
  ) ;

CHECK制約


CHECK制約 (-せいやく、Check Constraint)とは、データベースにおいてデータを追加、更新する際の有効なデータを定義する規則のことをいう。チェック制約はテーブルの1つの列に複数つけることができ、条件に合う(True)かもしくは合わない(False)のいずれかの値を取るでなければならない。


出典: フリー百科事典『ウィキペディア(Wikipedia)』

形式制約やドメイン制約は、CHECK制約を用いて実装されます。

CONSTRAINT 規則名 CHECK(規則内容) と書きます。

形式制約

格納されるデータが一定の形式に従っていることを求める制約です。

LIKE と正規表現を使って表現します。

例えば以下のように記述すると、社員の携帯番号は 080-0000-0000 または 090-0000-0000 という入力に限定することができます。

CREATE TABLE shain
  (
     shain_bango INT PRIMARY KEY,
     name CHAR(16),
     cell_phone_num CHAR(14),
     CONSTRAINT chell_phone_check CHECK(cell_phone_num LIKE '0[89]0-[0-9]{4}-[0-9]{4}')
  ) ;
  ) ;

ドメイン制約

格納されるデータの定義域に対する制約です。

例えば以下のように記述すると、社員の年齢は15以上65以下の整数値しか入力できません。

CREATE TABLE shain
  (
     shain_bango INT PRIMARY KEY,
     name    CHAR(16),
     age     INT,
     CONSTRAINT age_check CHECK(age>=15 AND age<=65)
  ) ;

参照制約


外部キー(がいぶキー、英語:foreign key、FK)は、コンピュータ関係データベース関係モデルの文脈において、2つの関係変数)の間の参照整合性制約をいう。 外部キーは、参照する側の関係変数で1つの属性(列、カラム)もしくは2つ以上の属性の集合を同定し、参照する側の関係変数は、参照される側の関係変数の1つの属性もしくは2つ以上の属性の集合を参照する。


出典: フリー百科事典『ウィキペディア(Wikipedia)』

外部参照を設定する際に用いられる制約で、格納される値が参照先の表中に必ず存在することを求めます。

FOREIGN KEY (列名) REFERENCES 参照先テーブル名(列名) と書きます。

例えば、以下のように表を作ると、shain_fuyo_kazoku 表の shain_bangoshain 表の shain_bango に存在しない値を入力することができなくなります。

CREATE TABLE shain
  (
     shain_bango INT PRIMARY KEY,
     name CHAR(16),
  ) ;

CREATE TABLE shain_fuyo_kazoku
  (  
     fuyo_id  INT PRIMARY KEY,
     name CHAR(16),
     zokugara CHAR(8),
     shain_bango  INT,
     FOREIGN KEY (shain_bango) REFERENCES shain(shain_bango)
  ) ;