IT 관련,,/데이터베이스(sql)

[SQL/Oracle]무결성 제약조건이란~

IT깡패's 2018. 9. 17. 22:32
728x90
반응형
SMALL


데이터 무결성(무결성 제약조건),,


무결성 제약 조건(Data Integrity Constraint Rule)이란?

테이블에 부적절한 자료가 입력 되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러가지 규칙을 말한다.

무결성 : 데이터베이스 내에 있는 데이터의 정확성 유지

제약 조건 : 바람직하지 않은 데이터가 저장 되는 것을 방지 하는 것


데이터 무결성 제약조건의 특징

- 테이블 생성 시 무결성 제약조건을 정의하여 프로그래밍 과정을 줄여준다.

- 데이터베이스 서버에 의해 무결성 제약조건이 관리되어 데이터 오류 발생 가능성을 줄여준다.

- 테이블에 대해 정의되고 데이터 딕셔너리에 저장된다.

- 일시적으로 활성화 또는 비활성화를 할 수 있다.


ex) ora-00001 무결성 제약조건에 위배된 예시

ora-00001은 데이터 무결성 제약조건에 위배된 예시중 하나인데, 주로 primary key 제약조건에 중복되거나 primary key 위치가 바꼈을 때 

나는 오류이다. 특히 INSERT할 때 위배되는 현상이다.


무결성 제약 조건

 역할

 NOT NULL

 NULL을 허용하지 않음

 UNIQUE

 중복된 값을 허용하지 않음. 항상 유일한 값을 갖도록 한다

 PRIMARY KEY(기본키)

 NULL을 허용하지 않고 중복된 값을 허용하지 않는다

 NOT NULL 조건과 UNIQUE 조건을 결합한 형태이다

 FOREIGN KEY(외래키)

 참조되는 테이블의 컬럽의 값이 존재하면 허용한다

 CHECK

 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용함 


NOT NULL 제약 조건


- 특정 컬럼은 반드시 값이 입력되도록 필수 입력 컬럼으로 지정하는 것임.

NOT NULL은 INSERT 시 즉, 데이터 입력시에 누락이 되어서는 안되는 부분이다.

NULL 값이 들어가게 되면 오류가 난다. 

NOT NULL의 제약 조건이 위배되지 않으려면 처음부터 테이블을 만들 때, NOT NULL과 NULL을 빼고서 만들면 된다.


UNIQUE 제약 조건


- 특정 컬럼에 대해 자료가 중복되지 않게 하는 것(지정된 컬럼에는 유일한 값만이 저장되게 하는 것이다)

UNIQUE는 해당 테이블에 있어서는 존재하는 값이 유일해야 한다. 만일 INSERT 또는 UPDATE 시, 제약이 걸려 있는 컬럼에 동일한 

데이터가 존재 한다면 오류가 난다. NOT NULL과 다르게 UNIQUE의 제약 조건의 위배됨은 자주 사용하지 않기 때문에 많이 발생하지는

않는다. 그리고 NULL 값에 대해서는 UNIQUE 제약이 적용되지 않는다. 즉, NULL 값은 데이터로 인식되지 않아서 해당 컬럼에 NULL 

데이터행이 여러개 존재 가능하다.


PRIMARY KEY 제약 조건


- UNIQUE 제약조건 + NOT NULL 제약조건

- 컬럼명과 자료형을 기술한 다음 PRIMARY KEY를 기술하면 된다.

PRIMARY KEY는 하나의 테이블에 있는 데이터들을 식별하기 위한 기준으로 인식되는 제약조건이다.

한개의 테이블에 하나만 생성이 가능하며, PRIMARY KEY는 NOT NULL + UNIQUE의 속성을 가진다. 즉 NULL 값이 있으면 안되고 

해당 컬럼의 데이터는 중복되지 않고 유일해야 한다. UNIQUE에서와 같이 여러 컬럼들을 조합해서 지정 할 수 있다.

