SQL - 복합 키: 초보자 가이드

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 SQL의 세계로 여행을 떠나,처음에는 조금 두려울 수 있지만 실제로는 매우 간단하고 유용한 개념을 탐구할 것입니다. 우리가 이야기할 주인공은 복합 키입니다!

SQL - Composite Key

복합 키는 무엇인가요?

가장 깊은 곳으로 뛰어들기 전에, 기본 개념부터 시작해보겠습니다. 상상해보세요, 거대한 도서관을 정리하고 있습니다. 각 책은 고유한 식별자가 필요하죠? 하지만 책의 제목만으로는 구분이 안되는 경우가 있을 수 있습니다. 이때 우리의 영웅, 복합 키가 구원자로 등장합니다!

복합 키는 데이터베이스 세계의 슈퍼 히어로 팀업과 같습니다. 두 개 이상의 열을 결합하여 테이블의 행을 고유하게 식별합니다. 이는 "이 책은 제목과 저자 그리고 출판 연도를 통해 고유하다"는 것을 의미합니다.

복합 키를 사용하는 이유는 무엇인가요?

  1. 고유성: 테이블의 각 행이 진정으로 고유하도록 보장합니다.
  2. 데이터 무결성: 데이터의 정확성과 일관성을 유지하는 데 도움이 됩니다.
  3. 관계 구축: 테이블 간의 연결을 만들기에 최적입니다.

이제 손을 더듬고 코드로 손을 대보겠습니다!

복합 키 생성

우리의 상상 속 도서관을 위한 테이블을 생성해보겠습니다:

CREATE TABLE books (
title VARCHAR(100),
author VARCHAR(50),
publication_year INT,
ISBN VARCHAR(13),
PRIMARY KEY (title, author, publication_year)
);

이 예제에서 우리는 title, author, 그리고 publication_year 열을 사용하여 복합 키를 생성했습니다. 이는 두 책이 같은 제목, 저자, 그리고 출판 연도의 조합을 가질 수 없음을 의미합니다.

복합 키로 데이터 추가

이제 우리의 도서관에 책을 추가해보겠습니다:

INSERT INTO books (title, author, publication_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '9780743273565'),
('To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789'),
('1984', 'George Orwell', 1949, '9780451524935');

이러한 추가는 각 제목, 저자, 그리고 출판 연도의 조합이 고유하기 때문에 문제가 되지 않습니다.

하지만 중복을 추가하려면 어떻게 될까요?

INSERT INTO books (title, author, publication_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '1234567890123');

오류가 발생합니다! 이미 같은 제목, 저자, 그리고 출판 연도의 책이 존재하기 때문입니다. 우리의 복합 키가 제 역할을 하고 있습니다!

복합 키로 쿼리 작성

복합 키를 사용한 테이블을 쿼리할 때, 종종 키의 모든 부분을 지정해야 합니다:

SELECT * FROM books
WHERE title = 'The Great Gatsby'
AND author = 'F. Scott Fitzgerald'
AND publication_year = 1925;

이 쿼리는 우리가 찾고자 하는 정확한 책을 반환합니다.

복합 키 제거

이제 우리가 복합 키가 더 이상 우리에게 유용하지 않다고 결정한 경우는 어떻게 될까요? 아마도 ISBN이 책의 더 나은 고유 식별자라고 깨달았을 수도 있습니다. 다양한 데이터베이스 시스템에서 복합 키를 제거하는 방법을 살펴보겠습니다.

MySQL에서 복합 키 제거

MySQL에서 복합 키를 제거하는 것은 매우 간단합니다:

ALTER TABLE books
DROP PRIMARY KEY;

이후 새로운 주요 키를 추가할 수 있습니다:

ALTER TABLE books
ADD PRIMARY KEY (ISBN);

SQL Server에서 복합 키 제거

SQL Server는 비슷한 패턴을 따릅니다:

ALTER TABLE books
DROP CONSTRAINT PK_books;

여기서 PK_books는 주요 키 제약 조건의 이름입니다. 제약 조건 이름을 알지 못할 경우 다음과 같이 찾을 수 있습니다:

SELECT name
FROM sys.key_constraints
WHERE type = 'PK' AND parent_object_id = OBJECT_ID('books');

그런 다음 새로운 주요 키를 추가할 수 있습니다:

ALTER TABLE books
ADD CONSTRAINT PK_books PRIMARY KEY (ISBN);

복합 키 vs. 단일 열 키

이제 여러분은 "왜 복합 키를 귀찮게 사용하지 않고 단일 열을 사용하는 것이 아니냐?" 고민할 수도 있습니다. 훌륭한 질문입니다! 함께 비교해보겠습니다:

요소 복합 키 단일 열 키
고유성 여러 속성에 걸쳐 고유성을 보장 단일 속성에 한정된 고유성
유연성 복잡한 관계를 표현하는 데 유연 간단하지만 모든 필요한 정보를 포함하지 못할 수 있음
쿼리 성능 인덱싱 및 쿼리 성능이 느릴 수 있음 일반적으로 인덱싱 및 쿼리 성능이 빠름
데이터 무결성 더 복잡한 비즈니스 규칙을 강제할 수 있음 간단히 유지됨
저장 공간 더 많은 저장 공간이 필요할 수 있음 일반적으로 덜한 저장 공간 필요

결론

이제 여러분은 복합 키의 세계를 여행한 경험이 생겼습니다. 생성에서 쿼리 작성, 제거에 이르기까지. 기억하시길, SQL 도구箱에서의 복합 키는 시간과 장소에 따라 유용합니다. 여러 열에 걸쳐 고유성을 보장하고 복잡한 관계를 표현하는 데 최적이지만, 항상 모든 상황에 가장 좋은 선택은 아닙니다.

SQL 여정을 계속하면서 다양한 키 구조를 실험해보세요. 더 많이 연습할수록 더 직관적으로 느껴질 것입니다. 그리고 어느 날, 여러분이 새로운 학습자들에게 복합 키를 설명하는 자리에 설 수 있을 것입니다!

다음에 다시 만나요, 행복한 코딩을 하시고, 여러분의 쿼리가 항상 원하는 결과를 반환하길 바랍니다!

Credits: Image by storyset