1NF in Practice

여러 값을 한 칸에 넣지 말고, 값의 단위를 행으로 꺼내 관계로 표현한다

콤마 문자열과 JSON 배열은 실무에서 자주 보이지만, RDB 관점에서는 원자값이 아니어서 검색과 제약 관리가 어려워집니다.

실무 패턴
왜 느리고 애매한가
1NF로 분리한 구조

사례 1. 태그를 콤마로 저장

tags = "react,nextjs,ts"

LIKE '%react%' 같은 검색에 의존하게 되어 비효율적이고, 값 경계가 모호해 오탐이 생길 수 있습니다.

posts(id, title, ...)
post_tags(post_id, tag_name)
태그 하나를 한 행으로 분리하면 검색, 인덱스, 조인이 자연스러워집니다.

사례 2. JSON 컬럼에 배열 저장

addresses = [
  {"city":"서울"},
  {"city":"부산"}
]

한 셀 안에 여러 주소가 들어가면 주소별 제약과 관계를 개별 행처럼 다루기 어렵습니다.

user_addresses(user_id, city)
주소를 분리하면 도시별 조회와 무결성 검사가 더 명확해집니다.