복합키 (Composite Key) 또는 복합 기본키는 두 개 이상의 칼럼으로 구성된 기본키를 의미합니다. 이러한 키는 데이터베이스 테이블 내에서 레코드의 고유성을 보장하기 위해 사용됩니다. 때로는 하나의 칼럼만으로는 레코드의 고유성을 보장하기 어려울 때, 두 개 이상의 칼럼을 결합하여 고유한 키 값을 생성합니다.
복합키의 유용함
데이터 무결성 보장: 복합키를 사용하면, 한 테이블 내의 특정 칼럼 조합의 고유성을 보장할 수 있습니다. 이를 통해 데이터 중복을 방지하고 무결성을 유지할 수 있습니다.
정규화: 복합키는 데이터베이스 설계의 정규화 과정에서 발생하는 테이블 간의 관계를 나타내는 데 유용하게 사용됩니다.
예시 시나리오 1:
국제 도서 대여 서비스를 운영하는 회사에서는 여러 나라의 여러 도서관에서 도서 대여 정보를 관리하고 있습니다. 한 도서관 내에서는 도서 코드만으로도 도서를 구분할 수 있지만, 전세계의 모든 도서관을 고려할 때 동일한 도서 코드를 가진 책이 존재할 수 있습니다. 따라서 각 대여 정보를 구분하기 위해 '도서관 코드'와 '도서 코드' 두 개의 칼럼을 결합하여 복합키를 생성합니다.
예문 (SQL을 사용한 예시):
-- 대여 정보 테이블 생성
CREATE TABLE InternationalBookRental (
libraryCode VARCHAR(10),
bookCode VARCHAR(10),
rentalDate DATE,
returnDate DATE,
PRIMARY KEY (libraryCode, bookCode) -- 복합키 설정
);
-- 대여 정보 입력 예시
INSERT INTO InternationalBookRental (libraryCode, bookCode, rentalDate)
VALUES ('LIB123', 'BK001', '2023-01-01');
주석 설명:
PRIMARY KEY (libraryCode, bookCode)
:libraryCode
와bookCode
의 조합으로 복합키를 생성합니다. 이렇게 함으로써, 전세계의 어떤 도서관에서든 동일한 도서 코드를 가진 책이 대여되더라도, 도서관 코드와 함께 고려하면 각 대여 정보를 고유하게 구분할 수 있습니다.
정규화와 복합키를 활용한 테이블 간 관계 설명
데이터베이스 설계에서 정규화는 중복 데이터를 최소화하고 무결성을 보장하기 위한 과정입니다. 테이블 간의 관계를 나타내기 위해 복합키를 활용하는 것은 정규화 과정에서 매우 중요합니다. 특히, 복합키를 활용한 관계 테이블이 이러한 목적을 달성하는 데 큰 도움을 줍니다.
예시 시나리오 2:
한 대학에서 학생들의 과목별 성적을 관리하는 데이터베이스를 설계하고자 합니다. 여기에서는 '학생'과 '과목'이라는 두 가지 주요 엔터티가 있습니다. 하나의 학생은 여러 과목의 성적을 가질 수 있고, 하나의 과목은 여러 학생에게 수강될 수 있습니다. 따라서 '학생'과 '과목' 간의 관계는 다대다(N:M) 관계입니다. 이러한 관계를 표현하기 위해 별도의 '성적' 테이블을 만들고, '학생ID'와 '과목ID'를 복합키로 사용하여 각 학생의 과목별 성적을 저장합니다.
예문 (SQL을 사용한 예시):
-- 학생 테이블 생성
CREATE TABLE Students (
studentID INT PRIMARY KEY,
studentName VARCHAR(50)
);
-- 과목 테이블 생성
CREATE TABLE Subjects (
subjectID INT PRIMARY KEY,
subjectName VARCHAR(50)
);
-- 성적 테이블 생성 (복합키 활용)
CREATE TABLE Grades (
studentID INT,
subjectID INT,
grade CHAR(2),
PRIMARY KEY (studentID, subjectID), -- 복합키 설정
FOREIGN KEY (studentID) REFERENCES Students(studentID),
FOREIGN KEY (subjectID) REFERENCES Subjects(subjectID)
);
-- 성적 입력 예시
INSERT INTO Grades (studentID, subjectID, grade)
VALUES (1, 101, 'A+');
주석 설명:
Grades
테이블은studentID
와subjectID
의 조합으로 복합키를 생성합니다. 이렇게 함으로써, 각 학생의 과목별 성적을 고유하게 저장할 수 있습니다.FOREIGN KEY
제약 조건을 사용하여Grades
테이블의studentID
와subjectID
가 각각Students
테이블과Subjects
테이블의 기본키와 연관됩니다.
마치며:
복합키는 데이터베이스 설계에서 중요한 역할을 합니다. 특히 복잡한 비즈니스 요구 사항이나 다양한 데이터 소스를 다룰 때, 복합키를 통해 데이터의 중복을 방지하고 무결성을 보장하는 데 큰 도움이 됩니다. 따라서 데이터베이스 설계 시 복합키의 필요성과 활용 방법을 잘 이해하고 적용하는 것이 중요합니다.
'데이터베이스' 카테고리의 다른 글
MySQL `EXPLAIN`의 조인 타입(`type` 컬럼) 깊게 이해하기 (0) | 2023.09.12 |
---|---|
MySQL `EXPLAIN`의 이해와 활용 (0) | 2023.09.12 |
ERD 설계의 중요성과 핵심 요소 (0) | 2023.09.05 |
정규화와 정규형 (0) | 2023.07.25 |
Index(인덱스) (0) | 2023.07.24 |