jm_p_op

fk으로 잡은 pk_column 변경하기 본문

Node.js/Express

fk으로 잡은 pk_column 변경하기

jm_p_op 2024. 5. 16. 02:57

목표

  • 기본 데이터는 유지하기
  •  상태
    • User.state = Status.stateId
    • Status(stateId- primekey,stateName)
  • 변경
    • User.state = Status.stateName
    • Status(stateName- primekey )

 

해야할일

  • primekey 변경 (방법을 못찾음)
  1. user.state=>user.stateId
  2. Status=>beforeStatus
  3. Status(신규생성)
  4. Status seed 생성
  5. user.state(신규생성)
  6. Constraint 삭제,생성( fk 연결된것 삭제,생성)
  7. state 원래 데이터 유지하도록 변경
  8. 쓸모없는 데이터 삭제
    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