学習データベースの第六日の概要

章V

これは、データベースのデータの妥当性と互換性の整合性を指します。データは、現実世界のセマンティクスに沿ったものであることをデータ手段の精度は、現在の実際の状況を反映して、データの互換性が異なるリレーショナル表内の同じオブジェクトのデータベース内のデータを参照するには、論理的です。
データの整合性は、データベースに不正なデータが存在することを防止するために保護されたデータベース内のデータの意味と矛盾することを防止するために存在しています。データセキュリティは、破壊行為や不正アクセスを防止するためのデータベースを保護することです。このように、整合性チェックを防止し、制御するオブジェクトは、データベースへの参入を阻止する、望ましくないセマンティクス、不正なデータです。オブジェクトのセキュリティコントロールは、データベース内のデータへの不正アクセスを防止するために、権限のないユーザーを防止し、不正な操作ですします。

データベースの整合性を維持するために、データベース管理システムを実装する必要があります:
1.整合性制約の定義のメカニズム提供
も整合性の規則と呼ばれる整合性制約を、データベースにおけるセマンティック制約条件データを満たさなければなりません。これは、与えられたモデルと、状態およびデータ・モデルの状態を定義するデータベース内の変更に合わせて、データは、適切な効果的かつ互換性を保証しなければならないデータリンク制御及び依存関係ルールを表します。整合性、参照整合性およびユーザー定義の整合性の実体関連モデル。
2.整合性チェックを提供する方法
データベース管理システム内のデータが整合性制約を満たすかどうかをチェックするためのメカニズムは、整合性チェックと呼ばれています。通常、挿入、更新/削除文が実行された後、あなたは、トランザクションのコミット時にチェックすることができますチェックを開始。
契約の3違反

5.1エンティティの整合性

エンティティ整合性の定義1
つの特性のための2つの記載された方法があり、一方が他方のテーブル・レベルの制約として定義され、列レベルの制約です。方法のみを説明し、複数の属性の一つは、テーブルレベルの制約として定義されます。
例5.1スノ属性定義学生コード表。
表学生作成します
(。スノはchar(9)主キー、
SNAMEはchar(20は)NOT NULL、
SSEXはchar(2)、
セージは、がsmallint
Sdeptの文字を(20は)
);
例5.2 SCテーブルスノ、CNO属性グループは次のように定義されコード。
表SC作成
(スノはchar(9)、。
SNAMEのCHAR(20)と、
SSEXはchar(2)、
セージSMALLINTザ・、
、Sdeptはchar(20)と
主キー(スノ、CNO)
);
2.エンティティ整合性のチェックと処理デフォルトが
でレコードは、ユーザプログラムまたはメインコードの更新中に挿入されたときに主キー列は、ベーステーブルの主キー、自動検査システムのリレーショナルデータベース管理エンティティ整合性ルールとの間の関係を定義します。含む:
それらは拒否挿入または修飾されていない場合(1)は、一意のプライマリ・キー値かどうかをチェックします。
ブランクが存在する限り、挿入または修飾されたリジェクト(2)主キーのさまざまな属性をチェックし、空です。
したがって、実体の整合性を確保します。

5.2参照整合性

1.参照整合定義
外部キーフレーズ外符号として主キー外部符号テーブル参照基準句を指定することによって定義されたテーブル定義を作成し、参照整合性リレーショナルモデル。
で定義されている例5.3 SC参照整合性
表の作成SC
(スノCHAR(9)NOT NULL、
CNOはchar(4)NOT NULL、
グレードSMALLINTザ・、
主キー(スノ、CNO)、
外部キー(スノ)参考文献学生(スノ) 、
外部キー(CNO)参考コース、(CNO)
);
2.参照整合性のチェックと、デフォルトの取り扱い
タプルを追加するために(1)SCテーブル、スノの属性値がタプルStudentテーブルにタプルで見つかりましたこれスノ属性値それと同等。
(2)タプルSCテーブル、スノはスノーそれ属性値と等価であるStudentテーブル内のタプルを見つけタプル変更した属性値を変更します。
(3)いくつかのスノ属性値テーブルタプルSCはスノーそれ属性値と等価であるStudentテーブル内のタプルを見つけ引き起こし、Studentテーブルからタプルを削除します。
(4)学生テーブルを変更するにはスノーそれ属性値と等価であるStudentテーブル内のタプルを見つけるいくつかのスノー属性値テーブルタプルSCもたらす、スノ特性をタプル。
矛盾の上記量が発生した場合、システムは、以下の戦略を使用することができます。
(1)(アクション)が行われない拒否しました
この操作は実行できません。このポリシーは、一般的に、デフォルトのポリシーとして設定されています。
(2)カスケード(カスケード)動作
(3)はヌル値に設定されている
例示的な整合性を参照して説明した実施例5.4デフォルトの表示方法。
表の作成SC
(スノCHAR(9)、
CNO CHAR(4)、
グレードSMALLINTザ・、
主キー(スノ、CNO)、
外部キー(スノ)参考文献学生(スノ)
ON DELETE CASCADEを
オン更新カスケード、
外部キー(CNO)参考文献もちろん、(CNO)
削除アクションNOオン
に更新カスケード
)。

