
모델1과 모델2가  1:N의 관계를 가진다면?
hasMany / belongsTo 
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class 모델1 extends Model {
    static associate(models) {
      // define association here
       models.모델1.hasMany(models.모델2);
    }
  };
 
'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
	class 모델2 extends Model {
		 static associate(models){
         //define association here 
           models.모델2.belongsTo(models.모델1); 
         
         };
}
const { 모델1, 모델2 } = sequelize.models ;
//여기서 models는 모델들이 모여있는 폴더를 말함 . 구조분해
모델2.belongsTo(모델1);
모델1.hasMany(모델2); 
1:N에서 1에 해당하는 모델에hasMany를 붙여준다.  
모델과 해당 스키마(마이그레이션 폴더에 있음)가 일치하는지 확인
대부분 일치함.
빈 스켈레톤 파일을 생성
npx sequelize-cli migration:generate --name migration-skeleton
예시)
npx sequelize-cli migration:generate --name add-column-postId
"migration-skeleton"부분에 이름을 만들어주면 되는데,
일반적으로 새롭게 생성할 컬럼명을 써주는것 같다. ex) postId
해당 마이그레이션 스켈레톤 파일에서 컬럼추가 및 FK를 설정한다.
module.exports = {
  up: (queryInterface, Sequelize) => {
    // logic for transforming into the new state
    //여기서 이전에 관계를 설정해준 모델 관련 fk설정을 진행 
    //1.칼럼추가 
    //2. fk설정 
  },
  down: (queryInterface, Sequelize) => {
    // logic for reverting the changes
    // migration undo를 했을때, 일어나는 일들 진행
    //1. fk설정 삭제 
    //2. 컬럼삭제 
  }
}
addColumn/addConstraint
removeConstraint/removeColumn
'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    // field 추가
    await queryInterface.addColumn('모델2테이블명', '새로생성할컬럼', Sequelize.INTEGER);
    // foreign key 연결
    await queryInterface.addConstraint('모델2테이블명', {
      fields: ['새로생성할컬럼명'],
      type: 'foreign key',//fk설정
      name: 'FK_any_name_you_want',
      references: {
        table: '모델1테이블명',
        field: 'id'
      },  //모델1테이블의 id값을 참조하겠다. (모델1이 1:N중 1)
      onDelete: 'cascade',
      onUpdate: 'cascade'
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.removeConstraint('모델2테이블명', 'FK_any_name_you_want');
    await queryInterface.removeColumn('모델2테이블명', '새로생성한컬럼명');
  }
};