무결성 제약 조건
데이터베이스 스키마에 대하여 지정되는 조건으로 데이터 베이스에 저장되는 데이터들이 반드시 만족해야할 조건을 의미한다. 부적절한 정보 입력을 방지하기 위함.
RDBMS의 무결성 제약 조건1 - 도메인 무결성 제약 조건
CHECK, DEFAULT, NOT NULL 등을 활용하여 각 속성의 도메인을 지정하여 입력 오류를 방지
grade_type이라는 학생의 가능한 학점에 대한 도메인 생성
CREATE DOMAIN grade_type AS CHAR
CHECK (VALUE IN('A','B','C','D','F'));
CREATE TABLE course_taken( ...
student_id CHAR(4) NOT NULL, #NULL 값을 방지
grade grade_type, # 지정한 학점만 가능
gpa INTEGER DEFAULT 0.0, # 기본 값을 지정
...)
;
RDBMS의 무결성 제약 조건2 - 개체 무결성 제약 조건
하나의 테이블에 중복된 값이 존재하지 않게 하기 위함이다. 기본키(PRIMARY KEY)가 중복이 있으며 NULL을 허용하지 않는다. 이외에도 UNIQUE를 이용하여 중복을 방지할 수 있다.
CREATE TABLE student(
_id CHAR(8) NOT NULL,
ssn CHAR(13) NOT NULL,
name CHAR(10) NOT NULL,
major CHAR(4),
gpa FLOAT DEFAULT 0.0,
UNIQUE (ssn), #유니크 지정
PRIMARY KEY(_id)); #기본키 지정
RDBMS의 무결성 제약 조건3 - 참조 무결성 제약 조건(외래키 제약 조건)
타 테이블과 연관된 데이터가 입력,수정,삭제 시에도 정확토록 참조관계를 유지하여야 한다. 외래키(FOREIGN KEY)를 지정할 경우 참조 테이블의 기본키이거나 NOT NULL의 조건인 경우에만 가능하다.
CREATE TABLE student(
_id CHAR(8) NOT NULL,
ssn CHAR(13) NOT NULL,
name CHAR(10) NOT NULL,
major CHAR(4),
gpa FLOAT DEFAULT 0.0,
UNIQUE (ssn), #유니크 지정
PRIMARY KEY(_id),
FOREIGN KEY(major) REFERENCES Department(_id) #major는 Department 테이블의 _id 컬럼과 연관
); #기본키 지정
- 참조 무결성 제약 조건 위반의 예시
- Department에 없는 전공 값을 student에 입력할 경우: child table에서 위반
- student에서 참조하는 전공의 값을 Department에서 삭제/변경할 경우: parent table에서 위반
위의 참조 무결성 제약 조건 위반 시 DBMS의 관리 정책
- Child table에서의 위반 시 student 테이블 에서의 거부
- Parent table에서의 위반 시
- No action: parent의 갱신/삭제를 허용하지 않음 - 가장 기본적인 처리 방법
- Set Null: parent가 갱신/삭제 되면 child의 외래키를 Null로 설정한다.
- Set Defualt: parent가 갱신/삭제 되면 child의 외래키를 default 값으로 설정한다.
- Cascade: parent의 갱신/삭제 작업을 child에 적용시킨다.
...
FOREIGN KEY(major) REFERENCES Department(_id)
ON DELETE SET NULL # _id 값의 삭제 시 major는 NULL
ON UPDATE CASCADE # _id 값의 갱신 시 해당 major도 같은 값으로 갱신
'Domain > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 8. ESQL(Embedded SQL)와 프로시저(Procedure) (0) | 2020.07.23 |
---|---|
[데이터베이스] 7. SQL의 View (0) | 2020.07.23 |
[데이터베이스] 5. 데이터의 입력, 삭제, 수정 (0) | 2020.07.22 |
[데이터베이스] 4. MySQL 중첩질의문 (0) | 2020.07.22 |
[데이터베이스] 3. MySQL - 조회 (0) | 2020.07.22 |