DB - DB 설계 규칙 6가지 - 1

morecodeplease·2024년 11월 24일
0

데이터베이스

목록 보기
4/6
post-thumbnail

앞에서 배운 DB설계 핵심 원칙네이밍 규칙을 활용하여 DB설계를 하려면 보통 이론에서 정규형이라고 부르는 작업을 해야한다. 이름만 들어서는 전혀 이해가 안가니 이론적인 내용보다 실제 어떻게 적용되는지 알아보자.


🔴 [규칙 1] 한 칸에는 한 가지 정보만 들어간다.

  • 데이터베이스 테이블을 설계 할 때 한 칸에는 한 가지 정보만 들어간다.

  • id(PK)이름이메일
    1페레이라asdf@naver.com, qwer@naver.com
    2이데산야fdsa@gmail.com, trewq@gmail.com

    위의 예시와 같이 한 칸에 한 가지 이상 정보가 들어가게 되면 사용자의 이메일을 조회해서 사용할 때 마다 중간에 있는 콤마(,) 를 제거하고 배열에 집어넣는 로직을 구현해야 한다.

🟢 그럼 어떻게 바꿀까?

  • 바로 테이블을 분리하면 된다. 테이블을 분리해서 [규칙1]에 위배되지 않도록 한 칸에 한 가지 정보를 넣는다. 위의 예시 테이블을 분리해보자.

  • users 테이블

    id(PK)이름
    1페레이라
    2이데산야
  • emails 테이블

    id(PK)이메일사용자 id(FK)
    1asdf@naver.com1
    2qwer@naver.com1
    3fdsa@gmail.com2
    4trewq@gmail.com2

    이렇게 두 개의 테이블로 분리해서 FK를 활용해 한 칸에 한 가지의 정보만 들어가게 바꿨다. 이러한 과정을 데이터베이스 이론에서는 제1정규형이라고 한다.

🟢 한 가지 정보의 모호성?

  • 위의 예시에서 누군가는 페레가 이름 전체라고 생각할 수 있고 , 페레이라가 전체이름이라고 생각할 수 있고, 이름을 분리한다면? -> 기획에 따라 유동적으로 결정하면 된다.
  • 기획에 따라 이름을 따로 조회한다면 컬럼을 두 개로 나눠서 설계하면 되고, 통째로 사용한다면 위의 예시처럼 사용하면 된다.

🔴 [규칙 2] 어떤 테이블에 FK를 넣어도 ‘규칙 1’을 못 지킬 때는 중간 테이블을 만든다.

예시를 보면서 이해해보자.

  • movies (영화)

    id(PK)이름출연 배우
    1배테랑황정민, 오달수
    2신세계황정민, 이정재
    3관상이정재, 송강호
  • 1. 테이블 분리

    id(PK)이름출연 배우
    1베테랑1,2
    2신세계1,3
    3관상1,4
  • actors (배우)

    id(PK)이름
    1황정민
    2오달수
    3이정재
    4송강호
  • 2. 중간 테이블 추가 movies(영화)

    id(PK)이름
    1베테랑
    2범죄도시
    3기생충
  • casings(캐스팅)

    id (PK)영화 id (FK)배우 id (FK)
    111
    212
    321
    423
    531
    634
  • actors (배우)

    id(PK)이름
    1황정민
    2오달수
    3이정재
    4송강호

요렇게 moviesactors는 서로 무슨 관계일까?를 생각해보면 서로 캐스팅, 출연 하는 관계라고 생각이 되서 중간테이블인 castings를 추가해서 각각 참조할 수 있게 만들면 된다!

참조

profile
Everyday's a lesson

0개의 댓글