인프런 커뮤니티 질문&답변

대배랙님의 프로필 이미지
대배랙

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

안녕하세요 선생님 또막혀서 질문하러왔습니당

작성

·

184

0

DB에 대한개념이 좀 딸리는거같아 질문드립니다.

음식으로 예를 들겠습니다.

가게들이 만약 여러개가있으면

A라는 가게와 B라는 가게 C라는가게 등 업종이 비슷한 가게가있으면

메뉴도 비슷할것인데 가격은 미세하게 다를거라고 생각됩니다.

이거를 저장하려고 하니

식당이름들을 모은 테이블1과

메뉴를 모은 테이블1을 다대다로 하면 가격은 어디다가 저장을 해야할지 모르겠어서

가격이적힌테이블을 하나더 만들고 여기다가 메뉴테이블과 식당이름 테이블을 외래키로 지정해야할까요?

만들다가보니 계속 이런방식의 테이블 구조가 계속나오는거 같습니다. 중복적인 부분이 계속나와서 빼려고하니

몇개의 중복이 더생기는부분을 원래는 어떤방법으로 해결하는지 궁금합니다.

여기 강의에서는 comment부분테이블과 비슷하게 테이블을짜야하는건지라고 생각되는데 맞을까요

답변 4

0

대배랙님의 프로필 이미지
대배랙
질문자

감사합니다 일하면서하니  정신이 없네요 열심히 다시 만들어보겠습니다 감사합니다

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 컬럼은 여러 개 추가하셔도 됩니다.

다대다테이블은 기본적으로 시퀄라이즈가 자동으로 생성해주는데요. 기본적으로 식당아이디와 메뉴아이디만 들어있는 테이블이 만들어집니다. 이렇게 되면 price를 저장할 수 없으므로

models 폴더 내에 모델 파일을 새로 만드셔야 합니다. 예를들어 RestaurantMenu라는 모델을 만드셨다면

거기 테이블 안에 price 컬럼을 만들고, 다시 db.RestaurantMenu.belongsTo(db.Restaurant); db.RestaurantMenu.belongsTo(db.Menu) 이렇게 연결 해주셔야 하고요.

db.Restaurant.belongsToMany(db.Menu, { through: db.RestaurantMenu })

db.Menu.belongsToMany(db.Restaurant, { through: db.RestaurantMenu })

로 through 자리에 문자열이 아니라 실제 db 모델로 연결하면 됩니다.

0

대배랙님의 프로필 이미지
대배랙
질문자

아 저도 그 다대다 테이블옆에 넣을수 있으면 되는데라는 생각을 하긴 했는데 

id 도없고 그냥 중간다리역할만 하게 만들어야 하는건가 해서 다르게 생각을 했네요

다대다테이블 식당menu

식당 | 메뉴   <--이렇게  생성됬을때

식당 | 메뉴 | 가격  <--추가해서 이렇게 만들라시는거죵

컬럼을 추가하고 사용한다면 1개뿐만아니라 2개나 3개 만들어도되는건가요

그리고 여기서 제가 이방법이 하기힘들지않을까 했던 이유가 

기존강의에 추가하는방법처럼

await 식당.addMenu({

menu : req.body.menu,

price: req.body.price

})

요런식으로 추가하려하면 

addMenu자체가 menu라는것만 추가하는거같아서 price <--요거를 같이 넣을수는 없을거같은데..

2개나 3개 추가를 된다면 추가하는방법을 알수있을까요 

답변 감사합니다.

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

다대다 테이블에 넣으시면 됩니다.

식당아이디, 메뉴아이디, 가격

이렇게 세 개가 되게끔요.

대배랙님의 프로필 이미지
대배랙

작성한 질문수

질문하기