データベース

第5章 データベースの設計
5.1
5.2
5.3
5.4
データベース設計の概要
ERモデルとスキーマ設計
正規化
一貫性制約
5.4 一貫性制約
一貫性制約とは
実世界の制約条件をデータベースの制約条件と
して記述(これを一貫性制約という)し、データベー
スの内容が制約条件を満足するよう制御する。
【例】
主キー制約
参照一貫性制約
属性値制約
タプル単位の制約
複数関係にまたがる制約
DBMSでは
①初期システム
SQLに一貫性制約の機能がなかったので、表現
方法や管理方法はシステムによって異なっていた。
②SQL92
一貫性制約に関する機能が盛り込まれた。
③SQL99
トリガ等の機能が追加された。
一貫性制約の実現方法
①データ定義言語で一貫性制約を記述
一貫性管理はデータベース管理システムが行う。
②チェックと違反時処理はユーザが作成
更新等の特定動作を行うとき、データベース管理システム
は動作に応じて指定されたプログラムを起動する。または
アプリケーションプログラム自身でチェック機能を実行する。
最近のシステムでは、複雑な制約も①の方法で可
能であることが多い。
1.キー制約
最も基本的な主キー制約について示す
①主キーが同一のタプルが2つ以上存在してはいけない。
②主キーはNULLであってはならない。
SQLでは、CREATE TABLE文のPRIMARY KEY句で指定する。
【例】
CREATE TABLE 履修(
学籍番号 CHAR(6),
科目名
CHAR(6),
成績
INT,
PRIMARY KEY (学籍番号,科目名))
2.参照一貫性制約
参照一貫性制約とは?
①関係の属性が実際に存在する対象を示してい
ることを保証する。
②参照一貫性制約は外部キーを宣言することに
より実現する。
【例】
履修{学生氏名,科目名,成績}では、学生氏名や科
目名が存在しなければならない。
(a) 外部キー
関係Rの属性集合Xが
関係Sの主キーYと一致するとき、
XをRの外部キーという。
正確には
NULLまたは
Xの属性値と同じYの値を
持つタプルが存在する。
(注) RとSは同じであってもよい。
参照一貫性違反時
主キー制約のときは違反処理は拒否だが、
参照一貫性違反時はいくつかの選択肢がある。
①参照側の関係のタプルの変更や削除
②参照される関係のタプル変更や削除
③違反する処理の拒否
④NULLやデフォルト値の設定
⑤値変更時に整合性がとれるよう対応する側の値を変更
3.属性の制約
主キーなどの宣言と同様CREATE TABLE文で宣言
①ユニーク制約(UNIQUE)
②NOT NULL
③CHECK制約
④定義域(ドメイン)制約(CHECKで行う)
【構文図】
制約の指定方法
CREATE TABLE
実表名
,
(
列名
DEFAULT
データ型
データ型
USER
NULL
UNIQUE
PRIMARY KEY
,
(
列名
)
,
(
列名
PRIMARY KEY
UNIQUE
参照列指定
検査条件指定
検査条件指定
FORIEGN KEY
NOT NULL
)
)
参照列と検査条件
【参照列指定】
,
REFERENCE
(
実表名
列名
)
【検査条件指定】
CHECK
(
検査条件式
)
意味
①DEFAULT
: データが入力されなかった時の値。USERを指定すると
スキーマ定義で指定したユーザ名、NULLはNULL値
②NOT NULL
: NULL値を持たない(NULL制約)
③UNIQUE
: 列が各組を一意的に識別できる候補キー(一意性制
約)
④PRIMARY KEY : 列は主キー(主キー制約)
⑤参照列指定
: 指定した列名が参照する実表の列名を指定
⑥検査条件指定 : 列名がアクセスされたとき満たすべき条件
⑦FOREIGN KEY : 列名の並びが外部キーであることを指定
⑧UNIQUE, PRIMARY KEY(列名の並び)
: 「列名の並び」で指定された列名は③と④と同じよう
に一意性制約、および主キーであることを示す。
4.関係の制約
① 属性宣言の後のCHECKで行う。
② 属性チェックの場合、対象属性変更のタイミングで変
更されるが、関係制約ではどの属性が変更されても
チェックされる。
5.アサーションによる制約
関係宣言内ではなく、独立に以下の文で宣言される。
CREATE ASSERTION アサーション名 CHECK (条件式)
①WHERE句に書ける任意の条件を用いることができる。
②データベースに何らかの更新が行われたときにチェックさ
れるので、制約管理を確実に行うことができる。
③属性や関係に対するCHECKのほうがチェック回数が少ないの
でシステム効率が良い。アサーションによる製薬は効率が
悪い。
トリガをECAルール(Event Condition Action Rule)
ともいう
6.トリガ
指定されたイベントが発生したとき、
指定された条件が成立するかどうかをチェックし、
成立した場合、指定したアクションを行う。
(通常のプログラミングでのイベントハンドラ)
①アクションの実行とイベントの実行との関連を指定できる
(イベントの前後、イベントの代わりに実行)
②イベントで更新を行うとき更新の前後の条件を記述するこ
とができる(更新後の値が大きい、小さい等の条件)。
③イベントの実行を拒否したり、アクション内からデータ
ベース操作も可能である。