jm_p_op
fk으로 잡은 pk_column 변경하기 본문
목표
- 기본 데이터는 유지하기
- 상태
- User.state = Status.stateId
- Status(stateId- primekey,stateName)
- 변경
- User.state = Status.stateName
- Status(stateName- primekey )
해야할일
- primekey 변경 (방법을 못찾음)
- user.state=>user.stateId
- Status=>beforeStatus
- Status(신규생성)
- Status seed 생성
- user.state(신규생성)
- Constraint 삭제,생성( fk 연결된것 삭제,생성)
- state 원래 데이터 유지하도록 변경
- 쓸모없는 데이터 삭제
await queryInterface.renameColumn('Users','state','stateId')
//state테이블명 변경
await queryInterface.renameTable('Status','beforeStatus')
// 새로운 state 테이블 생성
await queryInterface.createTable('Status',
{
stateName: {
type: Sequelize.STRING,
unique:true,
allowNull:false,
primaryKey:true
}})
// 새로운 state생성
var adds=await seed_db.seed_data('Status',0,2)
await Status.bulkCreate(adds)
//user.state 생성
await queryInterface.addColumn("Users","state",{
type: Sequelize.STRING,
defaultValue:"Active",
allowNull:false}
)
//fk해제,연결
await queryInterface.removeConstraint("Users",'Users_state_Status_fk')
await queryInterface.addConstraint("Users",{
fields:["state"],
type:"foreign key",
references:{
table:"Status",
field:"stateName"
},
onDelete:"cascade",
onUpdate:"cascade"
})
// state 원래상태로 변경
adds=await seed_db.seed_data('Status_1',0,2)
let getquery=`UPDATE public."Users"
SET state =
CASE
`
console.log(adds.length)
for (let i=0;i<adds.length;i++){
getquery+= `WHEN "stateId" = ${adds[i].stateId} THEN '${adds[i].stateName}'`
}
getquery+=` END;`
await queryInterface.sequelize.query(getquery)
//쓸모없는 데이터 삭제
await queryInterface.removeColumn('Users','stateId')
await queryInterface.dropTable('berforeStatus')
'Node.js > Express' 카테고리의 다른 글
sequelize migrate using environment (0) | 2024.06.05 |
---|---|
PK는 왠만하면 Auto Increment으로 잡자 (0) | 2024.05.27 |
multer - 파일 받기 (0) | 2024.05.14 |
permission (0) | 2024.05.13 |
express - app (0) | 2024.05.09 |