<aside> ❗

[규칙 1] 한 칸에는 한 가지 정보만 들어가도록 만들어라

image.png

**

만약 한 칸에 여러 정보를 저장하게 되면, DB에서 꺼내서 사용할 때 콤마를 제거하여 리스트나 배열에 넣는 작업을 추가로 수행하게 됨 (파싱 작업)

한 칸에 한 가지 정보만 저장하면 데이터를 저장하기도 좋고 관리하기도 좋다.

한 칸에 두 개 이상의 정보가 들어가있을 땐 어떻게 해야 하는가 ??

한 칸에 두 가지 이상의 정보가 들어갈 때는 테이블을 분리하면 된다.

테이블을 분리함으로써, 한 칸에 한 가지 정보만 들어가도록 해야 한다.

image.png

[잘못된 분리]

image.png

중요 !!

정리

<aside> ❗

한 가지 정보는 관점에 따라 달라질 수 있다.

**** [즉, 서비스에서 데이터의 사용 방식에 따라 결정해야 한다.] ****

Ex) 성과 이름을 따로 조회해야 하는 경우

image.png

Ex) 이름만 조회하면 되는 경우

image.png

데이터베이스 설계는 처음에하고 끝나는게 아니라

상황에 따라 맞게 변경해야한다.

정리

<aside> ❗

[규칙 2] 어떤 테이블에 FK를 넣어도 [규칙 1]을 못 지킬 때는

중간 테이블을 하나 더 만들어라

image.png

image.png

image.png

image.png

image.png

이런 경우 중간 테이블을 하나 더 만들어야 한다.

image.png

image.png

image.png

<aside> ❗

[규칙3] 헷갈릴 때는 관계를 파악하라 (1:1, 1:N, N:M)

엔티티 관계 파악 방법

  1. 엔티티 간에 어울리는 동사 찾기

    ** 서비스 관점에서 동시를 떠올려야 한다.

  2. 1번 과정에서 찾은 동사를 활용해 적절한 단어(하나의 or 여러 개의) 찾기

    ** 문장 처음에 시작하는 하나의 라는 말을 반드시 붙여야 헷갈리지 않는다.

    ** 서비스를 어떻게 기획하냐에 따라 달리질 수 있다. 반드시 자신의 서비스에 대입해서 생각해야 한다.

  3. 관계 판단하기

✅  예시 1

사용자 (users), 이메일 (emails)

(한 명의 사용자가 회원가입 할 때 여러 개의 이메일을 입력할 수 있는 서비스라고 가정하자.)

⇒ 사용자 : 이메일 = 1 : N 관계

✅ 예시 2

가게 (stores), 판매 상품 (products)

가게 : 상품 = 1 : N ** 공동의 상품이 여러 가게에서 팔리는 경우 N : M

✅ 예시 3

학생 (students), 수강 과목 (courses)

학생 : 수강 과목 = N : M

✅ 예시 4

영화 (movies), 배우 (actors)

영화 : 배우 = N : M

✅ 예시 5

사용자(users), 프로필(profiles)

사용자 : 프로필 = 1 : 1 관계

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>

<aside> ❗

</aside>