본문 바로가기
데이터베이스

복합키란 무엇인가?

by 시니성 2023. 9. 6.

복합키 (Composite Key) 또는 복합 기본키는 두 개 이상의 칼럼으로 구성된 기본키를 의미합니다. 이러한 키는 데이터베이스 테이블 내에서 레코드의 고유성을 보장하기 위해 사용됩니다. 때로는 하나의 칼럼만으로는 레코드의 고유성을 보장하기 어려울 때, 두 개 이상의 칼럼을 결합하여 고유한 키 값을 생성합니다.


복합키의 유용함

  1. 데이터 무결성 보장: 복합키를 사용하면, 한 테이블 내의 특정 칼럼 조합의 고유성을 보장할 수 있습니다. 이를 통해 데이터 중복을 방지하고 무결성을 유지할 수 있습니다.

  2. 정규화: 복합키는 데이터베이스 설계의 정규화 과정에서 발생하는 테이블 간의 관계를 나타내는 데 유용하게 사용됩니다.


예시 시나리오 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): libraryCodebookCode의 조합으로 복합키를 생성합니다. 이렇게 함으로써, 전세계의 어떤 도서관에서든 동일한 도서 코드를 가진 책이 대여되더라도, 도서관 코드와 함께 고려하면 각 대여 정보를 고유하게 구분할 수 있습니다.

정규화와 복합키를 활용한 테이블 간 관계 설명

데이터베이스 설계에서 정규화는 중복 데이터를 최소화하고 무결성을 보장하기 위한 과정입니다. 테이블 간의 관계를 나타내기 위해 복합키를 활용하는 것은 정규화 과정에서 매우 중요합니다. 특히, 복합키를 활용한 관계 테이블이 이러한 목적을 달성하는 데 큰 도움을 줍니다.


예시 시나리오 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 테이블은 studentIDsubjectID의 조합으로 복합키를 생성합니다. 이렇게 함으로써, 각 학생의 과목별 성적을 고유하게 저장할 수 있습니다.
  • FOREIGN KEY 제약 조건을 사용하여 Grades 테이블의 studentIDsubjectID가 각각 Students 테이블과 Subjects 테이블의 기본키와 연관됩니다.

마치며:

복합키는 데이터베이스 설계에서 중요한 역할을 합니다. 특히 복잡한 비즈니스 요구 사항이나 다양한 데이터 소스를 다룰 때, 복합키를 통해 데이터의 중복을 방지하고 무결성을 보장하는 데 큰 도움이 됩니다. 따라서 데이터베이스 설계 시 복합키의 필요성과 활용 방법을 잘 이해하고 적용하는 것이 중요합니다.