완전 성완전한 제약 조건 의 SQL 정의

4436 단어 데이터 뱅 크
완전 성: 완전 성 제약 은 권한 을 수 여 받 은 사용자 가 데이터 베 이 스 를 수정 할 때 데이터 의 일치 성 을 파괴 하지 않 고 데이터 에 대한 의외 의 파 괴 를 방지 합 니 다.
안전성: 의외 의 불일치 성 을 방지 하 는 동시에 데이터 베이스 에 저 장 된 데이터 도 권한 이 부여 되 지 않 은 방문 과 악의 적 인 파괴 와 변경 을 방지 해 야 합 니 다.
 
SQL 은 각종 완전 성 제약 을 데이터베이스 모델 정의 의 일부분 으로 삼 아 데이터베이스 에 대한 의외 의 파 괴 를 효과적으로 방지 하고 완전 성 검사 의 효율 을 높 일 수 있 을 뿐만 아니 라 프로그래머 의 부담 도 줄 일 수 있다.패턴 정의 의 일부분 으로 DBMS 가 유지 합 니 다.
1. 실체 완전 성 제약 과 메 인 코드
특정한 속성 이나 속성 그룹 은 주 코드 를 정의 합 니 다. 이 주 코드 의 모든 속성 은 빈 값 이 될 수 없고 관계 에서 주 코드 값 과 똑 같은 두 개의 원 그룹 이 나타 날 수 없습니다.
SQL 에 서 는 관 계 를 정의 하 는 CREATE TABLE 구문 에서 PRIMARY KEY 키 워드 를 사용 하여 정의 합 니 다.
방법 1: 속성 후 키 워드 를 추가 합 니 다 (단일 속성 주 코드 만 사용 가능)
CREATE TABLE Employee
(Eno char(4) PRIMARY KEY,
Name varchar(8),
……);

방법 2: 속성 표 에 주 코드 를 추가 로 정의 하 는 자구 (주 코드 속성 수 임 의) 를 추가 합 니 다.
CREATE TABLE Employee
(Eno char(4) ,
Name varchar(8),
……
PRIMARY KEY(Eno));

그러나 UNIQUE 라 는 속성 은 빈 값 으로 정의 할 수 있 고 후보 코드 와 는 다르다.한 표 에 메 인 코드 만 있 을 수 있 지만 여러 개의 'UNIQUE' 설명 이 있 을 수 있 습 니 다.
모든 관 계 를 위해 메 인 코드 를 지정 하 는 것 이 좋 습 니 다.
2. 완전 성 제약 과 외부 코드 참조
예 를 들 어 직원 표 중의 부서 번 호 는 반드시 부서 표 에 실제 존재 하 는 부서 번호 여야 한다.
1. 외부 코드 제약 에 대한 설명
방법 1: 이 속성 에 대한 설명 후 키워드 REFERENCES 를 직접 추가 하고 대응 표 의 메 인 코드 설명
CREATE TABLE Employee
(Eno char(4) PRIMARY KEY,
Name varchar(8),
……
Dno char(2) REFERENCES Department(Dno));

방법 2: CREATE TABLE 문장의 속성 목록 에 외부 코드 의 설명 자 구 를 추가 합 니 다.
CREATE TABLE Employee
(Eno char(4) PRIMARY KEY,
Name varchar(8),
……
Dno char(2),
FOREIGN KEY(Dno) REFERENCES Department(Dno));

