대리 키(Surrogate Key) 는 현실 세계에 의미가 없는, 오직 데이터베이스 내부에서만 사용하는 인공적인 식별자이다.
일반적으로 다음과 같은 형태로 사용한다.
BIGINT AUTO_INCREMENT (MySQL, MariaDB 등)SERIAL, BIGSERIAL (PostgreSQL)NUMBER + 시퀀스 (Oracle)UUID, ULID, Snowflake ID 등 분산 ID예를 들어 회원 테이블을 대리 키로 설계하면 다음과 같다.
CREATE TABLE member (
member_id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 대리 키
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL
);
여기서 member_id는 비즈니스와 아무 상관이 없는 숫자일 뿐이다. 대신 고유하고, 짧고, 변경되지 않는다.
member_id는 그대로 유지된다.BIGINT)로 충분하다.물론 대리 키도 단점이 있다.
member_id = 123 이라고 해서 이 사람이 누구인지 알 수 없다.