논리적 모델링에서 정의한 한글 엔티티·속성을 이제 실제 DB의 테이블과 컬럼으로 옮기는 단계에서는, 아무렇게나 이름을 짓지 않는다. 프로젝트 전체에 걸쳐 일관된 규칙을 정하고 모두가 그 규칙을 따른다.

이 규칙을 보통 **명명 규칙(Naming Convention)**이라고 부른다. 잘 정리된 명명 규칙은 그 자체로 강력한 문서 역할을 한다.

2-1. 절대적인 규칙은 없다, 하지만 일관성은 필수다

2-2. 일반적인 명명 규칙

실무에서 자주 사용하는 기본 규칙을 정리하면 다음과 같다.

  1. 영어 사용
  2. 소문자 + 스네이크 케이스(snake_case)
  3. 명확하고 서술적인 이름
  4. 일관된 접두사·접미사 사용
  5. 예약어 사용 금지

2-3. 컬럼 이름 규칙

2-3-1. PK는 테이블명_id 형식으로

모든 테이블의 PK를 단순히 id라고 지으면, 여러 테이블을 조인했을 때 어느 테이블의 id인지 알기 어려운 문제가 발생한다.

-- member와 orders 테이블의 PK가 모두 id인 경우 (나쁜 예시)
SELECT
  id,          -- 이 id가 어느 테이블의 id인지 모호하다
  member_name,
  ordered_at
FROM member
JOIN orders ON member.id = orders.member_id;

위 쿼리는 Column 'id' in field list is ambiguous 오류가 발생하거나, 매번 member.idorders.id처럼 테이블 이름/별칭을 붙여야 한다.

반면, PK를 member_idorder_id처럼 테이블명을 포함해서 짓는 경우를 보자.

-- PK를 테이블명_id로 정의한 경우 (권장 예시)
SELECT
  m.member_id,
  o.order_id,
  m.member_name,
  o.ordered_at
FROM member m
JOIN orders o ON m.member_id = o.member_id;