RDB, 기본키 / 외래키란? 필요한 이유

관계형 데이터베이스 관리 시스템(RDBMS)에서 키(key)는 테이블에서 행을 고유하게 식별하거나 관계를 정의하는 데 사용됩니다. 그중에서도 가장 활용도가 높은 것이 기본키(primary key)와 외래키(foreign key)입니다. 기본키와 외래키가 무엇인지, 왜 필요한지 알아보겠습니다.

KEY

1. 기본키(Primary Key)

기본키는 각 행을 고유하게 식별하는 데 사용되는 하나 이상의 컬럼으로 구성됩니다. 기본키는 아래와 같은 특징을 가지고 있습니다.

  • 고유성(Unique) : 기본 키의 값은 테이블 내에서 중복되지 않아야 합니다.
  • 무결성(Not Null) : 기본 키의 값은 null이 될 수 없습니다.

 

간단한 예로, 학생 정보가 담긴 테이블에선 학번을 기본키로 사용할 수 있습니다. 모든 학생의 학번은 고유하며, 학번이 없는(NULL) 학생은 없기 때문입니다.

 

2. 외래키(Foreign Key)

외래키는 한 테이블의 컬럼이 다른 테이블의 기본키를 참조하는 경우 사용됩니다. 예를 들어, 온라인 쇼핑몰의 고객 정보 테이블(customers)과 주문 테이블(orders)이 있다고 가정합니다. 고객 정보 테이블의 기본키는 id입니다. 주문 테이블의 기본키는 order_id입니다. 이때 고객 정보 테이블의 기본키인 id를 주문 테이블의 외래키로 지정해서 테이블을 연결할 수 있습니다.

 

실제 구성된 테이블의 예시를 보면 좀 더 이해하기가 쉽습니다.

 

예시 1)

출처=programiz.com

 

CREATE TABLE Customers (
  id INT,
  first_name VARCHAR(40),
  last_name VARCHAR(40),
  age INT,
  country VARCHAR(10),
  CONSTRAINT CustomersPK PRIMARY KEY (id)
);

 

CREATE TABLE Orders (
  order_id INT,
  item VARCHAR(40),
  amount INT,
  customer_id INT REFERENCES Customers(id),
  CONSTRAINT OrdersPK PRIMARY KEY (order_id)
);

 

예시 2)

은행 시스템에서 고객 테이블(Customer)과 계좌 테이블(Account)이 있을 때 아래와 같이 두 개의 테이블에 기본키와 외래키를 지정함으로써 두 테이블의 관계를 형성할 수 있습니다.

#고객 테이블(Customer)

CREATE TABLE Customer (
  Customer_ID INT PRIMARY KEY,
  Name VARCHAR(50) NOT NULL,
  Address VARCHAR(100),
  Phone VARCHAR(15)
);

 

# 계좌 테이블(Account)

CREATE TABLE Account (
  Account_No INT PRIMARY KEY,
  Account_Type VARCHAR(20),
  Balance DECIMAL(15, 2),
  Customer_ID INT,
  FOREIGN KEY (Customer_ID) REFERENCES Customer(Customer_ID)
);

 

예시 3)

이번엔 온라인 쇼핑몰에서 세 개의 테이블을 만드는 예시입니다. 상품 테이블과 주문 테이블의 기본키를 주문 상세 테이블에서 각각 외래키로 사용합니다.

# 상품 테이블(Product)

CREATE TABLE Product (
  Product_ID INT PRIMARY KEY,
  Name VARCHAR(100) NOT NULL,
  Price DECIMAL(10, 2),
  Stock INT
);

 

# 주문 테이블(Order)

CREATE TABLE Order (
  Order_No INT PRIMARY KEY,
  Order_Date DATE,
  Total_Price DECIMAL(15, 2)
);

 

# 주문 상세 테이블(Order_Detail)

CREATE TABLE Order_Detail (
  Order_Detail_ID INT PRIMARY KEY,
  Quantity INT,
  Subtotal DECIMAL(15, 2),
  Product_ID INT,
  Order_No INT,
  FOREIGN KEY (Product_ID) REFERENCES Product(Product_ID),
  FOREIGN KEY (Order_No) REFERENCES Order(Order_No)
);

 

기본키를 지정하는 이유

1. 기본키는 테이블의 각 행(컬럼)을 고유하게 식별합니다.

 

2. 기본키는 중복되지 않고 NULL 값을 가질 수 없기 때문에 중복 데이터가 발생하는 것을 방지하고 데이터의 무결성을 보장할 수 있습니다.

 

3. 기본키는 다른 테이블의 외래키에 의해 참조되며 테이블 간 관계가 구축됩니다.

 

4. 기본키는 자동으로 인덱스가 생성되어 검색 성능이 향상됩니다.

 

외래키를 지정하는 이유

1. 외래키는 관계형 데이터베이스에서 테이블 간의 관계를 정의합니다. 테이블 간 관련된 데이터를 연결해서 조직화하고 쿼리 작성과 데이터 분석이 용이해집니다.

 

2. 외래키는 참조 무결성을 보장합니다. 참조 무결성이란 외래키 값이 참조하는 기본키 값과 일치하도록 강제함으로써 데이터 무결성을 유지하는 것입니다.

 

3. 외래키를 사용하면 데이터베이스에서 데이터의 중복을 최소화할 수 있습니다.

 

4. 외래키 제약 조건을 설정할 때 CASCADE 옵션을 사용할 수 있습니다. 이 옵션은 참조하는 기본키 값이 변경되거나 삭제될 때 외래키 값도 자동으로 변경되거나 삭제되도록 합니다. 이를 통해 데이터 일관성을 유지할 수 있습니다.

반응형

댓글

Designed by JB FACTORY