제약조건이란 무엇인가?
관계형 모델의 큰 장점 중 하나는 데이터 모델의 한 부분으로 데이터 무결성을 정의할 수 있다는 것이다.
데이터 무결성은 데이터 모델에서 정의되는 제약 조건이라고 하는 규칙을 통해 구현되며,
RDBMS에서 이 규칙들을 사용하게 된다.
데이터 무결성을 강화시키는 가장 간단한 방법은
속성 형식과 더불어 칼럼의 "NULL 허용 여부"를 지정하는 것이다.
또한, 데이터의 무결성을 확보하기 위해 칼럼마다 키(KEY)라는 속성을 사용할 수 있다.
제약조건 키 종류와 속성
1. 키(Key)
- 열쇠는 무언가를 열거나 잠글 때 사용하는 것으로, 같은 것이 하나도 없다.
- 이와 같이 키라는 것은 무언가를 식별하는 고유한 식별자(identifier) 기능을 한다.
- 즉, 키는 데이터베이스에서 조건에 만족하는 관계의 행을 찾거나 순서대로 정렬할 때 다른 행과 구별할 수 있는
유리한 기준이 되는 속성의 집합이다.
- 키의 종류로는 기본 키, 슈퍼 키, 후보 키, 대체 키, 외래 키 등이 존재한다.
2. 슈퍼 키(Super Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다.
슈퍼 키는 유일성만 만족하면 슈퍼 키가 될 수 있다.
- 유일성이란 하나의 키로 특정 행을 바로 찾아낼 수 있는 고유한 데이터 속성을 말한다.
예를 들면 전국에서 나를 구별할 수 있는 유일하고 고유한 속성은 주민번호이듯이...
주민번호는 전 국민이 모두 겹치지 않아 유일하고 고유한 구별 방법으로 쓰인다.
- 아래 사진을 보면 7조라는 팀에 팀원은 4명이 있다. 이 4명을 구분할 수 있는 것은
고유한 학번 일수 도 있고, 주민번호일 수도 있다.
- 이름과 나이를 묶어서 하나의 속성으로 만드는 것도 가능하다.
이름과 나이를 합쳐서 7 조안에서 중복만 되지 않으면 가능하기 때문이다.
이름과 나이를 합쳐서 4명을 구분할 수 있으면 슈퍼 키가 될 수 있다.
- 학번과 주민번호를 묶어서 슈퍼 키로 만들 수도 있고,
학번과 주민번호과 이름을 합쳐서 슈퍼키로도 만들 수 있고,
학번과 주민번호과 이름과 나이를 합쳐서 슈퍼키를 만들 수도 있다.
어떤 속성끼리 묶던 중복 값이 안 나오고 서로 구별만 할 수 있으면 슈퍼 키가 될 수 있다.
3. 후보 키 (Candidate Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다.
후보 키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야 한다.
* 유일성 : 하나의 키값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
* 최소성 : 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성만으로 구성되어 있어야 한다.
- 아래 사진을 보면 7조라는 팀에 팀원은 4명이 있다.
이 4명을 구분하는 슈퍼 키들이 모여 있는데,
슈퍼키들 중에서 최소한의 속성으로 4명을 구분할 수 있어야 후보 키가 될 수 있다.
- 학번 슈퍼 키와 주민번호 슈퍼 키는 속성들이 각 1개씩 이루어져 있다.
하지만 이름+나이 슈퍼키는 이름과 나이를 묶어서 2개의 속성으로 되어 있다.
이름+나이 슈퍼키는 2개 이므로 각 1개의 속성인 주민번호와 학번 슈퍼키가 최소성을 만족한다고 할 수 있다.
- 따라서 이름+나이 슈퍼키는 속성 개수가 다른 것보다 많기 때문에 최소성을 만족하지 못해서 후보 키가 될 수 없다.
4. 기본키(Primary Key)
- 후보 키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
- 테이블에서 기본키는 오직 1개만 지정할 수 있다.
- 기본키는 데이블 안에서 유일하게 각 행들을 구별할 수 있도록 쓰인다.
- 기본키는 NULL 값을 절대 가질 수 없고, 중복된 값을 가질 수 없다.
각 행들을 구별하려면 값이 없어선 안되고, 중복되어서도 안되기 때문이다.
5. 대체키 (Alternate Key)
- 후보 키가 두 개 이상일 경우 그중에서 어느 하나를 기본키로 지정하고 남은 후보 키들을 대체키라고 부른다.
- 대체키는 기본키로 선정되지 않은 후보 키이다.
6. 외래 키(Foreign Key)
- 테이블이 다른 테이블의 데이터를 참조하여 테이블 간의 관계를 연결하는 것을 뜻한다.
- 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 준다.
- 참조될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.
- 이때, 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야 한다.
- 외래 키는 참조되는 테이블의 기본키와 동일한 키 속성을 가진다.
- 참조되는 부모 테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야 한다.
- 부모 테이블 먼저 삭제될 수 없습니다. 왜냐하면 자식 테이블은 부모 테이블을 참조하는데 부모 테이블이 삭제되면
참조하는 것이 없어지기 때문에 외래 키 참조 오류가 발생한다.
- 실무에서는 외래키의 제약사항 때문에 외래키가 논리적으로만 존재하는 경우가 많다.
'DB ARCHITECTURE' 카테고리의 다른 글
SQL-SERVER SCHEDULER : sqlserver 스케쥴러(2) (7) | 2021.12.15 |
---|---|
SQL-SERVER SCHEDULER : sqlserver 스케쥴러(1) (0) | 2021.12.15 |
SQL-SERVER SCHEDULER : 윈도우 스케쥴러 (0) | 2021.12.15 |
정규화(Normalization) (0) | 2021.08.02 |
함수적 종속 (0) | 2021.07.30 |