본문 바로가기
Category/Database

[Oracle] 제약 조건과 무결성

by developer__Y 2024. 1. 2.

데이터 사전이란 Oracle Database의 읽기 전용으로 제공되는 일종의 가상테이블로,

해당 Database의 전반적인 정보를 제공한다.

이러한 데이터 사전(Data Dictionary)을 활용하여 DB의 다양한 정보를 확인해볼수 있다.

 

  • user_constraints : 해당 테이블의 제약조건 정보를 보여준다.
  • user_cons_columns : 제약조건 이름과 컬럼명을 보여준다.

ex)

 

+) 모든 데이터 사전은 오라클 공식 홈페이지에 수록되어있다.

https://docs.oracle.com/cd/B28359_01/server.111/b28320/index.htm

 

Index

 

docs.oracle.com

 

 

데이터베이스를 설계할때, 데이터들의 무결성을 확보하는것이 매우 중요하다.

다양한 관계의 테이블과 연관된 컬럼사이에서 어느 테이블에서는 고유 ID의 값이 1이었다가, 다른 테이블에서는

해당 고유 ID의 값이 2가 되어버리면 데이터의 신뢰성을 잃게되고 결국 의미없는 정보가 되어버리기 때문이다.

이러한 데이터의 무결성이란 데이터의 정확성,일관성,유효성이 유지되는것으로 데이터 무결성의 원칙을 지키면서

다양한 테이블 사이에서 중복되거나, 누락되지않도록 연관된 관계를 유지하면서 테이블 설계를 해야한다.

 

제약조건(Constraints)

 

 

제약조건이란 테이블에 데이터를 INSERT 할때, 개발자가 의도한 데이터 형식,조건만 테이블에 

저장될수 있게 하기위한 조건이다.

많은 데이터를 저장하는 데이터베이스에서 데이터의 무결성을 보장하기위해 필수적인 5가지 제약조건이 있다.

 

  1. NOT NULL : NULL값이 들어올수 없음.
  2. CHECK : 해당 COLUMN에 들어올수 있는 값,범위등 제한 조건
  3. UNIQUE : 중복값 금지.
  4. PRIMARY KEY(기본키) : Unique + Not Null로, Null이 아니면서 중복이 아닌 키중 PK로 지정
  5. FOREIGN KEY(외래키) : 다른 테이블의 Unique 또는 PK를 참조하는 참조키

 

데이터 무결성을 유지하면서 테이블 설계하기

 

학생들의 과목 및 점수를 데이터베이스에 담기위해 테이블을 설계 할때,

테이블 설계를 어떻게 해야할까?

 

학생은 과목당 하나의 점수밖에 가질수 없다. ( 일대일)

학생은 여러개의 과목을 가질수있고, 과목또한 여러 학생을 가질수 있다 (다대다)

이러한 테이블간에 관계를 고려해서,

<점수> 테이블은 학생ID와 과목ID를 각각의 테이블로 부터 FK로 참조받아오고,

해당 점수과 학점을 가진다면, 데이터의 무결성을 유지하면서 데이터 중복을 최소화 할수 있을것이다.

이를 SQL 구문으로 나타내면 다음과 같다.

 

 

 

 ON DELETE CASCADE 를 통해, 만약 어떠한 부모테이블의 데이터가 삭제된다면 해당 테이블을 참조하고있는 자식테이블의 해당 컬럼의 데이터또한 같이 삭제함으로써  데이터 무결성을 유지할수 있을것이다.