데이터베이스 시스템 소개 - 무결성

무결성 I. 개요

그것은 데이터베이스, 일관성, 호환성의 데이터베이스 데이터의 무결성의 정확성을 말한다

  • 정확성 : 데이터베이스의 데이터에 대한 보장 액세스 법적 데이터의 의미 적 제약 조건과 일치한다
  • 일관성 : 데이터가 데이터베이스의 갱신 올바른지 사이의 논리적 관계를 보장하기 위해, 또 다른 일관된 상태로 하나의 일관된 상태에서 데이터베이스
  • 호환성 : 동일한 데이터의 두 가지가 일치해야한다는 사실

1.1 바인딩 카테고리

카테고리 무결성 제약 조건
miGzkR.png
각도 구속 상태를 고려에서

  • 정적 제약 : 데이터베이스의 정확한 상태에 대한 제약
  • 동적 제약 조건 : 데이터베이스가 제대로 다른 상태 전이 제한 한 상태에서 전송

1.2 DBMS 무결성에 대한 지원을

  • 그것은 무결성 제약 조건의 정의에 대한 메커니즘을 제공합니다
  1. 데이터베이스도 무결성 규칙이라고 무결성 제약, 의미 론적 제약 데이터가 충족되어야합니다
  2. SQL 표준 개념은 관계형 모델 개체 무결성, 참조 무결성 및 사용자 정의 무결성 포함 무결성의 시리즈를 설명하는 데 사용
  3. 일반적으로 SQL 데이터 정의 언어 문에 의해 구현
  • 무결성 확인 방법을 제공
  1. 데이터베이스 관리 시스템 무결성 검사라고 데이터 무결성 제약 조건을 충족하는지 여부 메커니즘 확인
  2. 일반적으로 실행, 삽입, 업데이트 후 검사를 시작 문을 삭제, 당신은 또한 트랜잭션의 시간 커밋에서 확인하실 수 있습니다
  • 계약 위반
  1. 무결성 제약 조건이 사용자의 행동에 위반 발견 데이터베이스 관리 시스템 경우, 특정 작업을 수행 할 수 있습니다
  2. 거부 (조치 없음) 작업을 수행 할
  3. 캐스케이드 (캐스케이드)는 다른 작업을 수행 할

1.3 무결성과 차이의 보안

  • 데이터 무결성
  1. 방지는 잘못된 데이터가 데이터베이스에 존재 방지하기 위해, 데이터의 의미, 준수하지 않는 데이터베이스에 존재
  2. 예방 대상 : 이하의 의미, 잘못된 데이터
  • 데이터 보안
  1. 악의적 인 손상 및 불법 접근으로부터 데이터베이스 보호
  2. 예방 대상 : 불법 사용자와 잘못된 연산

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 일 수 없습니다
(삭제는 삽입의 물리적 무결성을 파괴하지 않고 새로운 튜플을 편집의 ) 연결 실체의 주요 기호의 무결성을 훼손 할 수
SQL 지원 엔티티 무결성, 사용자는 사용자가 기본 테이블을 만들 때 기본 키 사이의 관계를 설명 할 필요가, 시스템이 자동으로 개체의 무결성을 보장 할 수 있습니다

2.1 SQL의 엔티티 무결성

구성된 단일 속성 코드 의 두 가지 방법을 설명

  • 그것은 열 수준 제약 조건으로 정의된다
  • 테이블 수준의 제약 조건을 정의

설정 속성 코드의 복수의 하나의 방법이다 정보

  • 테이블 수준의 제약 조건을 정의
--将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 + 트리 인덱스
miJSt1.png
(25)을 삽입 새 레코드의 기본 키 값을

  1. 주요 코드 인덱스 루트 노드 찾기에서 B + 트리
  2. 세 개의 노드를 읽기 : 루트 (51), 중간 노드 (1230), 잎 노드 (15 20 25)
  3. 기본 키 값은 이미이 레코드를 삽입 할 수없는 존재

셋째, 참조 무결성

