제 5 장
그것은 데이터베이스 데이터 유효성 및 호환성의 무결성을 의미합니다. 데이터가 실제 의미와 일치한다하는 데이터 수단의 정확도, 현재 실제 상황을 반영하고, 데이터의 호환성이 서로 다른 관계형 테이블에서 같은 객체의 데이터베이스에있는 데이터를 참조 논리적이다.
데이터 무결성은 데이터의 의미와 일치 잘못된 데이터가 데이터베이스에 존재 방지하기 위해 보호되는 데이터베이스에 존재 방지하는 것입니다. 데이터 보안은 파괴 행위 및 무단 액세스를 방지하기 위해 데이터베이스를 보호하는 것입니다. 따라서, 방지하고 무결성 검사를 제어 할 수있는 개체는 데이터베이스에 자신의 항목을 방지 바람직하지 않은 의미, 잘못된 데이터입니다. 개체 보안 제어는 데이터베이스의 데이터에 대한 무단 액세스를 방지하기 위해, 권한이없는 사용자를 방지하고 불법 작업입니다합니다.
데이터베이스 무결성을 유지하기 위해, 데이터베이스 관리 시스템이 구현되어야합니다 :
무결성 제약 조건 1. 정의의 메커니즘을 제공
또한 무결성 규칙이라고 무결성 제약 조건을 데이터베이스에서 의미 론적 제약 데이터가 충족되어야합니다. 그것은 지정된 모델의 상태 및 데이터 모델의 상태를 정의 할 수있는 데이터베이스의 변화에 맞춰, 데이터의 적절한 효과적이고 호환되도록하는 데이터 링크 제어 종속성 규칙을 표현한다. 무결성, 참조 무결성 및 사용자 정의 무결성 엔티티 관계 모델.
2. 무결성 검사 제공하는 방법
무결성 제약 조건을 충족하는 데이터베이스 관리 시스템의 데이터 무결성 검사 호출되는지 여부를 확인하기위한 메커니즘을. 일반적으로 삽입, 업데이트 / 삭제 명령문이 실행 된 후, 당신은 또한 트랜잭션 커밋시 확인하실 수 있습니다 검사를 시작합니다.
계약 3. 위반
5.1 엔티티 무결성
엔티티 무결성 정의 1.
단일 속성 두 기재된 방법이 있으며, 하나는 다른 테이블 레벨 제약 조건으로 정의되며, 컬럼 - 레벨 제약 조건이다. 유일한 방법을 설명 속성의 복수의 하나의 테이블 레벨 제약 조건으로 정의된다.
예 5.1 스노 속성 정의 학생 코드 테이블.
표 학생 만들기
(. (스노 숯불 9) 기본 키,
SNAME의 문자 (20 인) 아니 널 (null),
SSEX의 문자 (2),
세이지는, smallint로
(20 인) Sdept 숯불
)
예 5.2 SC 테이블 스노, CNO의 속성 그룹은 다음과 같이 정의된다 코드입니다.
표 SC 만들기
(. (스노 숯불 9),
SNAME의 문자 (20 인),
SSEX의 문자 (2),
세이지는, smallint로
Sdept의 문자 (20 인),
기본 키 (스노, CNO)
)
2. 엔티티 무결성 검사 및 기본 치료
로를 레코드가 사용자 프로그램 또는 주요 코드 업데이트에 삽입 될 때마다 기본 키 열이 기본 테이블의 기본 키 사이의 관계를 정의하고, 자동 검사 시스템에 대한 관계형 데이터베이스 관리 엔티티 무결성 규칙. 상기
들이 삽입 또는 수정되지 않는 경우 (1) 검사가 고유 한 주요 키 값 것인지, 거절.
기본 키의 다양한 속성을 확인 (2) 한 삽입 또는 수정 거부 공백이있는 한, 비어 있습니다.
따라서 기업의 무결성을 보장한다.
5.2 참조 무결성
1. 참조 무결성 정의
외래 키 구문의 외부 코드와 기본 키 외부 코드 테이블 참조 기준 구를 지정함으로써 정의 테이블 정의를 작성 참조 무결성 관계 모델.
에 정의 된 예 5.3 SC 참조 무결성
표 SC 만들기
(스노의 문자 (. 9) 아니 널 (null),
CNO의 문자 (. 4) 아니 널 (null)이,
학년이, smallint로
기본 키 (스노, CNO),
스노 (외래 키 (SNO) 참조 학생) ,
외부 키 (CNO) 참조 코스, (CNO)
);
2. 참조 무결성 검사 및 디폴트의 처리
튜플을 추가 (1) SC 테이블, 스노 속성 값은 튜플 학생 테이블의 튜플에서 발견 스노 속성치 그에 상응하는.
(2) 튜플 SC 테이블은 스노 스노 그에 속성 값에 상당 학생 테이블 내의 튜플을 찾아 튜플 변형 특성 값을 변경.
(3) 일부 스노 속성 값 테이블 튜플 SC는 스노 그에 속성 값에 상당 학생 테이블 내의 튜플을 찾아 일으키는 학생 테이블에서 튜플 삭제.
(4) 학생 테이블을 수정은 스노 그에 속성 값에 상당 학생 테이블 내의 튜플을 찾아 일부 스노 속성 값 테이블 튜플 SC 결과 스노 속성 튜플.
불일치의 위의 금액이 발생하면, 시스템은 다음과 같은 전략을 사용할 수 있습니다.
(1) (전혀 동작)이 수행되지 거절
이 작업을 수행 할 수 없습니다. 이 정책은 일반적으로 기본 정책으로 설정됩니다.
(2)은 캐스케이드 (캐스케이드)는 연산
(3)는 NULL 값으로 설정되는
예시적인 무결성을 참조하여 설명한 실시 예 5.4 기본 표시 방법.
표 SC 만들기
(스노의 문자 (. 9),
CNO의 문자 (. 4)
등급은, smallint로
기본 키 (스노, CNO),
외래 키 (SNO) 참조 학생 (SNO)
삭제 캐스케이드 켜기
온 업데이트 캐스케이드를,
외부 키 (CNO) 참조 코스, (CNO)
삭제 조치 NO 켜기
온 업데이트 캐스케이드
);
5.3 사용자 정의 무결성
속성 1. 제약
포함 요건 정의 특성, 즉, 속성 값의 한계에 제한을 적용 할 수있다 :
컬럼 널이 아닌 값 (NOT NULL)
컬럼 값 의적 (UNIQUE)를
열 값을 만족하는지 여부 조건식을 검사 (체크 구).
(1)은 NULL 값을 허용하지 않는
정의 테이블의 예 5.5 SC를 스노, CNO, 등급 속성 널값 안 기재.
작성 표 SC
(SNO 숯 (9) 널로.
CNO 숯 (4) 널로.
등급 SMALLINT 아님 NULL,
기본 키 (SNO, CNO)
),
(2) 열 값 의적
(3) 확인 구문 지정된 열 값해야 조건
예 5.7 학생 테이블 Ssex은 "남성"또는 가지고있는 "여성을."
테이블 학생 만들기
(. (스노 숯불 9) 기본 키
. SNAME의 문자 (8) 아니 널 (null),
SSEX의 문자 (2) 검사 (( 'M', 'F'))의 SSEX는,
세이지는, smallint로
Sdept 숯불 (20 인)
);
표에 따라 등급 5.8 SC 값은 0과 100 사이에 있어야한다.
작성 테이블 SC
(스노의 문자 (. 9)
CNO의 문자 (. 4),
학년 체크 (학년> = 0 학년 <= 100), smallint로
기본 키 (스노, CNO),
외래 키 (SNO) 참조 학생 (SNO)를,
외부 키 (CNO) 참조 코스, (CNO)
)
2- 튜플 제약
속성 값 한계와 비교 튜플 제한 레벨과 각 제약 다른 속성 값 사이에 제공 될 수있다.
학생의 성별 예 5.9은 이름이 양의 시작이 될 수 없습니다, 남성입니다.
테이블 학생 만들기
((스노 숯불. 9),
SNAME의 문자를 (. 8) 아니 널 (null),
SSEX의 문자 (2),
세이지는, smallint로
Sdept의 문자 (20 인),
기본 키 (SNO),
같은 검사 (SSEX = 'M'또는 SNAME을하지 '양의 %')
);
5.4 무결성 제약라는 이름의 절
추가 또는 무결성 제약 조건을 삭제 할 수있는 유연성을 허용, 무결성 제약 조건의 이름을 딴 무결성 제약라는 이름의 절 제약에서 제공하는 테이블에 SQL 문을 작성합니다.
1. 무결성 제약라는 이름의 절
제약 조건 이름 무결성 제약 조건 무결성 제약 조건
NOT NULL, 독특한, 기본 키를 포함하여 무결성 제약 조건을 외부 키, 확인 등 문구를.
예 5.10 빌드 학생 등록 양식 학생, 이름이 null 값, 30 세 미만, 만 섹스는 "남성"또는입니다 수 없습니다 90000-99999 사이의 학생 수를 필요로 "여성."
표 학생 만들기
(SNO의 숫자. (6)
제약 90000과 99999 사이 C1 체크 (SNO)
SNAME 숯 (20 임)
제약 C2하지 널,
세이지 숫자. (3)
제약 C3의 체크 (세이 <30)
SSEX 숯 (2)
제약 C4 검사 (( 'M'에서 Ssex, 'F'),
제약 학생 기본 키 (SNO)
),
무결성 제약 조건은 테이블을 수정합니다
. 학생 5.12 테이블 제한 실시 삭제 성별
알터 테이블 학생
드롭 제약 C4 ;
예 5.13 제약, 세 이하 30보다 적은 (40) 수보다 900000-999999 사이에 학교에 필요한 학생 테이블을 수정
테이블 변경 학생
, 드롭은 C1 제약 조건
테이블 변경 학생
은 A C1 Contraint 검사를 추가 (스노> = 900000 스노와 <= 999999);
테이블 변경 학생
드롭 Contraint C3의,
테이블 변경 학생
은 A C3 Contraint 검사를 추가 (세이지 <40);
5.6 단언
주장을 만들 수있는 SQL 문에서보다 일반적인 문 주장에 의해 제약을 지정하는 데이터 정의 언어로 사용할 수 있습니다. 여러 정의 할 수 있습니다 테이블이나 집계 작업을 더 복잡한 무결성 제약 조건을 포함. 주장 만든 후, 모든 작업은 관계의 주장은 주장에 대한 주장은 진정한 값이 거부됩니다 작동하지 않는 관계형 데이터베이스 관리 시스템 검사를 트리거 포함한다.
어설 션 문 형식 만들기 1.
주장의 주장 절 이름을 확인 만들기
, 모든 주장은 이름이 지정됩니다 확인 절 제약 조건 절 유사한 표현.
최대 60 명 선택 과목의 예 5.18 제한 데이터베이스.
단언 ASSE_SC_DB_NUM가 작성
검사를 (60> = (SELECT COUNT ( )
코스에서 ,, SC
를 Where Course.Cno = SC.Cno와 CNAME = '데이터베이스'));
예 학생들이 60까지 걸릴 각 코스 5.19 한계.
어설 ASSE_SC_CNUM1이 (가) 작성
검사를 (60> = 모두합니다 (SELECT COUNT ( )
SC부터
CNO에 의해 그룹));
2. 삭제 어설 션 문 형식
드롭 주장 어설 이름
5.7 트리거
트리거는 이벤트 중심의 프로세스의 특별한 클래스의 사용자 정의 관계 테이블입니다. 정의되면, 트리거는 데이터베이스 서버에 저장됩니다. 사용자 테이블의 모든 증가, 삭제, 변경 작업이 자동으로 해당 트리거 서버에 의해 활성화 된 관계형 데이터베이스 관리 시스템 코어의 무결성의 제어를 중앙 집중화한다.
트리거 정의 1.
조건 - - 액션 규칙 이벤트라는 트리거를. (예, 추가, 삭제하는 테이블 변경 작업, 트랜잭션의 종료 등) 특정 시스템 이벤트 조건에 해당하는 행동 규칙을 실행하거나,이 작업을 수행하지 않는 경우 확인하는 규칙의 상태에 발생합니다.
트리거 트리거 이름을 작성
하기 전에 | 테이블 이름에 트리거 이벤트 후
변수로 이전 행 | 새를 참조하는
각 행에 대해 | 문의
[트리거 조건이 액션 몸을 트리거 할 때]
(1) 만 테이블 소유자, 즉, 사용자의 테이블은 테이블에 트리거를 만들 수 있습니다 만들고, 당신은 단지 테이블에 트리거의 특정 번호를 생성 할 수 있습니다. 의 특정 수의 플립 - 플롭 디자인 타임에 특정 관계형 데이터베이스 관리 시스템에 의해 결정된다.
(2) 트리거의 이름
트리거 모드 이름이 이름을 포함 할 수 있습니다, 그것은 스키마 이름이 포함되어 있지 않을 수 있습니다. 같은 모드는 트리거 이름은 고유해야하며, 트리거 이름과 테이블 이름은 동일한 모드에서해야합니다.
(3) 테이블
트리거 만 기본 테이블에 정의 될 수 있으며, 도면에 한정되지. 데이터베이스 테이블이 변경되는 경우, 활성 트리거가이 테이블은 또한 트리거 대물 테이블이라고 각각 트리거링 이벤트 테이블에 정의된다.
(4) 트리거링 이벤트
트리거링 이벤트는, 삽입 될 삭제, 업데이트, 그것을 등 삽입 또는 삭제 등의 여러 이벤트의 조합 일 수있다 또한 트리거는 상기 수정하는 열을 지정할 때 활성화되고, ..., 컬럼의 업데이트를 트리거 할 수있다 장치. 전 | 트리거 시간 후. 트리거는 트리거의 활성화 이후에, 동작 실행이 트리거 이벤트 전에 활성화 나타낸다 전에 트리거 사건 이후에 수행되는 동작을 나타낸다.
(5) 트리거 타입
트리거 동작의 간격 치수에 따라 플립 플롭 (각 행) 로우 레벨 트리거와 (각 명령문에 대한) 문장 레벨 트리거로 분할 될 수있다
. (6)는 트리거 조건을
트리거 할 때만 활성화 될 때 트리거 조건은 활동, 신체하지 그렇지 않으면 트리거 동작 실행의 구현 전에 진정한 트리거 몸이다. 트리거 조건이 트리거되면 생략하면, 조작 부재는 트리거의 활성화 직후.
(7) 작업 바디를 트리거
트리거 액션 몸이 될 수 있습니다 익명 PL / SQL 블록 프로세스는 또한 저장 프로 시저를 호출이 작성 될 수 있습니다. 행 레벨 트리거 경우, 사용자가 문장 레벨 트리거 경우, 새로운 오래된 참조 갱신 / 이전 값 및 이벤트의 과정에서 삽입 본체 후 업데이트 / 삭제 이벤트 전에 새 값을 사용하여 수행 할 수 있습니다 본문에없는 트리거 동작 신규 또는 기존 사용하여 참조.
몸이 트리거 조치, 트리거 이벤트의 활성화에 실패 할 경우 다른 목적은 (데이터베이스 추가 즉, 삭제, 변경 작업을)을 변경하지 않는 대상 테이블에 영향을 미칠 수있는 트리거 또는 트리거에 종료됩니다.
실시 예 5.21 등급 SC 속성 테이블을 수정하는 경우, 스코어는 10 %만큼 증가한다면, 후 다른 테이블 SC_U (SNO, CNO, Oldgrade에서 동작 레코드 Newgrade) 분율이 Oldgrade가 수정되기 전에 인, Newgrade 분획은 수정된다.
트리거 SC_T 작성
갱신 등급의 ON SC 후에
참조하는
Oldrow AS의 oldtuple,
newrow AS newtuple
각 행에 대한
제 (newtuple.Grade> = 1.1 oldtuple.Grade)
삽입 INTO SC_U (SNO, CNO, Oldgrade, Newgrade)
값 (oldtuple.Sno, oldtuple.Cno, oldtuple.Grade, newtuple.Grade)
예 5.22 학생-InsertLog 테이블에 추가 된 테이블 학생 삽입 작업 레코드 당 학생 수.
트리거 STUDENT_COUNT 만들기
삽입 ON 학생 후
참조하는
newtable AS 델타
계산서의 각각에 대한
삽입 INTO Studnet-InsertLog (A 번호)
선택 COUNT ( 에서) 델타
5.23의 경우는 행 레벨 트리거하기 전에 정의, 교사 표 교사 "교수 급여에 대한 무결성 규칙을 이하 4,000 위안 자동으로 4천위안로 변경. 이하 4,000 위안 경우 "
트리거 Insert_Or_Update_Sal 만들기
업데이트 ON INSERT 또는 교사 전에
newtuple 참조하는 NewRow AS
각 행의
Begin (시작)
인 경우] (newtuple.Job = '교수')와 (newtuple.Sal <4000)
그 후 다음 newtuple.Sal을 : = 4000;
끝 IF;
끝;
2. 활성화 트리거
트리거의 실행은 자동으로 데이터베이스 서버에 의해, 트리거 이벤트에 의해 작동된다. 복수의 정의 할 수 데이터 시트에 플립 플롭.
트리거 제거 3.
테이블 이름에 드롭 트리거 트리거 이름을;