SQL - 외래 키: 테이블 간 관계 구축
안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 SQL 외래 키의 세계로 흥미로운 여정을 떠납니다. 여러분의 친절한 이웃 컴퓨터 선생님이자 저는 이 중요한 개념을 안내해드리기 위해 여기 있습니다. 그럼 가상의 메모 pad를 꺼내고, 함께 빠져들어보겠습니다!
SQL 외래 키: 연결의 고리
상상해보세요. 거대한 도서관을 조직하고 있습니다. 책을 위한 하나의的书棚와 작가를 위한 또 다른书棚이 있습니다. 각 책에 작가의 전체 상세 정보를 적지 않고도 각 책을 해당 작가와 어떻게 연결할 수 있을까요? SQL의 외래 키가 바로 그 역할을 합니다!
외래 키는 무엇인가요?
외래 키는 하나의 테이블에서 다른 테이블의 주요 키를 참조하는 열(또는 열의 집합)입니다. 두 테이블 간의 관계를 설정하는 다리와 같습니다.
간단한 예를 보겠습니다:
CREATE TABLE Authors (
AuthorID INT PRIMARY KEY,
AuthorName VARCHAR(100)
);
CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(200),
AuthorID INT,
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);
이 예제에서, Books
테이블의 AuthorID
는 Authors
테이블의 AuthorID
를 참조하는 외래 키입니다. 이는 각 책이 작가와 연결되지만, 모든 책에 작가의 상세 정보를 반복할 필요가 없음을 의미합니다.
외래 키를 사용하는 이유는 무엇인가요?
- 데이터 무결성: 외래 키는 존재하지 않는 작가로 책을 추가할 수 없도록 보장합니다.
- 관계: 의미 있는 테이블 간 관계를 생성할 수 있습니다.
- 효율성: 데이터를 한 번 저장하고 여러 번 참조할 수 있어 공간 절약하고 중복을 줄일 수 있습니다.
기존 열에 외래 키 제약 조건 추가
occasionally, you might want to add a Foreign Key constraint to an existing column. Don't worry, SQL's got you covered! Here's how you can do it:
ALTER TABLE Books
ADD CONSTRAINT FK_AuthorID
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID);
이 명령은 기존의 AuthorID
열에 외래 키 제약 조건을 추가합니다. 우리는 제약 조건을 FK_AuthorID
라고 이름을 지었습니다 - 제약 조건에 의미 있는 이름을 주는 것은 항상 좋은 관행입니다.
주의사항
기존 열에 외래 키 제약 조건을 추가하기 전에, 해당 열의 모든 값이 참조 테이블에 대응하는 값이 있는지 확인하세요. 그렇지 않으면 SQL이 오류를 발생시킵니다!
외래 키 제거: 헤어지는 것은 어렵지 않습니다
occasionally, relationships change, and you might need to remove a Foreign Key constraint. Here's how you can do that:
ALTER TABLE Books
DROP FOREIGN KEY FK_AuthorID;
이 명령은 이전에 추가한 외래 키 제약 조건을 제거합니다. 기억하세요, 이 명령은 열이나 그 데이터를 지우지 않습니다 - 단지 테이블 간의 관계를 제거하는 것입니다.
주요 키 vs 외래 키: 동적인 듀오
주요 키와 외래 키는 데이터베이스 세계에서 동적인 듀오입니다. 각각의 역할이 있지만, 함께 작동할 때 가장 잘 작동합니다. 그럼 차이점을 분석해보겠습니다:
주요 키
- 각 테이블에서 각 레코드를 고유하게 식별합니다
- 반드시 고유한 값을 포함해야 하며 NULL 값을 포함할 수 없습니다
- 테이블에 하나의 주요 키만 있을 수 있습니다
외래 키
- 다른 테이블의 주요 키를 참조합니다
- 중복되는 값과 NULL 값을 포함할 수 있습니다
- 테이블에 여러 개의 외래 키가 있을 수 있습니다
다음 표는 그들의 주요 차이점을 요약합니다:
특성 | 주요 키 | 외래 키 |
---|---|---|
고유성 | 반드시 고유 | 중복 가능 |
NULL 값 | NULL 불가 | NULL 가능 |
테이블당 개수 | 하나만 | 여러 개 |
목적 | 테이블 내 레코드 식별 | 다른 테이블의 레코드 참조 |
다음 예제에서 그들을 실제로 사용해보겠습니다:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
CREATE TABLE OrderItems (
OrderItemID INT PRIMARY KEY,
OrderID INT,
ProductName VARCHAR(100),
Quantity INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
이 예제에서 우리는 세 가지 테이블을 가지고 있습니다:
-
Customers
테이블,CustomerID
를 주요 키로 가지고 있습니다 -
Orders
테이블,OrderID
를 주요 키로 가지고 있으며CustomerID
를 외래 키로 참조합니다 -
OrderItems
테이블,OrderItemID
를 주요 키로 가지고 있으며OrderID
를 외래 키로 참조합니다
이 구조는 고객이 주문한 주문과 각 주문에 포함된 품목을 추적할 수 있도록 해줍니다. 불필요한 고객이나 주문 정보를 반복할 필요 없이.
결론: 모든 것을 통합하다
그렇습니다, 여러분! 우리는 외래 키의 땅을 여행하며, 그들의 생성에서 수정 및 삭제에 이르기까지 경험했습니다. 주요 키와 외래 키가 강력한 데이터베이스 구조를 만들기 위해 어떻게 손을 맞추는지 보았습니다.
외래 키는 데이터 무결성을 보장하고, 의미 있는 관계를 만들고, 데이터베이스가 원활하게 작동하도록 도와줍니다.
SQL 여정을 계속하면서 이 개념들을 실험해보세요. 자신만의 테이블을 생성하고 외래 키 제약 조건을 추가해보세요. 그리고 그들이 데이터 조작에 어떤 영향을 미치는지 보세요. 연습을 많이 하면 자연스럽게 느껴질 것입니다.
행복한 코딩을 기원하며, 여러분의 쿼리가 항상 기대하는 결과를 반환하길 바랍니다!
Credits: Image by storyset