예를 들어 뭐 어떤 지점이 가진 상품의 목록을 알고 싶다 그러면


테이블A (지점정보)

[지점코드] [점장] [연락처]


가 있겠죠.


만약 관계형 데이터베이스 모델을 무시한다면


[지점코드] [점장] [연락처] [보유상품]


해서 [보유상품] 에다가 A,B,C,D,E,F,G 뭐 이런 식으로 때려박으면 될 거에요.

근데 RDBMS 모델은 값이 원자적으로 들어가라고 하고 있어요

(물론 요즘 최신 DB들은 저기에 JSON OBJECT는 넣을 수 있게 해 줘요)


관계형 데이터베이스이기 때문에 보유상품에는 아쉽게도 원자값만 들어갈 수 있어요


그런데 저 놈이 보유상품이 여러 개라고 해서


테이블A에


지점1 / 점장1 / 연락처1 / 상품1

지점1 / 점장1 / 연락처1 / 상품2

지점1 / 점장1 / 연락처1 / 상품3

지점2 / 점장2 / 연락처2 / 상품1

지점2 / 점장2 / 연락처2 / 상품2

지점3 / 점장3 / 연락처3 / 상품3

지점4 / 점장4 / 연락처4 / 상품1


이런 식으로 만들어두면 존나게 지저분할 거에요


그러니까 테이블B를

[지점코드] / [보유상품] 으로 만들어서


테이블A에는


지점1 / 점장1 / 연락처1

지점2 / 점장2 / 연락처2

지점3 / 점장3 / 연락처3

지점4 / 점장4 / 연락처4


만 두고


테이블B 에


지점1 / 상품1

지점1 / 상품2

지점1 / 상품3

지점2 / 상품1

지점2 / 상품2

지점3 / 상품3

지점4 / 상품1



이런 식으로 잡아 쳐 넣어서


A와 B를 지점코드를 FK로 1:N 시키면


각자가 가지는 정보는 최소로 하면서


지점1 / 점장1 / 연락처1 / 상품1

지점1 / 점장1 / 연락처1 / 상품2

지점1 / 점장1 / 연락처1 / 상품3

지점2 / 점장2 / 연락처2 / 상품1

지점2 / 점장2 / 연락처2 / 상품2

지점3 / 점장3 / 연락처3 / 상품3

지점4 / 점장4 / 연락처4 / 상품1


을 뽑아낼 수 있어요.

관계형 DB의 모델링은 각자가 가지고 있는 정보를 최소화하면서 깔끔하게 관계를 맺어나가는 관계라고 보시면 되고요
하나의 테이블에서 때려박아 좀 더 직관적으로 쓰시려면 NoSQL 을 쓰는 게 맞을 거 같습니다.