도서/모두를 위한 postgreSQL

DYA5. 데이터의 무결성

joje* 2023. 6. 21. 00:06

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