복합키와 다중PK키는 비슷한 개념이지만 약간 다른 의미를 가진다.
복합키
- 하나의 테이블에서 두 개 이상의 열로 구성된 키
- 복합키를 사용하여 테이블의 각 row를 고유하게 식별함
- 주로 두 개 이상의 열이 조합되어 고유성을 보장해야하는 경우에 사용됨
- 다른 테이블에서FK로 참조할 수 있음
- 실무에서는 복합키,FK를 거~의 사용하지 않으니 참고하자.
다중PK키
- 하나의 테이블에서 두 개 이상의 열이 기본키로 지정되는 경우
- 일반적으로 하나의 테이블에서는 하나의 기본 키만 있어야하지만, 다중PK를 사용하면 두 개 이상의 열이 기본 키 역할을 함
- 각 열의 조합은 유일해야하며, 각 열은 null이 아니어야함
즉, 복합키는 하나의 테이블에서 여러 열로 구성된 고유 키를 나타내고
다중PK는 하나의 테이블에서 여러 열이 기본키로 지정되는 경우이다.
예시)
수강신청을 예로 들어보자.
학번만 pk로 걸게된다면, 중복이 발생해 한 학생은 하나의 강의만 들을 수 있게 된다.
이를 학번+강의번호로 다중PK를 걸어본다면, 같은 학생이라도 여러 강의를 들을 수 있게되는 개념이다.
-- 학생테이블 생성
create table students {
student_id int,
name varchar2(50),
primary key (student_id)
}
-- 강의 테이블 생성
create table courses {
course_id int,
course_name varchar2(100),
primary key (course_id)
}
-- 강의 수강 신청 테이블 생성
create table courseRegistrations {
student_id int,
course_id int,
registration_date date,
primary key (student_id, course_id)
}
이 때, 강의 수강 신청 테이블 구조를 확인해보자.
desc CourseRegistrations
Name | Null | Type | PK | Default | Extra
-----------------|------|------------|----|---------|------
student_id | | INT | O | |
course_id | | INT | O | |
registration_date| | DATE | | |
응용
문제: 학교에서 학생들의 과목 성적을 관리하는 데이터베이스를 설계해야 합니다. 각 학생은 여러 과목을 수강하며, 각 과목은 여러 번의 시험을 포함합니다. 학생의 학번과 각 시험의 시험 번호를 기반으로 각 시험의 성적을 저장하는 테이블을 설계하십시오. 테이블은 학생의 학번과 시험 번호의 조합으로 고유해야 합니다.
create table scores {
student_id int,
test_id int,
subject_name varchar2(50),
score float,
primary key (student_id, test_id)
}
*float : 4byte 실수형. 부동 소수점
'DB > Oracle' 카테고리의 다른 글
[Oracle] Toad for Oracle 다운로드 (0) | 2024.05.06 |
---|---|
서브쿼리에 대해 알아보자(인라인뷰, exists, insert) (0) | 2024.04.07 |
VARCHAR와 VARCHAR2의 차이 (0) | 2024.04.04 |
DECODE 함수 (0) | 2024.04.04 |
UNION과 UNION ALL의 차이 (0) | 2024.04.03 |