일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 완전탐색
- 구현
- 파이썬
- 자바스크립트
- 브루트포스 알고리즘
- SWEA
- 스택
- 오라클
- 너비 우선 탐색
- 그리디 알고리즘
- 백트래킹
- 백준 알고리즘
- 그래프 이론
- SW Expert Academy
- 너비우선탐색
- DFS
- 다이나믹 프로그래밍
- 깊이우선탐색
- BFS
- 브루트포스
- 문자열
- 다익스트라
- 데이터베이스
- 그래프 탐색
- oracle
- DP
- 프로그래머스
- 백준알고리즘
- javascript
- Python
- Today
- Total
민규의 흔적
[오라클 DB] 릴레이션의 키(키의 종류) 본문
릴레이션의 키
릴레이션에서 각 튜플을 유일하게 식별할 수 있는 하나 이상의 애트리뷰트들의 집합을 의미한다.
릴레이션 키의 특성
1. 유일성(Uniqueness)
하나의 키 값으로 각 튜플을 유일하고 식별할 수 있어야 한다.
2. 최소성(Minimality)
각 튜플을 유일하게 식별할 수 있는 키는 꼭 필요한 애트리뷰트로만 구성되어야 한다.
만약 키의 애트리뷰트 중, 하나의 애트리뷰트를 제거하면 더 이상 식별할 수 없어야 함을 의미한다.
릴레이션 키의 종류
슈퍼 키(super key)
한 릴레이션 내의 특정 튜플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합으로, 가장 넓은 의미를 지닌다.
예를 들어 신용카드 회사의 고객 릴레이션에서 (신용카드번호, 주소) 애트리뷰트 쌍 또는 (주민등록번호, 이름) 애트리뷰트 쌍 또는 (주민등록번호) 애트리뷰트가 특정 튜플을 고유하게 식별하는 슈퍼 키로 사용될 수 있다.
튜플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있으며, 위의 예시에서 주소, 이름은 꼭 필요하지 않은 애트리뷰트로 볼 수 있다.
유일성만 만족하며, 이는 튜플을 식별할 수만 있으면 된다는 의미이다.
후보 키(candidate key)
각 튜플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임이다.
이는 유일성과 최소성을 모두 만족한다.
예를 들어 (신용카드번호, 주소) 애트리뷰트 쌍은 신용카드 회사의 고객 릴레이션의 후보 키가 아니지만 (신용카드번호)는 후보 키이다.
모든 릴레이션에는 최소한 한 개 이상의 후보 키가 존재하며, 후보 키도 두 개 이상의 애트리뷰트로 이루어질 수 있다. 이런 경우에 복합 키(composite key)라고 부른다. 예를 들어 아래의 릴레이션 예시인 경우, (학번, 과목번호) 애트리뷰트 쌍으로 묶어야 유일성을 만족하는 후보 키(복합 키)라고 볼 수 있다.
슈퍼 키와 후보 키의 관계는 다음과 같다.
후보 키에 대해 조금 더 자세히 알아보기 위해 다음 예시 릴레이션의 인스턴스와 키에 대해 추론해보자
Q1. 학생 릴레이션에서 이름이 후보 키가 될 수 있을까?
불가능하다. 동명이인이 있을 가능성이 존재하기 때문이며 심지어 이름을 개명하는 경우 또한 존재한다.
Q2. 학생 릴레이션에서 이메일이 후보 키가 될 수 있을까?
불가능하다. 이메일 또한 훗날 변경할 수 있는 경우가 존재하기 때문이다.
Q3. 학생 릴레이션에서 학번 + 이름이 후보 키가 될 수 있을까?
불가능하다. 학번 애트리뷰트 하나 만으로 튜플을 식별할 수 있는데, 불필요한 이름 애트리뷰트까지 조합할 필요가 없기 때문이다.
Q4. 학생 릴레이션에서 학번은 후보 키가 될 수 있을까?
유일성과 최소성을 만족하므로 가능하다.
기본 키(primary key)
한 릴레이션에 후보 키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정한다.
후보 키 중에서 하나를 고른 것이기에 유일성과 최소성을 모두 만족한다.
예를 들어 신용카드 회사의 고객 릴레이션에서 신용카드번호와 주민등록번호가 후보 키가 될 수 있으며, 이 중에서 신용카드번호를 기본 키로 선정할 수 있다.(후보 키 중에서 하나 선택)
자연스러운 기본 키를 찾을 수 없는 경우에는 레코드 번호와 같이 종종 인위적인 키 애트리뷰트를 릴레이션에 추가할 수 있다. 이런 키를 대리 키(surrogate key) 라고 부른다.
예를 들어 게시판에서 기본 키는 종종 '게시판 고유번호'라는 고유 번호를 채택하는데, 이는 새로운 튜플이 삽입될 때마다 자동으로 증가하는 정수형 인덱스 등을 활용하곤 한다.
기본 키를 선정할 때 고려할 사항들
1. 애트리뷰트가 항상 고유한 값을 가질 것인가?
유일성을 만족하기 위한 조건이다.
2. 애트리뷰트가 확실하게 널 값을 갖지 않을 것인가?
학번이 null일 수는 없는 이치와 같다.
3. 애트리뷰트의 값이 변경될 가능성이 높지 않은가?
이메일처럼 변경 가능하면 기본 키로 선정할 수 없다.
4. 가능하면, 작은 정수 값이나 짧은 문자열을 갖는 애트리뷰트.
메모리의 이점을 가져가기 위해서이다.
5. 가능하면, 복합 기본 키를 피할 것.
최소성을 만족하기 위한 조건이다.
대체 키(alternate key)
기본 키가 아닌 후보 키로, 만약 신용카드 회사의 고객 릴레이션에서 신용카드번호와 주민등록번호 중, 신용카드번호를 기본 키로 선정하였다면, 주민등록번호는 대체 키가 된다.
대리 키와 헷깔리지 않아야 한다.
슈퍼 키, 후보 키, 기본 키, 대체 키의 관계도는 다음과 같다.
정리하자면 슈퍼 키는 유일성만 만족, 후보 키는 슈퍼 키 중에 최소성까지 만족, 기본 키는 후보 키중에 하나를 선택한 것, 대체 키는 후보 키 중 기본 키 선택을 받지 못한 나머지이다.
외래 키(foreign key)
어떤 릴레이션의 기본 키를 참조하는 애트리뷰트이다.
관계 데이터베이스에서 릴레이션들 간의 관계를 나타내기 위해서 사용되며 외래 키 애트리뷰트는 참조되는 릴레이션의 기본 키와 동일한 도메인을 가져야 한다.
외래 키의 유형은 다음과 같다.
1. 다른 릴레이션의 기본 키를 참조하는 외래 키
위 그림과 같이 EMPLOYEE 릴레이션의 DNO 애트리뷰트(외래 키)가 DEPARTMENT의 DEPTNO 애트리뷰트(기본 키)를 참조하는 형태를 가지고 있으며, 당연하지만 둘의 도메인은 동일하다(DNO와 DEPTNO는 둘 다 '부서 번호'라는 같은 의미를 가지는 애트리뷰트이다.)
2. 자체 릴레이션의 기본 키를 참조하는 외래 키
사원의 직속 상사(MANAGER) 애트리뷰트(외래 키)가 자체 릴레이션의 EMPNO(기본 키)를 참조하는 형태를 띄고 있다.
만약 특정 튜플에서 외래 키인 MANAGER 애트리뷰트에 들어 있는 데이터가 해당 릴레이션의 기본 키에 없는 값이라면 어떻게 될까?
예를 들어 위 릴레이션에서 이수민 사원의 MANAGER 애트리뷰트에 1230 이라는 값이 들어있다고 가정해보자(사실 이런 가정조차 불가능하다. DBMS에서 막아버린다.)
1230 이라는 값은 애초에 참조하는 릴레이션(자체 릴레이션)의 기본 키 값 중 존재하지 않는 값이다.
이와 같이 외래 키 값이 참조하는 기본 키에 없는 값이라면 무결성에 문제가 생겼다라고 표현한다.
3. 기본 키의 구성요소가 되는 외래 키
수강 릴레이션은 각각 학생 릴레이션의 학번를 참조하여 학번 애트리뷰트를 외래 키로 사용하고 있고, 과목 릴레이션의 과목번호를 참조하여 과목번호 애트리뷰트를 외래 키로 사용하고 있다.
수강 릴레이션에서 기본 키로 활용할만한 단일 키가 존재하지 않으므로, 두 외래 키를 조합하여 복합 키 형태의 기본 키를 사용하는 경우가 존재한다.
'데이터베이스' 카테고리의 다른 글
[오라클 DB] 관계 데이터 모델과 관계 대수의 기본 개념 (0) | 2023.10.18 |
---|---|
[오라클 DB] 무결성 제약조건 (도메인, 엔티티, 참조 무결성 제약조건) (0) | 2023.10.18 |
[오라클 DB] 릴레이션의 특성 (2) | 2023.10.17 |
[오라클 DB] 관계 데이터 모델의 개념과 용어 정리 (4) | 2023.10.17 |
[오라클 DB] 데이터 모델과 데이터 모델링 (0) | 2023.10.17 |