만일 이런 제약 조건을 어길시 PRIMARY KEY 제약 조건이 위배된다는 오류가 나타난다.


FOREIGN KEY 제약 조건


해당 컬럼에 참조하는 테이블로부터 존재하는 값들만 사용한다는 의미의 제약조건이다.

만약 참조하는 테이블에 해당하는 값이 없을시에는 INSERT, UPDATE시에 오류가 난다. 외래키는 여러개의 컬럼에 중복적으로 적용 

가능하다.

외래키로 두 테이블이 부모 테이블과 자식 테이블로 관계를 맺고 있을시에 자식 테이블이 참조하는 데이터는 부모 테이블에서 삭제가 

불가능 하다.


참조의 무결성은 테이블 사이의 관계에서 발생하는 개념

조인이나 서브쿼리를 할 때 사원 테이블에 없는 상세 정보는 부서 테이블에서 찾아오는데 사원 테이블에 저장된 부서번호가 테이블에 없다면 참조 할 때 무결해야 한다는 조건에 위배 된다.


참조의 무결성은 두 테이블 사이(사원 테이블, 부서 테이블)의 주종 관계에 의해서 결정 되는데, 주체가 되는 테이블은 부모 테이블이고 종속이 되는 테이블은 자식 테이블이 된다.


사원은 회사 내에 존재하는 부서에 소속되어 있어야 한다.

위와 같이 표현된다면 부서가 주체 사원이 종속이 된다.


주의점 : 부모 키가 되기 위한 컬럼은 반드시 부모 테이블의 기본키(PRIMARY KEY)나 유일키(UNIQUE)로 설정되어 있어야 한다는 점이다.


부모 테이블 - PRIMARY KEY or UNIQUE

자식 테이블 - FOREIGN KEY



CHECK


조건에 부합하는 데이터만 입력이 가능하도록 하는 제약 조건이다.

조건에는 기본 연산자나 비교 연산자 IN,NOT IN등등이 사용 가능하다.




컬럼에 제약 설정하기


제약조건은 CREATE TABLE 명령으로 테이블을 생성할 때, 테이블에 대해서 제약을 걸 수도 있고, 컬럼에 제약을 걸 수도 있다.


컬럼 레벨의 제약조건은 컬럼을 정의할 때, 해당 컬럼별로 지정하는 제약조건으로 특히 NOT NULL제약 조건은 컬럼 레벨에서만

정의할 수 있다.

따라서 컬럼에서 UNIQUE나 NOT NULL 제약조건을 쓰려면 일일히 설정해야 한다는 의미이다.

SQL> CREATE TABLE test03(
    a1 NUMBER NOT NULL,
    b1 NUMBER NOT NULL UNIQUE,
    c1 VARCHAR(20)
    );
 

테이블이 생성되었습니다.
  
-- a1 컬럼에는 NOT NULL 제약이, b1 컬럼에는 NOT NULL 제약과 UNIQUE 제약이 걸려있다. 
 
-- 이런 제약을 컬럼에 대해 제약이라고 한다. 


테이블에 제약 설정하기 


테이블 레벨의 제약조건은 제약조건이 하나 이상의 컬럼을 사용하거나, 하나의 컬럼에 두개 이상의 제약조건을 지정하는 경우 사용한다.

SQL> CREATE TABLE test04(
  2  e1 NUMBER NOT NULL,
  3  f1 NUMBER NOT NULL,
  4  g1 VARCHAR(10),
  5  PRIMARY KEY(e1,f1)
  6  );
 
테이블이 생성되었습니다.
 
-- 한 개의 제약(PRIMARY)을 복수의 컬럼(e1, f1)에 설정하는 테이블 제약


오라클 무결성 제약 조건과 컬럼, 테이블 제약 설정하기는 간단하게 생각하면 쉽게 이해할 수 있는 부분이다.

위배조건도 상당히 많기 때문에 꼭 익히고 넘어가자~ 


출처 - http://samdo0812.tistory.com/69

728x90
반응형
LIST