참조 무결성 규칙 : 속성은 R, S의 외부 코드 및 기본 키 Ks를 상기 FK R 또는 S의 임의의 튜플의 값의 참조 관계 사이 FK 관계를 설정하면 메인 코드의 KS A 튜플 같다 값 또는 null 값
설정의 접촉에 의해 변환 된 관계형 데이터베이스 ER도 변환에서 얻은 패턴이 각 참조 무결성 제약 조건 관계가있는 경우

3.1 업데이트를 참조 무결성을 위반

참조 무결성 위반 및 계약 거래 위반
miYSbQ.png
가능한 조치 참조 무결성 위반을 업데이트

  • 거부 :이 작업을 수행 할 수 없습니다. 이 정책은 일반적으로 기본 정책으로 설정
  • 캐스케이드 : 참조 무결성 참조 튜플의 위반 업데이트, 업데이트 및 결과는 따라 업데이트
  • 블랭킹 값 : 갱신 및 업데이트는 외부 코드 값 튜플 블랭킹 참조 무결성 위반 참조 원인이됩니다. 외부 코드는 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存储过程
*/

구문 설명

  • 테이블 소유자는 테이블에 트리거를 만들 수 있습니다
  • 트리거 이름
  1. 트리거 이름은 스키마 이름을 포함 할 수 없습니다 스키마 이름을 포함 할 수 있습니다
  2. 같은 모드는 트리거 이름은 고유해야합니다
  3. 트리거 및 테이블 이름은 동일한 모드 아래에 있어야합니다
  • 테이블 이름
  1. 트리거 만 기본 테이블에 정의 될 수 있고, 뷰가 정의 될 수없는
  2. 데이터베이스 테이블이 변경되는 경우, 트리거는 트리거링 이벤트에 대응하는 테이블에 정의되어 활성화 될
  • 트리거 이벤트
  1. 트리거링 이벤트는 INSERT, 삭제 할 수있다, 또는 UPDATE는 이러한 이벤트의 조합 일 수있다
  2. 당신은 트리거를 활성화도 할 수있을 때의 UPDATE <열은 트리거, ...> 더 수정하는 열을 지정하는
  3. 타이밍 트리거되기 전에 AFTER / :
    애프터 트리거 활성화 트리거 이벤트 이후에 수행되는 동작을 나타내는
    동작은 트리거링 이벤트의 실행을 나타내는 전에 트리거가 활성화되기 전에
  • 트리거 유형
  1. 행 수준 트리거
  2. 문 수준 트리거
  • 조건을 트리거
  1. 트리거가 활성화 될 때, 그 경우에만 진정한 본체 트리거 동작 트리거 조건을 실행하고, 그렇지 않으면 동작을 수행하지 않는 신체를 트리거
  2. 트리거 조건이 트리거 WHEN 생략하면, 조작 부재는 트리거의 활성화 직후
  • 트리거 조치 본문에
  1. 저장된 절차가 만들어 졌는지에 트리거 동작 본체 익명 PL / SQL 블록 프로세스는 호출 될 수 될 수있다
  2. 행 레벨 트리거 경우, 사용자는 프로 시저의 본문에 이벤트에 새로운 오래된 참조를 다음 이벤트 전에 이전 값과 새 값을 사용할 수 있습니다
  3. 문장 레벨 트리거 경우, NEW 또는 OLD가 몸 트리거 동작에서 참조 사용할 수 없습니다
  4. 신체에 장애가 다른 목적 이벤트 트리거 작업을하는 경우, 그것은 트리거의 활성화의 실행을 종료합니다, 목표 테이블에 영향을 미칠 수있는 트리거 또는 트리거는 변경되지 않습니다

5.2 트리거를 활성화

트리거가 실행되는 트리거 이벤트에 의해 활성화 자동 데이터베이스 서버에 의해 실행되는
데이터 테이블에 정의있다 여러 트리거 실행의 다음 순서를 수행

  1. 테이블에 트리거 이전에 실행
  2. 트리거 SQL 문의 활성화
  3. 테이블에 트리거 실행 후

5.3 삭제 트리거

drop trigger <触发器名> on <表名>

추천

출처www.cnblogs.com/xxwang1018/p/11546732.html