디 노 가 Employee 인 외부 코드 를 설명 할 때 Department 관계 의 디 노 는 주 코드 로 설명 되 거나 UNIQUE 제약 에 참여 해 야 합 니 다.
2. 완전 성 제약 의 실현 전략 참조
앞에서 말 했 듯 이 완전 성 제약 을 참조 하여 외부 코드 의 수 치 는 두 가지 상황 만 규정 한다. 1) 빈 값 을 취한 다.2) 참조 관계 의 주 코드 값 을 가 져 옵 니 다.
사용자 의 조작 이 상기 규칙 을 위반 할 때 어떻게 이런 제약 을 유지 합 니까?
1. 제한 정책
SQL 의 기본 정책 입 니 다.완전 성 제약 을 위반 한 모든 업 데 이 트 는 시스템 에 의 해 거부 되 었 다.다음 동작:
1) Employee 표 에 새 메타 그룹 을 삽입 합 니 다. 그 중의 Dno 분량 값 은 빈 값 도 아니 고 Department 메타 그룹의 Dno 분량 값 도 아 닙 니 다.
2) Employee 의 원 그룹 을 수정 합 니 다. Dno 분량 값 은 Department 관계 의 Dno 분량 값 에 존재 하지 않 는 비 어 있 는 값 으로 변 경 됩 니 다.
3) Department 모듈 의 Dno 분량 값 을 삭제 하거나 수정 하 며, 이 분량 값 은 하나 이상 의 Employee 의 Dno 분량 값 에 나타 납 니 다.
2. 직렬 연결 전략
부모 테이블 을 삭제 하고 수정 할 때 하위 테이블 에 이 외부 코드 값 을 가 진 모듈 도 완전 성 을 보장 하기 위해 삭제 되 고 수 정 됩 니 다.
3. 빈 정책
부모 테이블 을 삭제 하고 수정 할 때, 하위 테이블 에 이 외부 코드 값 을 가 진 모듈 은 완전 성 을 참조 하기 위해 비어 있 습 니 다.
현재 대형 RDBMS 는 참조 완전 성 제약 을 실현 할 때 모두 제한 전략 을 기본적으로 사용 하고 어떤 것 은 상기 전략 중의 다른 전략 도 지원 한다.
Microsoft SQL Server 는 CASCADE (직렬 정책) 와 NO ACTION (제한 정책) 만 제공 합 니 다.
CASCADE: 부모 표 삭제 / 참조 줄 업데이트, 참조 표 삭제 / 참조 줄 업데이트.
NO ACTION: 부모 표 삭제 / 참조 줄 업데이트, SQL Server 오류 발생 및 부모 표 의 줄 삭제 / 업데이트 작업 을 되 돌 립 니 다.
3. 사용자 정의 완전 성 제약 조건
1. 속성 기반 CHECK 제약 조건
Age 속성의 제약 조건:
Age int CHECK(Age>=18 AND Age<=65)

속성 목록 에 추가
CHECK(Age>=18 AND Age<=65)

CHECK 시 뮬 레이 션 매 거 진 형식:
Sex char(2) CHECK(Sex IN(' ',' '))

CHECK 자 구 를 사용 하여 완전한 제약 조건 을 참조 하지만 Microsoft SQL Server 에 서 는 이 방법 을 지원 하지 않 습 니 다. 
CHECK(Dno in(select Dno from Department))

2. 속성 기반 CHECK 제약 조건
제약 에 어 긋 나 면 시스템 은 이 삽입 이나 수정 작업 을 거부 합 니 다.
CREATE TABLE Salary
(Insure decimal(7,2),
Fund decimal(7,2),
Basepay decimal(7,2),
CHECK(Insure+Fund

완전 성 구속 은 시간 이 걸 리 니 남용 하지 마라.
4. 구속 의 갱신
제약 조건 을 정의 할 때 제약 조건 을 명명 합 니 다.
Eno char(4) CONSTRAINT PK_employee PRIMARY KEY;//  
Dno char(4) CONSTRAINT FK_employee FOREIGN KEY REFERENCES Department(Dno);//   

제약 하기 전에 키워드 CONSTRAINT 와 이 제약 의 이름 을 추가 합 니 다.
CREATE TABLE Salary
(Insure decimal(7,2),
Fund decimal(7,2),
Basepay decimal(7,2),
CONSTRAINT RightSalary CHECK(Insure+Fund

Employee 의 외부 코드 제약 조건 삭제 FKemployee
ALTER TABLE Employee DROP CONSTRAINT FK_Salary;

제약 조건 수정:
(1) 원본 제약 조건 삭제
ALTER TABLE Salary
DROP CONSTRAINT RightSalary;

(2) 동명 의 제약 조건 추가
ALTER TABLE Salary
ADD CONSTRAINT RightSalary CHECK(Insure+Fund

제약 은 표 의 패턴 이 정 의 될 때 도 가능 하고 ALTER 문 구 를 사용 할 수도 있 습 니 다.다만 ALTER 는 원 그룹 에 기반 한 제약 조건 만 정의 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기