1. 무결성이란?
: 데이터베이스 내에 보다 정확하고 유효한 데이터만을 유지시키는 속성을 의미한다.
: 즉, 불필요한 데이터는 최대한 제거하고, 합칠 수 있는 데이터는 최대한 합쳐서 사용하며, 데이터를 생성,조회,수정,삭제할 때 데이터 값을 일관되고 정확하게 유지하자는 특성을 의미한다.
: 데이터베이스에서 무결성을 유지하는 경우, 데이터의 일관성을 확인할 필요가 없어져 오류의 가능성을 줄여준다.
2. 무결성의 제약조건
- 개체 무결성
- 참조 무결성
- 범위 무결성
2.1 개체 무결성
: 모든 테이블이 프라이머리 키를 지녀야 하며, 프라이머리 키로 선택된 컬럼의 값은 고유하고, NULL이 허용되지 않아야 한다는 속성이다.
2.2 참조 무결성
: 외래 키의 값이 빈(null) 값이거나 참조된 테이블의 기본 키 값과 동일해야 한다는 속성이다.
2.3 범위 무결성
: 사용자가 정의한 도메인 내에서 관계형 데이터베이스의 모든 열을 정의하도록 규정하는 속성이다.
** 도메인 타입이란?
: 기본 데이터 타입을 기반으로 선택적으로 제약조건을 걸수 있는 사용자 정의 데이터 타입.
: 아래 예시는 도메인 타입과 범위 무결성의 속성을 보여준다.
- CREATE DOMAIN phoneint AS integer CHECK (VALUE > 0 AND VALUE < 9);
- CREATE TABLE domain_type_study(id phoneint);
- INSERT INTO domain_type_study VALUE(1)-성공;
- INSERT INTO domain_type_study VALUE(-1)-실패;
3. 컬럼 값 제한하기
: 데이터의 무결성을 유지하기 위해서는 일부 컬럼값들을 제한하는 기능이 필요하다.
: 다음의 다섯가지 조건을 이용해 컬럼을 제한할 수 있다.
- NOT NULL 제약조건
- UNIQUE 제약조건
- 프라이머리 키(Primary Key)
- 외래 키(Foreign Key)
- CHECK 제약조건
3.1 NOT NULL 제약조건
: 빈 값을 허용하지 않는 조건,필수로 입력해야 하는 정보에 이 제약조건들을 부여한다.
3.2 UNIQUE 제약조건
: 유일한 값을 가져야 한다는 제약조건, 제약조건에 해당하는 컬럼값은 테이블 내에서 유일한 값이 되어야 한다.
** UNIQUE 제약 조건이 여러 컬럼에 해당하는 경우 다음과 같이 한번에 작성 가능하다.
CREATE TABLE contact_info(
cont_id NUMERIC(3) NOT NULL,
name VARCHAR(15) NOT NULL,
tel INTEGER[] NOT NULL,
email VARCHAR
UNIQUE (cont_id, tel, email)
);
3.3 프라이머리 키
: 주 식별자,NOT NULL 하고 UNIQUE 해야한다.
: 일반적으로 프라이머리 키는 테이블에 하나씩 존재하며, 타입은 주로 SERIAL을 많이 사용한다.
CREATE TABLE contact_info(
cont_id SERIAL NOT NULL PRIMARY KEY,
name VARCHAR(15) NOT NULL,
tel INTEGER[] NOT NULL,
email VARCHAR
);
3.4 외래키
: 참조관계에서 테이블을 이어주는 키
: 참조관계에 있는 두 테이블 중 부모테이블의 값은 자식테이블의 값보다 먼저 지울 수 없다.테이블을 지우는 상황을 ON DELETE라고 하며, 다음과 같은 다섯가지 유형이 있다.
- ON DELETE NO ACTION (참조된 컬럼값을 지우면 안되는 경우)
- ON DELETE RESTRICT(참조된 컬럼값을 지우면 안되는 경우)
- ON DELETE SET NULL(참조된 컬럼값을 지워야하는 경우)
- ON DELETE CASCADE(참조된 컬럼값을 지워야하는 경우)
- ON DELETE SET DEFAULT(참조된 컬럼값을 지워야하는 경우)
: 외래키가 여러개인 경우 'FOREIGN KEY (컬럼1 이름, 컬럼2 이름) REFERENCES 다른 테이블 명( 컬럼3 이름, 컬럼4 이름)' 형식으로 작성한다.
- FOREIGN KEY (subj_code, subj_name) REFERENCES subject( subj_id, subj_name)'
: 외래키의 제약조건은 아래와 같은 규칙을 지닌다.
- 부모 테이블이 자식 테이블보다 먼저 생성되어야 한다.
- 부모 테이블은 자식 테이블과 같은 데이터 타입을 가져야 한다.
- 부모 테이블에서 참조된 컬럼의 값만 자식 테이블에서 입력 가능하다.
- 참조되는 컬럼은 모두 프라이머리 키이거나 UNIQUE 제약조건 형식이어야 한다.
3.5 CHECK 제약조건
: CHECK 제약 조건은 CHECK 뒤에 나오는 식이 불리언 타입의 True를 만족해야 한다.
- CREATE TABLE order_info(
- order_no INTEGER NOT NULL PRIMARY KEY,
- cust_name VARCHAR(100),
- price MONEY,
- order_qty INTEGER CHECK (order_qty > 0)
- );
: 도메인에 CHECK 제약조건을 걸어 제한하는 경우
- CREATE DOMAIN phoneint AS integer CHECK(VALUE > 0 AND VALUE < 9);
- CREATE TABLE domain_type_check(
- id phoneint
- );
'도서 > 모두를 위한 postgreSQL' 카테고리의 다른 글
Day7. 쿼리에 사용되는 연산자와 함수 (0) | 2023.06.24 |
---|---|
DAY6. Alter Table (0) | 2023.06.22 |
Day4. 데이터 타입 (0) | 2023.06.20 |
Day3.sql 명령어 (0) | 2023.06.19 |
Day2.PostgreSQL 프로세스 구조 (0) | 2023.06.16 |