At a Glance
text
schema -> table, type, constraint와 관계의 구조
candidate key -> row를 유일하게 식별할 수 있는 후보
primary key -> 대표 식별자로 선택한 candidate key
foreign key -> 다른 table의 key를 참조하는 무결성 규칙Key는 단순 조회 편의가 아니라 같은 row를 중복 없이 식별하고 관계가 존재하는 row만 참조하게 만드는 데이터 계약입니다.
식별자 선택
Natural key는 업무 데이터 자체에 의미가 있지만 값이 바뀌거나 길고 복합적일 수 있습니다. Surrogate key는 의미 없는 별도 ID로 관계를 안정적으로 연결하기 쉽지만 업무상 중복 방지 규칙은 UNIQUE constraint로 따로 표현해야 합니다.
Primary key는 NOT NULL과 uniqueness를 요구합니다. Foreign key는 참조 대상의 존재를 보장하지만 삭제·갱신 시 RESTRICT, CASCADE, SET NULL 같은 정책을 명시해야 합니다.
Schema 변경
Schema는 application 코드와 별개의 계약이 아닙니다. Column 추가, type 변경, constraint 강화가 기존 row와 이전 client에 미치는 영향을 migration으로 관리합니다. 큰 table에서는 schema change가 lock과 rewrite를 만들 수 있으므로 제품별 동작을 확인합니다.
자주 틀리는 점
- Primary key와 index를 완전히 같은 개념으로 보지 않습니다. Constraint와 물리적 접근 구조의 역할이 다릅니다.
- Foreign key가 자동으로 모든 join 성능을 해결한다고 생각하지 않습니다.
- ID가 있다고 업무상 중복이 막힌 것은 아닙니다.
- Null을 빈 문자열이나 0과 같은 값으로 취급하지 않습니다.
참고 링크
2 sources