5.3ユーザー定義の整合性

属性1.制約が
含む、要件定義の属性、すなわち属性値の制限の制約を適用することができる:
カラム非ヌル値(NOT NULL)
列の値を一意(ユニークな)
列値を満たすかどうかを条件式をチェックする(チェックフレーズ)。
(1)は、NULL値を許可しない
定義テーブルの例5.5 SCを、スノ、CNO、グレード特性がヌル値はならない説明しました。
作成表SC
(スノチャー(9)NOT NULL、
CNOのCHAR(4)NOT NULL、。
グレードSMALLINTザていないヌル、
主キー(スノ、CNO)
);
(2)カラムの値が一意
(3)は、フレーズ指定された列の値を確認してください条件
例5.7 StudentテーブルSsexは唯一の「男性」または取る「女性」。
表学生を作成します
(。スノはchar(9)主キー、
SNAMEはchar(8)NOT NULL、。
SSEXの文字( 'M'、 'F')中(2)チェック(SSEX)、
セージは、がsmallint
Sdeptはchar(20です)
);
表に従って等級5.8 SCの値が0と100の間であるべきです。
表の作成SC
(スノはchar(9)、
CNOはchar(4)は、
グレードは、Check(グレード> = 0とグレード<= 100)、がsmallint
主キー(スノ、CNO)、
外部キー(スノ)参考文献学生(スノ)を、
外部キー(CNO)参考コース、(CNO)
);
2組の制約
属性値の制限と比較タプル制限レベルと、各制約値の異なる属性の間に設けてもよいです。
学生の性別などの例5.9は、その名さんが開始することはできません、男性です。
表学生作成
(スノはchar(9)、
SNAMEはchar(8)NOT NULL、
SSEXはchar(2)、
セージは、がsmallint
、Sdeptはchar(20です)を
主キー(スノ)、
いないようなチェック(SSEX = 'M'またはSNAMEを'さんの%')
);

5.4整合性制約という名前の句

