Table간의 관계(Relationship)에 대해서 정의를 해보자.

관계에는 1:N, 1:1, N:M이 있다.

사용자 한 명은 댓글을 여러 개 작성할 수 있지만, 댓글 하나에 작성자가 여러 명일 수는 없다.

이러한 관계를 일대다 (1:N) 관계라고 한다.

일대일 관계로는 사용자와 사용자의 대한 정보 테이블을 예로 들 수 있다.

다대다 관계로는 게시글 테이블과 해시태그 (#) 테이블 관계를 예로 들 수 있다.

1: N관계 (hasOne, belongsTo)

사용자(Users) 모델은 게시글(Posts) 모델과 1:N 관계를 가지고 있습니다.

model1: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가 된다.

1:1 관계(hasOne, belongsTo)

사용자(Users) 모델은 사용자 정보(UserInfos) 모델과 1:1 관계를 가지고 있습니다.

1:1 관계를 설정할 때는 hasOne, belongsTo 2가지의 메서드를 사용합니다. 만약 model 간의 관계를 설정한 경우 foreignKey에 해당하는 참조하는 컬럼이 belongsTo 메서드를 사용하는 모델에 생성되게 됩니다.