整合性のI.概要
これは、データベース内のデータベースのデータの整合性の正確性、一貫性、互換性を指します
- 正し:データベースのデータへのアクセスを確保するためには、法律上のデータの意味制約に沿ったものです
- 一貫性:データは、データベースの更新正しい間の論理的な関係を確保するために、別の一貫性のある状態にある一貫した状態からデータベース
- 互換性:同じデータの2つが一貫していなければならないという事実
1.1バインドカテゴリー
カテゴリー整合性制約
の角度拘束状態の考察から
- 静的な制約:データベースの正しい状態の制約
- ダイナミックな制約:データベースが適切に別の状態遷移制約のために一つの状態から転送
整合性のための1.2 DBMSのサポート
- これは、整合性制約を定義するためのメカニズムを提供します
- データベース内でも整合性の規則と呼ばれる整合性制約、セマンティック制約データが満たされなければなりません
- リレーショナルモデルのエンティティの整合性、参照整合性およびユーザー定義の整合性などの整合性のシリーズを記述するために使用されるSQL標準の概念、
- 一般的にSQLデータ定義言語文によって実装
- 整合性チェックの方法を提供します
- データ整合性制約を満たすために、データベース管理システムは、整合性チェックと呼ばれているかどうかを確認するためのメカニズム
- 通常は実行され、挿入、更新後にチェックを開始する文を削除し、あなたは、トランザクションのコミット時にチェックすることができます
- 契約違反
- ユーザーのアクションに見つかったデータベース管理システムの場合は、特定のアクションを取るために、整合性制約に違反しました
- 操作を実行するための拒絶(アクションなし)
- 他の操作を実行するためのカスケード(縦続)
1.3整合性と差異のセキュリティ
- データの整合性
- 防止がデータベースに存在すると、データベース内に存在する不正なデータを防ぐために、つまり、データのセマンティクスに準拠していません。
- 防止対象:規格外のセマンティクス、不正なデータ
- データセキュリティ
- 悪質な被害や不正アクセスに対するデータベースの保護
- 防止対象:不正なユーザーや不正な操作
1.4整合性制約の名前
constraint <完整性约束条件名><完整性约束条件>
--<完整性约束条件>包括not null、unique、primary key短语、foreign key短语、check短语等
--建立教师表TEACHER,要求每个教师的应发工资不低于3000元(应发工资是工资列Sal与扣除项Deduct之和)
create table TEACHER(
Eno numeric(4) primary key, /*在列级定义主码*/
Ename char(10),
Job char(8),
Sal numeric(7,2),
Deduct numeric(7,2),
Deptno numeric(2),
constraint TEACHERFKey foreign key (Deptno) references dept(Deptno),
constraint c1 check (Sal + Deduct >= 3000)
);
--使用 alter table语句修改表中的完整性限制
--修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40
--可以先删除原来的约束条件,再增加新的约束条件
alter table Student
drop constraint c1;
alter table Student
add constraint c1 check (Sno between 900000 and 999999),
alter table Student
drop constraint c3;
alter table Student
add constraint c3 check(Sage < 40);
第二に、実体の整合性
エンティティ整合性の規則:メインコード内のすべてのタプルのリレーションRの値は一意である必要があり、プライマリコード上の任意のプロパティはnullにすることはできません
(削除は、インサートの物理的な整合性を破壊しないと新しいタプルを編集S )グループ企業の主な記号はの整合性弱体化させる可能性が
SQLのサポートエンティティの整合性を、ユーザーが唯一のあなたは、基本的なテーブルを作成するときに、主キーの間の関係を説明するために必要な、システムが自動的に実体の整合性を確保することができます
2.1 SQLのエンティティの整合性
で構成される1つのプロパティコードの2つの方法
- これは、列レベルの制約として定義されています
- テーブル・レベルの制約を定義します
構成属性コード複数の唯一の方法の説明であります
- テーブル・レベルの制約を定義します
--将Student表中的Sno属性定义为码,primary key表示主码
--在列级定义主码
create table Student(
Sno char(9) primary key,
Sname char(20) not null,
Ssex char(2),
Sage int,
Sdept char(20)
);
--在表级定义主码
create table Student(
Sno char(9),
Sname char(20) not null,
Ssex char(2),
Sage int,
Sdept char(20),
primary key (Sno)
);
--将SC表中的Sno,Cno属性组定义为码
create table SC(
Sno char(9) not null,
Cno char(4) not null,
Grade int,
primary key (Sno,Cno) /*只能在表级定义主码*/
);
2.2検査と契約違反
挿入またはメインカラム更新オペレーションコード場合
- 拒否し、彼らが挿入または変更されない場合は、一意の主キー値かどうかをチェックします
- 各属性の主キーブランクを挿入または修飾リジェクトある限り、空であるかどうかをチェック
検査記録は、一意のプライマリ・キー値かどうかを、実質的に完全なテーブルスキャンテーブルの回避のために、RDBMSは自動的にプライマリコードで、一般的にコア指標確立
B +ツリーインデックス
25に挿入される新しいレコードの主キー値を
- メインコードインデックス、ルートノードの検索からB +ツリー
- ルート(51)、中間ノード(1230)、リーフノード(15 20 25):3つのノードを読みます
- 主キーの値は、すでにこのレコードを挿入することができない、存在しています
第三に、参照整合性
参照整合性ルール:属性は、外側Rのコード、S及び一次鍵Ksの参照関係との間のFK関係を設定されている場合、FK RまたはSのいずれかの組の値は、メインコードのカンザス州タプルに等しいです。値、またはヌル値
に設定接触により変換リレーショナルデータベースER図変換から得られたパターンは、それぞれの参照整合性制約関係が存在する場合
3.1アップデートは、参照整合性に違反します
参照整合性違反、契約の契約違反
の可能な措置は、参照整合性の違反を更新します
- 拒否:この操作は実行できません。このポリシーは、一般的に、デフォルトのポリシーとして設定されています
- カスケード:参照整合性参照タプルに違反して、更新、更新結果が更新します
- ブランク値:更新および更新は、外側コード値のタプルをブランキング参照整合性違反の参照を引き起こします。外符号は、NULL値を使用することができた場合にのみ
- 更新するために、及び外側のコード値タプルをブランキング更新原因参照整合性違反参照;デフォルト値は、マスターキータプルとの間の関係を参照しなければならない前記デフォルトが設定されています
3.2 SQLで参照整合性
指定された語句を用いて外部コードを参照する外部キーフレーズ外符号、一次符号テーブルとして定義されます
foreign key (A1,...,An) references <外表名> (<外表主码>)
[<参照触发动作>]
--指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝
--参照触发动作可以是以下两种
on update <参照动作> [on delete <参照动作>]
on delete <参照动作> [on update <参照动作>]
--参照动作可以是拒绝、级联、置空值、置缺省值之一
--关系SC中(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码定义SC中的参照完整性
create table SC(
Sno char(9) not null,
Cno char(4) not null,
Grade int,
primary key (Sno, Cno), /*在表级定义实体完整性*/
foreign key (Sno) references Student(SNO), /*在表级定义参照完整性*/
foreign key (Cno) references Course(Cno) /*在表级定义参照完整性*/
);
第四に、ユーザー定義の整合性
4.1ドメインの制約
レンジで評価しなければならない各プロパティ
のタイプが同じように異なる変数が同じデータ型を持つことができ、原則的にプログラミング言語変数に似て、異なる属性が同じドメインを持つことができる
ドメインを宣言は、次のとおりです。フィールドの値を範囲内に設定された値にタイプ、デフォルト値、フォーマットフィールドの値、または制約
の値が異なるドメイン上で比較することができません
--创建域
create domain <域名> [as] <数据类型>
[default <缺省值>]
[<域约束>,...,<域约束>]
--修改域
alter domain <域名> <修改动作>
/*
修改动作
set default <缺省值>:设置缺省值
drop default:删除缺省值
add <域约束>:添加域约束,其中<域约束>与 create domain相同
drop constraint <约束名>:删除<约束名>命名的域约束
*/
--删除域
drop domain <域名> {cascade | restrict}
4.2断言
アサーションが命名制約され、データベースの状態は、論理条件を満たしている必要があり表明
--创建断言
create assretion <断言名>
check (<条件>) [<约束性质>]
--每个断言都被赋予一个名字,<check 子句>中的约束条件与 where子句的条件表达式类似
--限制数据库课程最多60名学生选修
create assertion ASSE_SC_DB_NUM
check ( 60 >= (
select count(*)
/*此断言的谓词涉及聚集操作count的SQL语句*/
from Course,SC
where SC.Cno=Course.Cno and Course.Cname ='数据库'
));
--删除断言
drop assertion <断言名>
第五に、フリップフロップ
トリガーは、ストアドプロシージャのイベントドリブン型の特別な種類の形でユーザ定義関係であります
- 実行をトリガどのイベントとどのような条件を指定
- アクション指定されたトリガの実行のどのような種類
- データベースシステムに格納されています
- サーバが自動的に対応するトリガーを起動させることにより、任意のユーザテーブルは、変更操作を、追加、削除します
5.1定義トリガ
create trigger <触发器名>
{before | after} <触发事件> on <表名>
referencing new|old row as<变量>
for each {row | statement}
[when <触发条件>]<触发动作体>
/*
触发器又叫做事件-条件-动作规则
当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,通常是一段SQL存储过程
*/
シンタックスの説明
- 表の所有者がテーブルにトリガを作成することができます
- トリガー名
- トリガー名はスキーマ名を含めることはできませんスキーマ名を含めることができます
- 同じモードでは、トリガ名は一意である必要があります
- トリガとテーブル名が同じモードである必要があります
- テーブル名
- トリガーは、ビューで定義することができない、ベーステーブルで定義することができます。
- データベーステーブルが変更された場合、トリガーが活性化されるトリガイベント対応表に定義されています
- トリガ・イベント
- トリガイベントは、INSERT、DELETE、またはUPDATEであり得るこれらのイベントの組み合わせであってもよいです
- あなたは、トリガーをアクティブにもできたときOF UPDATE <列はトリガー、...>、さらに変更する列を指定します
- タイミングがトリガされる前/後:
AFTERトリガ活性化は、トリガーイベントの後に実行される操作を表す
操作がトリガイベントの実行を表す前にトリガがアクティブになる前に
- トリガータイプ
- ロー・レベルのトリガ
- 文レベルのトリガ
- トリガ条件
- トリガーがアクティブになると、それは場合にのみ、真の体のトリガーアクションのトリガ条件を実行している、そうでない場合のアクションを実行しない体をトリガー
- トリガ条件は、トリガWHEN省略した場合、操作部材は、トリガの起動直後に実行しました
- トリガーアクションボディ
- トリガーアクション本体は、無名PL / SQLブロックのプロセスはまた、ストアドプロシージャへの呼び出しが作成されていることができますすることができ
- 行レベル・トリガーした場合、ユーザーは、プロシージャの本体にイベントにNEWとOLDの参照を、次のイベントの前に古い値と新しい値を使用することができます
- 文レベルのトリガする場合、あなたはNEWまたはOLDは、身体のトリガーアクションで参照使用することはできません
- 身体に障害が発生した他のオブジェクトのイベントトリガーアクションならば、それはトリガーの活性化の実行を終了する、ターゲット表に影響を与える可能性があり、トリガーやトリガーは変更されません。
5.2トリガーをアクティブ化
トリガの実行がされたトリガ・イベントによって活性化される、データベースによって自動的に実行されるサーバ
のデータテーブルには、定義することができる複数のトリガを実行次の順序に従って、
- テーブルの上にBEFOREトリガーの実行
- トリガSQL文のアクティベーション
- テーブル上のトリガの実行AFTER
5.3トリガーを削除
drop trigger <触发器名> on <表名>