1. 한 칸에는 한 가지 정보만 들어가도록 만들어라
데이터베이스 테이블 설계 시, "한 칸에 한 가지 정보만 들어가야 한다." 규칙을 살펴본다.
사례1)
- users (사용자)
| id(PK) | 이름 | 이메일 |
| 1 | 송진성 | js123@naver.com, js00@naver.com |
| 2 | 김땡땡 | king123@naver.com, queen123@naver.com |
사례2)
- stores (가게)
| id(PK) | 가게명 | 판매 상품 |
| 1 | JSCODE 카페 | JS아메리카노, JS카페라떼 |
| 2 | 진성이네 국밥 | 진성이네 돼지국밥, 진성이네 육개장, 진성이네 수육 |
이메일, 판매상품 컬럼에 2가지 이상의 정보가 들어가있다.
왜 한 칸에 2가지 이상의 정보가 들어가면 안되는걸까?
해당 컬럼 데이터를 조회해서 사용할 때마다 콤마(,)를 제거하고 배열에 넣는 로직을 만들어야 한다. 또한 삽입, 수정, 삭제시에도 콤마(,)를 고려해야 하고 데이터를 여러 건 삽입하다가 중복해서 넣을 수도 있기 때문이다. 따라서 한 칸에 한 가지의 정보만 넣는다.
2. 한 칸에 2개 이상의 정보가 들어가있을 땐?
테이블을 분리한다.
사례1 - 테이블 분리)
- users (사용자)
| id(PK) | 이름 |
| 1 | 송진성 |
| 2 | 김땡땡 |
- emails (이메일)
| id(PK) | 이메일 |
| 1 | js123@naver.com |
| 2 | js00@naver.com |
| 3 | king123@naver.com |
| 4 | queen123@naver.com |
테이블을 분리했지만, 특정 사용자의 이메일 주소를 알 수 없다. 특정 사용자의 이메일 주소를 알 수 있도록 보완한다.
사례1 - 잘못된 분리)
- users (사용자)
| id(PK) | 이름 | 이메일 id(FK) |
| 1 | 송진성 | 1, 2 |
| 2 | 김땡땡 | 3, 4 |
- emails (이메일)
| id(PK) | 이메일 |
| 1 | js123@naver.com |
| 2 | js00@naver.com |
| 3 | king123@naver.com |
| 4 | queen123@naver.com |
특장 사용자의 이메일 주소를 알 수 있지만, 다시 한 칸에 2가지 이상의 정보가 들어간다. 이 때 FK를 다른 테이블로 옮겨본다.
사례1 - 최종)
- users (사용자)
| id(PK) | 이름 |
| 1 | 송진성 |
| 2 | 김땡땡 |
- emails (이메일)
| id(PK) | 이메일 | 사용자 id(FK) |
| 1 | js123@naver.com | 1 |
| 2 | js00@naver.com | 1 |
| 3 | king123@naver.com | 2 |
| 4 | queen123@naver.com | 2 |
특정 사용자의 이메일 주소도 알 수 있고, 한 칸에 한 가지 정보만 들어간다.
정리하면, 테이블을 분리해서 FK를 활용해 한 칸에 한 가지 정보만 들어가도록 만든다.
사례2 - 잘못된 분리)
- stores (가게)
| id(PK) | 가게명 | 판매 상품 id(FK) |
| 1 | JSCODE 카페 | 1, 2 |
| 2 | 진성이네 국밥 | 3, 4, 5 |
- products (판매 상품)
| id(PK) | 상품명 |
| 1 | JS아메리카노 |
| 2 | JS카페라떼 |
| 3 | 진성이네 돼지국밥 |
| 4 | 진성이네 육개장 |
| 5 | 진성이네 수육 |
사례2 - 최종)
- stores (가게)
| id(PK) | 가게명 |
| 1 | JSCODE 카페 |
| 2 | 진성이네 국밥 |
- products (판매 상품)
| id(PK) | 상품명 | 가게 id(FK) |
| 1 | JS아메리카노 | 1 |
| 2 | JS카페라떼 | 1 |
| 3 | 진성이네 돼지국밥 | 2 |
| 4 | 진성이네 육개장 | 2 |
| 5 | 진성이네 수육 | 2 |
이 과정을 데이터베이스 이론에서 "제 1정규형" 이라고 부른다.
참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-db-%EC%84%A4%EA%B3%84-%EC%9E%85%EB%AC%B8?cid=335049
비전공자도 이해할 수 있는 DB 설계 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 1,491명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 'DB 설계 입문/실전' 강의를 만들어봤습니다! 복잡한 개념을 몰라도
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 DB 설계 입문 실전' 카테고리의 다른 글
| [규칙 2] 어떤 테이블에 FK를 넣어도 '규칙 1'을 못 지킬 때는 중간 테이블을 하나 더 만들어라 (0) | 2026.02.14 |
|---|---|
| [규칙 1] 한 칸에는 한 가지 정보만 들어가도록 만들어라 - 2 (0) | 2026.02.12 |
| 저장할 데이터 파악하기 / 그룹핑해서 분류하기 (0) | 2026.02.09 |
| DB 설계 전체 과정 (0) | 2026.02.08 |
| DB 설계 시 꼭 기억해야 할 핵심 원칙 1가지 (0) | 2026.02.07 |
댓글