SQL - 복합 키: 초보자 가이드
안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 SQL의 세계로 여행을 떠나,처음에는 조금 두려울 수 있지만 실제로는 매우 간단하고 유용한 개념을 탐구할 것입니다. 우리가 이야기할 주인공은 복합 키입니다!
복합 키는 무엇인가요?
가장 깊은 곳으로 뛰어들기 전에, 기본 개념부터 시작해보겠습니다. 상상해보세요, 거대한 도서관을 정리하고 있습니다. 각 책은 고유한 식별자가 필요하죠? 하지만 책의 제목만으로는 구분이 안되는 경우가 있을 수 있습니다. 이때 우리의 영웅, 복합 키가 구원자로 등장합니다!
복합 키는 데이터베이스 세계의 슈퍼 히어로 팀업과 같습니다. 두 개 이상의 열을 결합하여 테이블의 행을 고유하게 식별합니다. 이는 "이 책은 제목과 저자 그리고 출판 연도를 통해 고유하다"는 것을 의미합니다.
복합 키를 사용하는 이유는 무엇인가요?
- 고유성: 테이블의 각 행이 진정으로 고유하도록 보장합니다.
- 데이터 무결성: 데이터의 정확성과 일관성을 유지하는 데 도움이 됩니다.
- 관계 구축: 테이블 간의 연결을 만들기에 최적입니다.
이제 손을 더듬고 코드로 손을 대보겠습니다!
복합 키 생성
우리의 상상 속 도서관을 위한 테이블을 생성해보겠습니다:
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