데이터베이스 ORM인 Sequelize는 마이그레이션 기능을 제공한다. 모델링을 마친 데이터베이스에 대해 변경 작업이 필요한 경우, 코드로 변경내용을 기술한 뒤 커맨드라인 명령어를 통해 마이그레이션을 진행할 수 있다.
addColumn()
은 기존 테이블에 컬럼을 추가할 경우 사용하는 메소드인데 외래키 설정은 아직 미지원 상태다. (참고) 이를 해결하기 위한 방법 중 쿼리를 직접 작성하여 마이그레이션하는 방법이 있다. (참고)
User, Friend 테이블을 정의했다고 하자. Friend 테이블에 User 테이블을 참조하는 UserId 컬럼을 추가할때 아래와 같이 마이그레이션 코드를 작성한다.
module.exports = {
up: function (queryInterface, Sequelize) {
// raw 쿼리
// 외래키 제한자를 설정한다.
var sql = "ALTER TABLE `Friend`" +
" ADD COLUMN `UserId` BIGINT(20) UNSIGNED DEFAULT NULL" +
", ADD CONSTRAINT `fkUserIdInFriend` FOREIGN KEY (`UserId`) REFERENCES `User` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT";
// 쿼리 실행
return queryInterface.sequelize.query(sql, {
type: Sequelize.QueryTypes.RAW
});
},
down: function (queryInterface, Sequelize) {
var sql = "ALTER TABLE `Friend`" +
" DROP FOREIGN KEY `fkUserIdInFriend`, DROP COLUMN `UserId`";
return queryInterface.sequelize.query(sql, {
type: Sequelize.QueryTypes.RAW
});
}
};
UserId
컬럼을 추가하고 여기에 fkUserIdInFriend
제한자를 추가한다.
아래 마이그레이션 명령어를 실행하면 외래키가 설정된 UserId 컬럼을 Friend 테이블에 추가할 수 있다.
$ sequelize db:migrate