시퀄라이즈 ORM (2)

김무연·2023년 12월 18일

Backend

목록 보기
44/49
post-thumbnail

users 모델(테이블)과 comments 모델(테이블)을 만들었을 때 두 모델(테이블) 간의 관계를 정의

  • 1:N 관계 (사용자(user) 한 명이 댓글(comment) 여러 개 작성), 즉 users 컬럼 하나와 comments 컬럼 여러개가 가능하다는 뜻
  • 마찬가지로 1:1, 1:N, N:N 이 가능하다
  • 시퀄라이즈에서는 1:N 관계를 hasMany로 표현(사용자.hasMany(댓글))
  • 반대의 입장에서는 belongsTo(댓글.belongsTo(사용자))
  • belongsTo가 있는 테이블에 컬럼이 생김(댓글 테이블에 commenter 컬럼)

// user.js

  static associate(db) {
    db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
  }

comment 테이블의 commenter 컬럼이 나의 id 컬럼을 참조하고 있다 라는 뜻이 된다. comment 테이블은 반대가 된다

  static associate(db) {
    db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' });
  }

comment테이블의 commenter컬럼은 user테이블의 id에 속해있다.

1대1 관계

사용자 테이블과 사용자 정보 테이블의 관계

db.User.hasOne(db.Info, { foreignKey: 'UserId', sourceKey: 'id'};
db.Info.belongsTo(db.User, { foriegnKey: 'UserId', targetKey: 'id}

N대 M 관계

게시글과 해시태그 테이블의 관계

하나의 게시글이 여러 개의 해시태그를 가질 수 있고, 하나의 해시태그가 여러개의 게시글을 가질 수 있음

DB 특성상 다대다 관계는 중간 테이블이 생김

db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag});
db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag});
profile
Notion에 정리된 공부한 글을 옮겨오는 중입니다... (진행중)

0개의 댓글