MariaDB에서의 Primary Key, Foreign Key

찌끅·2024년 9월 23일

MariaDB에서의 Primary Key, Foreign Key

관계형 데이터베이스에서 Primary Key (기본 키)Foreign Key (외래 키)는 데이터 무결성을 유지하고 테이블 간의 관계를 정의하는 데 중요한 역할을 한다. 이 두 개념은 데이터 베이스 설계의 핵심 요소이다.


1. Primary Key (기본 키)

정의

  • Primary Key는 테이블에서 각 행(레코드)을 고유하게 식별하는 열 또는 열들의 집합이다.
  • 하나의 테이블에는 오직 하나의 Primary Key만 존재할 수 있다.
  • Primary Key는 NULL 값을 허용하지 않으며, 값이 중복될 수 없다.

특징

  • 고유성: Primary Key는 테이블의 각 레코드를 고유하게 식별할 수 있도록 보장된다.
  • NULL 불허: Primary Key에 해당하는 컬럼은 반드시 값이 있어야 하며, NULL 값을 헝요하지 않는다.
  • 자동 인덱싱: Primary Key로 설정된 컬럼은 자동으로 인덱싱되어 검색 성능이 향상된다.

예시

CREATE TABLE users (
    user_id INT AUTO_INCREMENT,
    username VARCHAR(50),
    email VARCHAR(100),
    PRIMARY KEY (user_id)
);
  • 여기서 user_idPrimary Key로 설정되어 있으며, 각 사용자를 고유하게 식별할 수 있다. AUTO_INCREMENT는 자동으로 증가하는 숫자를 생성하여 Primary key의 중복을 방지한다.

복합 Primary Key

  • Primary Key는 하나 이상의 컬럼으로 구성될 수 있다. 이를 복합 키라고 부르며, 여러 컬럼을 조합하여 고유한 레코드를 식벽할 수 있다.
CREATE TABLE orders (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);
  • 이 예시에서 order_idproduct_id가 결합된 복합 Primary Key는 주문과 상품을 고유하게 식별한다.

2. Foreign Key (외래 키)

정의

  • Foreign Key는 한 테이블의 컬럼이 다른 테이블의 Primary Key 또는 Unique Key를 참조할 때 사용된다. 즉, 외래 키는 두 테이블 간의 관계를 설정한다.
  • Foreign key는 참조 무결성을 유지하며, 테이블 간의 데이터 관계를 강제한다.

특징

  • 참조 무결성: Foreign Key는 참조하는 테이블의 Primary Kedy와 일치하는 값을 가질 수 있다. 참조 무결성 제약 조건은 참조된 데이터가 항상 유효하도록 보장한다.
  • NULL 허용: 외래 키는 NULL 값을 가질 수 있지만, 참조하는 테이블의 Primary Key에 NULL이 있어서는 안 된다.
  • 제약 조건: Foreign Key를 사용하여 두 테이블 간의 참조 관계를 설정하면, 참조된 데이터가 변경될 때 동작을 제어하는 제약 조건을 설정할 수 있다.
    • ON DELETE: 참조된 레코드가 삭제될 때의 동작을 정의한다.(CASCADE, SET NULL, RESTRICT 등)
    • ON UPDATE: 참조된 레코드가 업데이트될 때의 동작을 정의한다. (CASCADE, SET NULL, RESTRICT 등)

예시

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);
  • 여기서 user_idorders 테이블에서 Foreign Key로서 users 테이블의 user_id를 참조하고 있다. ON DELETE CASCADE 옵션은 사용자가 삭제될 경우 해당 사용자의 주문도 자동으로 삭제되도록 설정한다.

Foreign Key 동작 옵션

  1. CASCADE: 참조된 행이 삭제되거나 업데이트될 때 외래 킬르 참조하는 행도 함께 삭제되거나 업데이트된다.
  2. SET NULL: 참조된 행이 삭제되거나 업데이트될 때 외래 키 값을 NULL로 설정한다.
  3. RESTRICT: 참조된 행이 삭제되거나 업데이트되는 것을 방지한다. (참조 무결성 위반)
  4. NO ACTION: 아무 동작도 취하지 않으며, 기본적으로 RESTRICT와 같은 동작을 수행한다.

Primary Key와 Foreign Key의 차이

특징Primary Key (기본 키)Foreign Key (외래 키)
역할테이블의 각 행을 고유하게 식별다른 테이블의 Primary Key를 참조
NULL 허용 여부허용하지 않음허용 가능
고유성반드시 고유해야 함고유하지 않아도 됨
테이블 내 수한 테이블에 하나만 존재 가능한 테이블에 여러 개 존재 가능
참조 관계다른 테이블을 참조하지 않음다른 테이블의 Primary Key 또는 Unique Key 참조

참조 무결성의 중요성

Foreign Key를 사용하면 참조 무결성을 강제할 수 있다. 참조 무결성은 두 테이블 간의 데이터 일관성을 유지하는 데 중요한 개념으로, 아래와 같은 상황을 방지할 수 있다.

  1. 고아 레코드: 참조하는 테이블의 Primary Key가 삭제되었는데도, 참조된 외래 키가 여전히 남아있는 경우
    2.잘못된 참조: 참조하려는 값이 없는 외래 키가 존재하는 경우

참조 무결성을 통해 데이터베이스는 이러한 비정상적인 상태를 방지하고, 테이블 간의 관계를 안전하게 유지할 수 있다.


정리

  • Primary Key는 테이블의 각 행을 고유하게 식별하며, 중복 및 NULL을 허용하지 않는다.
  • Foreign Key는 두 테이블 간의 관계를 설정하여 참조 무결성을 유지하며, 다른 테이블의 Primary Key를 참조한다.
  • 이 두 키를 통해 데이터베이스는 데이터의 무결성을 유지하고 테이블 간의 관계를 강제한다.

0개의 댓글