Table간의 관계(Relationship)에 대해서 정의를 해보자.
관계에는 1:N, 1:1, N:M이 있다.
사용자 한 명은 댓글을 여러 개 작성할 수 있지만, 댓글 하나에 작성자가 여러 명일 수는 없다.
이러한 관계를 일대다 (1:N) 관계라고 한다.
일대일 관계로는 사용자와 사용자의 대한 정보 테이블을 예로 들 수 있다.
다대다 관계로는 게시글 테이블과 해시태그 (#) 테이블 관계를 예로 들 수 있다.
사용자(Users
) 모델은 게시글(Posts
) 모델과 1:N 관계를 가지고 있습니다.
model의 1:N 관계를 설정할 때는 model.hasMany
, model.belongsTo
2가지의 메서드를 사용합니다. 만약 model 간의 관계를 설정한 경우 foreignKey에 해당하는 컬럼이 belongsTo
메서드를 사용하는 모델에 생성되게 됩니다.
/* user.js */
static associate(db) {
db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id', onDelete: 'cascade', onUpdate: 'cascade' });
// db.User (hasMany) db.Comment = 1:N 관계 이다.
// 남(db.Comment)의 컬럼 commenter가 내(db.User) 컬럼 id를 참조 하고 있다.
}
};
// comment.js
static associate(db) {
db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id', onDelete: 'cascade', onUpdate: 'cascade'});
// db.Comment (belongTo) db.User = N:1 관계 이다.
// 내(db.Comment)의 컬럼 commenter는 남(db.User) 컬럼 id에 속해 있다.
}
};
보통 외래키가 붙은 테이블이 belongTo가 된다.
사용자(Users
) 모델은 사용자 정보(UserInfos
) 모델과 1:1 관계를 가지고 있습니다.
1:1 관계를 설정할 때는 hasOne
, belongsTo
2가지의 메서드를 사용합니다.
만약 model 간의 관계를 설정한 경우 foreignKey에 해당하는 참조하는 컬럼이 belongsTo
메서드를 사용하는 모델에 생성되게 됩니다.