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 관계


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

- 다쪽에 외래키가 있어야 하므로 다 쪽이 belongsTo, 1쪽에 hasMany가 존재한다
N대 M 관계

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


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