오라클 데이터 무결성 제약조건 정리 (기본키,외래키,참조키, 제약조건 생성, 추가, 삭제, 비활성화)
데이터베이스 시스템에서 데이터의 정확성과 일관성은 매우 중요한 요소인데요, 이번 글 에서는 이를 보장하기 위해 필요한(데이터의 보호와 일관성을 유지할 수 있는 방법) 데이터 무결성 제약조건에 대해 알아보겠습니다. 오라클 데이터베이스에서는 다양한 종류의 무결성 제약조건을 지원하여 데이터의 무결성을 보호하고 유지할 수 있는데요, 오라클 데이터베이스의 데이터 무결성 제약조건의 종류와 구현(활용)방법 등에 대해 살펴보겠습니다.
데이터 무결성 제약조건의 종류
오라클 데이터베이스에서 지원하는 데이터 무결성 제약조건은 다음과 같은 것들이 있습니다.
NOT NULL
해당 칼럼 값의 NULL값을 허용하지 않습니다(이를 통해 데이터의 정확성을 보장할 수 있습니다)
사용ex) ALTER TABLE student MODIFY (name CONSTRAINT stud_name_nn NOT NULL);
고유 키 (Unique Key)
하나의 테이블 안에서 해당 칼럼 값은 항상 유일해야 합니다, 한 테이블 내에서 칼럼이 동일한 값을 가질 수 없음(이를 통해 데이터의 중복을 방지하고 데이터의 일관성을 유지할 수 있습니다)
사용ex) ALTER TABLE student ADD CONSTRAINT stud_idnum_uk UNIQUE(idnum);
기본키 (Primary Key)
해당 칼럼 값은 반드시 존재하고 유일해야 합니다. 기본키는 UNIQUE와 NOT NULL 제약조건을 결합한 형태입니다(이를 통해 데이터의 중복성과 무결성을 보장할 수 있습니다)
사용ex) ALTER TABLE student ADD CONSTRAINT stud_userid_pk PRIMARY KEY(studno);
참조 키, 외래 키(Foreign Key)
참조 키 무결성 제약조건은 한 테이블의 칼럼 값이 다른 테이블의 칼럼 값 중 하나와 일치하도록 하는 제약조건입니다. 해당 칼럼 값은 다른 테이블의 칼럼 값과 일치하거나 NULL을 가질 수 있습니다
즉 참조 제약조건은 한 테이블의 칼럼 값이 다른 테이블의 칼럼 값과 일치하거나 NULL 값을 가지도록 하는 제약조건입니다. 외래키는 부모 테이블의 기본키나 고유 키를 참조하여 정의되며, 자식 테이블의 칼럼을 외래키(Foreign Key)라고 하며, 부모 테이블의 칼럼을 참조키(Reference Key)라고 합니다.
외래키는 부모 테이블의 기본키나 고유 키만 참조할 수 있습니다. 또한, ON DELETE CASCADE 옵션을 사용하여 부모 테이블의 행이 삭제될 때 자식 테이블의 행도 동시에 삭제할 수 있습니다. 이러한 참조 키는 데이터의 일관성과 무결성을 유지하기 위해 중요한 역할을 합니다
사용ex) ALTER TABLE professor ADD CONSTRAINT prof_deptno_fk FOREIGN KEY(deptno) REFERENCES department(deptno);
CHECK 무결성 제약조건
CHECK 무결성 제약조건은 칼럼에서 허용 가능한 데이터의 범위나 조건을 지정하는 제약조건입니다. 여러 개의 CHECK 무결성 제약조건을 하나의 칼럼에 지정할 수 있습니다. 이를 통해 데이터의 입력이나 수정시 부정확한 값을 방지할 수 있습니다.(데이터의 무결성을 유지하고 입력된 데이터의 정확성을 보장하는 데 유용)
사용ex) ALTER TABLE subject ADD CONSTRAINT subject_term_ck CHECK(term IN (‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’));
제약조건 생성 옵션 6가지
ON DELETE CASCADE
부모 테이블에서 외래 키가 참조하는 행을 삭제할 때, 해당 행을 참조하는 자식 테이블의 행도 함께 삭제됩니다.
사용 ex)
ALTER TABLE child_table
ADD CONSTRAINT fk_constraint_name
FOREIGN KEY (parent_id)
REFERENCES parent_table (id)
ON DELETE CASCADE;
USING INDEX
기본 키나 고유 키 무결성 제약조건을 생성할 때, 묵시적으로 생성되는 인덱스에 대한 스토리지 파라미터를 정의할 수 있습니다.
사용 ex)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
PRIMARY KEY (column_name)
USING INDEX
TABLESPACE tablespace_name;
NOT DEFERRABLE
DML 명령문이 처리될 때마다 제약조건 위반 여부를 검사합니다. defer_spec을 명시하지 않으면 기본값으로 동작합니다.
사용 ex)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (column_name > 0)
NOT DEFERRABLE;
DEFERRABLE
트랜잭션 내의 모든 DML 명령문에 대한 제약조건 검사를 트랜잭션 종료까지 연기합니다.
사용 ex)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (column_name > 0)
DEFERRABLE;
INITIALLY IMMEDIATE
DML 명령문이 종료될 때마다 제약조건을 검사합니다.
사용 ex)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (column_name > 0)
INITIALLY IMMEDIATE;
INITIALLY DEFERRED
트랜잭션이 종료될 때까지 제약조건 검사를 연기합니다.
사용 ex)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (column_name > 0)
INITIALLY DEFERRED;
기존 테이블에 무결성 제약조건 추가하기
기존 테이블에 무결성 제약조건을 추가하는 방법은 ALTER TABLE 문을 사용합니다. ALTER TABLE… ADD CONSTRAINT 문은 기존 테이블에 제약조건을 추가하는 명령문입니다. 다만, NOT NULL 무결성 제약조건의 추가는 NULL 허용 상태를 NULL 입력 불가 상태로 변경하기 때문에 ALTER TABLE… MODIFY 문을 사용해야 합니다.
다음 아래의 예시들을 참고하여 원하는 기존의 테이블에 제약조건을 적절하게 추가할 수 있습니다.
기본키 제약조건 추가
ALTER TABLE student ADD CONSTRAINT stud_userid_pk PRIMARY KEY(studno);
고유 키 제약조건 추가
ALTER TABLE student ADD CONSTRAINT stud_idnum_uk UNIQUE(idnum);
NOT NULL 제약조건 추가
ALTER TABLE student MODIFY (name CONSTRAINT stud_name_nn NOT NULL);
외래키 제약조건 추가
ALTER TABLE professor ADD CONSTRAINT prof_deptno_fk FOREIGN KEY(deptno) REFERENCES department(deptno);
무결성 제약조건을 삭제하기
무결성 제약조건을 삭제하기 위해 ALTER TABLE… DROP CONSTRAINT 문을 사용합니다(부모 테이블의 기본키 무결성 제약조건을 삭제할 때는 참조 무결성 제약조건을 먼저 삭제하거나 CASCADE 옵션을 사용하여 동시에 삭제가 가능합니다)
무결성 제약조건 삭제
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
CASCADE 옵션을 사용한 삭제
ALTER TABLE table_name DROP CONSTRAINT constraint_name CASCADE;
무결성 제약조건의 활성화 및 비활성화
무결성 제약조건의 활성화 및 비활성화를 위해 ALTER TABLE 문을 사용합니다.
제약조건 비활성화
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name [CASCADE];
제약조건 활성화
ALTER TABLE table_name ENABLE [NOVALIDATE] CONSTRAINT constraint_name [CASCADE];
맺으며
오라클 데이터베이스에서는 다양한 데이터 무결성 제약조건을 제공하여 데이터의 정확성과 일관성을 보장하는데요, NOT NULL, 고유 키, 기본키, 참조 키, CHECK 등의 제약조건을 적절히 활용하여 데이터베이스의 무결성을 유지하고 데이터의 신뢰성을 보장할 수 있습니다. 데이터 베이스 관리자 혹은 각 분야의 개발자들은 이러한 제약조건을 적절히 활용하여 DB 보호와 일관성 및 안정적이고 효율적인 데이터베이스 시스템을 구축 하는데 도움이 될 수 있습니다
이전 글 – 오라클 인덱스에 대해 알아보자 (데이터베이스 실무에서 효율적으로 사용 할 수 있는 Oracle Index)
이전 글 – 오라클 뷰(VIEW) 조회 및 사용방법 (개념과 특징,종류, 장단점, 인라인뷰)
이전 글 – 오라클 사용자 권한 제어 (4가지 – 시스템 권한, 객체 권한, 롤, 동의어)
이전 글 – 오라클(데이터 웨어하우스) 분석 함수(효과적인 데이터 다차원 분석을 위한 강력한 도구)
이전 글 – 오라클 스케줄러와 JOB 관리 방법
이전 글 – 오라클 테이블 복구(테이블 데이터 복원하기)