柔軟性が整合性制約を追加または削除することができ、整合性制約の名前が付いた句の制約という名前の整合性制約に提供するテーブルのSQL文を作成します。
1.整合性制約という名前の句
制約名の整合性制約整合性制約
NOT NULL、ユニーク、主キーを含む整合性制約を外部キーは、チェックようにフレーズを。
例5.10ビルド学生の登録フォーム学生、90000から99999の間に学生番号が必要ですが、名前が30歳未満のNULL値、することはできません、唯一の性別は「男性」または「女性。」
表学生を作成し
(スノの数値(6)
制約90000及び99999 BETWEEN C1チェック(スノー)、
SNAMEチャー(20)と
制約C2はNOT NULL、
セージの数値(3)
制約C3チェック(セージ<30)、
SSEXチャー(2)
制約C4チェック(( 'M'、 'F')、中Ssex
制約学生主キー(スノ)
);
整合性制約は、表の変更2.
。本実施形態のremove性別制限学生5.12表
のALTER TABLE学生を
ドロップ制約C4 ;
実施例5.13制約は、高齢30未満の少ない40 Aよりも数900000から999999の間に学校に必要な学生テーブルを変更
アルター表学生
、ドロップC1制約
アルター表学生
C1 Contraintチェックを追加(スノー> = 900000スノと<= 999999);
アルター表学生
ドロップContraint C3;
アルター表学生
C3 Contraintチェック(セージ<40)を追加します。

5.6断言

アサーションを作成するためのSQL文では、より一般的なステートメントアサーションによって制約を指定するには、データ定義言語で使用することができます。複数のテーブルを含む、より複雑な整合性制約を定義または集計操作することができます。アサーションを作成した後、任意の操作が関係して主張を伴うだろう表明のためのリレーショナルデータベース管理システムチェックをトリガし、アサーションは、任意の真の値が拒否されます動作していません。
assert文の形式が作成1.
アサーションアサーション句の名がチェック作成し
、すべてのアサーションは名前が与えられ、チェック句制約や条件句同様の表現。
最大60人の学生の選択科目のための例5.18リミットデータベース。
アサーションASSE_SC_DB_NUMの作成
チェックを(60> =(SELECT COUNT(
コースから,, SC
どこCourse.Cno = SC.CnoとCNAME =「データベース」));
例学生が60までかかる各コースの5.19限度。
アサーションASSE_SC_CNUM1作成
(60> =全て(SELECT COUNT(チェック

SCから
グループCNOによる));
2.削除assert文の形式を
ドロップアサーションアサーション名

5.7トリガ

トリガは、イベント駆動型プロセスの特別なクラスのユーザ定義の関係表です。一度定義し、トリガは、データベース・サーバに保存されます。ユーザテーブル内の任意の増加は、削除、変更の操作が自動的に対応するトリガ・サーバ、リレーショナルデータベース管理システムのコアの完全性の集中制御によって活性化されます。
1.トリガ定義
イベントと呼ばれるトリガを-条件-アクションルール。(例えば、追加、削除するテーブル、変更操作、トランザクションの終了、等のような)特定のシステムイベントは、条件が真のアクションルールを実行するか、このアクションを実行しないかどうかをチェックするルールの条件で発生します。
トリガートリガー名を作成
する前に|テーブル名のトリガーイベント後の
変数として古い行|新しいを参照する
各行について|声明の
[トリガ条件がアクション本体をトリガーする場合]

(1)ユーザーのみがテーブルを作成し、あるテーブルの所有者は、テーブルの上にトリガを作成することができますし、あなただけのテーブル上のトリガの一定数を作成することができます。フリップフロップの具体的な数は、設計時に特定のリレーショナルデータベース管理システムによって決定されます。
(2)トリガの名前
トリガ・モードの名前は、スキーマ名を含んでも含まなくても、名前を含むことができます。同じモードでは、トリガ名は一意である必要があり、およびトリガ名とテーブル名が同じモードである必要があります。
(3)テーブルの
トリガーは、ビューで定義されていない、ベーステーブルで定義することができます。データベーステーブルが変更されると、起動トリガは、それぞれトリガイベントテーブルに定義され、このテーブルはまた、トリガーオブジェクトテーブルと呼ばれます。
(4)トリガイベント
トリガイベントは、挿入、削除、または更新することができ、それは等挿入または削除、などのいくつかのイベントの組み合わせであってもよく、また、トリガがさらに変更する列を指定するときに活性化され、...、カラムの更新をトリガすることができますデバイス。前|トリガ時間後。トリガーは、トリガーの起動後、動作実行トリガ・イベントの前に活性化される前に表すトリガ・イベントの後に行われる動作を表します。
(5)トリガタイプの
トリガ動作の間隔寸法に応じて、フリップフロップ(各行の)行レベルのトリガーおよび(ステートメントごと)文レベルのトリガに分割することができる
(6)トリガ条件
トリガのみ活性化されますトリガ条件は、アクションの実装前に、真のトリガー本体で、体がそうでない場合は、アクションの実行をトリガしません。トリガ条件がトリガされたときに省略された場合、操作部材は、トリガの起動直後に行わ。
(7)アクション本体をトリガ
トリガーアクション本体は、いずれかになります無名PL / SQLブロックのプロセスは、ストアドプロシージャへの呼び出しが作成されていることができます。行レベル・トリガーした場合、ユーザーは、文レベルのトリガの場合は、体内のトリガーアクションできない、イベントの過程でインサート本体の後に更新/削除イベント前にNEWとOLDの参照、更新/古い値と新しい値を使用することができます新旧を使用して参照。
他の目的の体は、トリガアクション、トリガイベントの活性化に失敗した場合(つまり、追加するためのデータベース、削除、変更操作)がターゲット表には一切変更しない影響を与える可能性があり、トリガーまたはトリガー時に終了します。
実施例5.21グレードSCは、属性テーブルを変更すると、スコアが10%増加した場合、別のテーブルSC_U(スノ、CNO、Oldgrade、における操作履歴 Newgrade) 画分はOldgradeが変形前です、 Newgrade割合が変更されます。
トリガーSC_Tは、作成
グレードにSCの更新後
の参照
Oldrow AS、oldtuple
newtuple AS newrow
各行について
(newtuple.Grade> = 1.1 oldtuple.Grade)
INSERT INTO SC_U(スノ、CNO、Oldgrade、Newgrade)
値(oldtuple.Sno、 oldtuple.Cno、oldtuple.Grade、newtuple.Grade)
例5.22学生-InsertLogのテーブルに追加されたテーブルの学生の挿入操作記録あたりの学生数。
トリガーSTUDENT_COUNTの作成
INSERT ON学生の後
の参照
NEWTABLE ASデルタ
書のそれぞれについて、
INSERT INTO Studnet-InsertLog(数字)
SELECT COUNT(
から)デルタ
5.23例、行レベルのトリガの前に教師表教師「教授の給料のための整合性規則を定義しました以上4000元、4000元に自動的に変更されました。未満4000元、もし"
トリガーInsert_Or_Update_Sal作成
更新ON INSERTや教師になる前に
newtupleの参照NewRow AS
の行ごとに
開始し
た場合(newtuple.Job = '教授')及び(newtuple.Sal <4000)
次にnewtuple.Salを:= 4000;
END IF;
END;
2。アクティブにトリガ
トリガの実行が自動的にデータベース・サーバによって、トリガイベントによって活性化されます。データシートに複数のフリップフロップを定義することができます。
トリガー削除3.
テーブル名の上にドロップトリガートリガー名を、

发布了9 篇原创文章 · 获赞 0 · 访问量 328

おすすめ

転載: blog.csdn.net/l13kddd/article/details/104597681