Node/시퀄라이즈(MySQL), 몽구스(MongoDB)

관계 정의하기

webmaster 2022. 9. 18. 21:47
728x90

users 모델과 comments 모델 간의 관계를 정의

  • 1:N 관계 (사용자 한 명이 댓글 여러 개 작성)
  • 시퀄라이즈에서는 1:N 관계를 hasMany로 표현(사용자.hasMany(댓글))
  • 반대의 입장에서는 belongsTo(댓글.belongsTo(사용자))
  • belongsTo가 있는 테이블에 컬럼이 생김(댓글 테이블에 commenter 컬럼) 

user.js

//...
static associate(db) {
  db.User.hasMany(db.Comment, { foreignKey: "commenter", sourceKey: "id" });
}
//...
  • user에서 관계를 가질 경우 hasMany가 된다.(1:N)
    • 반대 입장에서 belongsTo가 될 수 밖에 없다.
  • belongsTo가 있는 테이블에 컬럼이 생긴다.

comment.js

//...
static associate(db) {
  db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' });
}
//..
  • commnter키는 belongsTo에 있게 된다.
  • belongsTo는 targetKey, hasMany는 sourceKey이다.

1대 1 관계

1:1 관계

  • 누가 hasOne/ belongsTo 가 될지는 개발자가 정해야한다.
    • belongsTo가 외래키를 가지게 되므로, 이걸 생각해서 적어주면 된다.

1:N, N:1관계

1:N 관계

  • 다쪽에 외래키가 있어야 하므로 다 쪽이 belongsTo, 1쪽에 hasMany가 존재한다

N대 M 관계

게시글과 해시태그

  • ex) 게시글과 해시태그 테이블 : 하나의 게시글이 여러 개의 해시태그를 가질 수 있고 하나의 해시태그가 여러 개의 게시글을 가질 수 있음 

다대다 관계

  • DB 특성상 다대다 관계는 중간 테이블이 생긴다
    • 컬럼을 추가해서 콤마로 구분하게끔 할 수 있다는 생각도 할 수 있지만, 이는 좋지 않은 방법이다 (정규화 위배)
    • json이라는 타입을 지원하기는 하지만, 정규화의 원칙을 위배하는 것이다

 

 

 

728x90

'Node > 시퀄라이즈(MySQL), 몽구스(MongoDB)' 카테고리의 다른 글

몽구스 ODM  (0) 2022.09.24
관계 쿼리  (0) 2022.09.18
쿼리 알아보기  (0) 2022.09.18
모델 만들기  (0) 2022.09.18
시퀄라이즈  (0) 2022.09.18