Finn.ian
article thumbnail

데이터베이스에서 기본키(Primary Key)는 굉장히 중요한 개념이다.

오늘은 간단히 PostgreSQL의 기본키에 대해 알아보고자 한다.

 

PostgreSQL 기본키(Primary Key)는 테이블의 각 행을 고유하게 식별하는 데 사용되는 특별한 열 또는 열 집합이다.

관계형 데이터베이스 설계에서 중요한 구성 요소이며 데이터 무결성을 보장하고 효율적인 데이터 검색을 가능하게 한다.

 

01. 기본키의 특징

  • 고유성 (Uniqueness)
    • 기본키의 각 값은 테이블 내에서 고유해야 합니다. 두 행은 동일한 기본키 값을 가질 수 없다.
  • 널 값 허용 불가 (Not Null)
    • 기본키 값은 널 값을 가질 수 없다. 모든 행은 기본키 열에 정의된 값을 가져야 한다.
  • 분해 불가능성(Irreducible)
    • 기본키는 더 작은 부분으로 나눌 수 없다. 기본키의 고유성을 유지하려면 여전히 고유해야 한다.

02. 기본키의 목적

  • 고유 식별자 (Unique Identification)
    • 기본키는 각 행에 고유한 식별자를 제공하여 효율적인 데이터 검색을 가능하게 한다.
  • 참조 무결성 유지 (Enforcing Referencial Integrity)
    • 참조 무결성은 두 테이블 간의 관계가 일관되고 유효하도록 보장하는 것이다.
  • 인덱싱(Indexing)
    • 인덱스는 데이터 검색 작업의 성능을 향상시킨다. 인덱스에 대한 내용은 중요한 단어로 다른 글에서 선보일 예정이다.

 

03. PostgreSQL에서 기본키 생성

기본키는 CREATE TABLE 문의 PRIMARY KEY 제약 조건을 사용하여 정의한다.

예를 들어, customers라는 테이블에 customer_id라는 기본키 열을 만들려면 아래와 같은 SQL 문을 참고하면 된다.

CREATE TABLE customers (
  customer_id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE NOT NULL
);


위 예에서 customer_id 열은 SERIAL 데이터 유형이다. 이는 각 새 행에 대해 자동으로 고유한 Null 값을 생성한다.

PRIMARY KEY 제약 조건은 customer_id 열이 customers 테이블의 기본키 역할을 하는 것이다.

 

04. 복합 기본키

복합 기본키는 여러 열이 함께 각 행을 고유하게 식별하는 키이다.

예를 들어, orders라는 테이블에 order_id 및 customer_id 열이 있을 때, 복합 기본키를 정의하려면 아래와 같이 CREATE TABLE 문을 다음과 같이 작성한다.

CREATE TABLE orders (
  order_id SERIAL NOT NULL,
  customer_id INTEGER NOT NULL,
  PRIMARY KEY (order_id, customer_id)
);


이 경우 order_id 및 customer_id의 조합이 orders 테이블의 각 행을 고유하게 식별하는 것이다.

 

05. PostgreSQL 제약조건(CONSTRAINT) 변경

PostgreSQL 기본키를 재설정하고 싶다면, 제목과 같이 변경이라고 작성하였지만, 사실 변경할 수 있는 방법이 따로 없고 아래와 같이 기존 제약조건을 제거하고, 다시 등록해야 한다.

 

  • PK 삭제
ALTER TABLE [테이블명] DROP CONSTRAINT [PK명];

 

  • PK 등록
ALTER TABLE [테이블명] ADD CONSTRAINT [PK명] PRIMARY KEY ([컬럼명1], [컬럼명2]);

 

PostgreSQL 기본키는 데이터 무결성을 유지하고 효율적인 데이터 관리를 보장하는 데 필수적이다.

기본키의 중요성과 올바른 구현을 이해함으로써 응용 프로그램에 대한 강력하고 신뢰할 수 있는 데이터 구조를 구축해야 한다.

 

[참고자료]

profile

Finn.ian

@Finn_

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그