prisma db push시 E11000 duplicate key error {prisma} {troubleshooting}

문제정의

  1. Prisma는 MongoDB의 partialIndex를 지원하지 않는다. Unique Index {mongodb} {prisma}#^partialindex
  2. 1:0..1 관계의 스키마를 모델링할 수 없다. 현재 Academy:BusinessInfo, TicketOrder:Ticket 이 상기 다중관계를 사용하고 있으며, BusinessInfo.academyId는 다행히도 null이 없지만 Ticket.orderId는 null이 많이 존재한다.
  3. orderId: null인 필드를 전부 unset했으나, mongodb 상에서도 인덱스를 만들 수 없었고, 대신 partialIndex를 만들어야 한다. -- 이 작업이 Prisma는 지원하지 않아 npx prisma db push 명령어를 사용할 수 없게됨.

빠른 해결

npx prisma db push 명령어를 사용하지 않고 사용. 일단 그대로 두고 쓰다가 필요한 인덱스만 직접 추가한다.

중/장기적 해결

TicketOrder:Ticket 연관관계를 뒤집는다. 즉, TicketOrder.ticketId를 갖게 만들어 TicketOrder 테이블은 약성타입으로, Ticket은 강성타입으로 만드는 것이다. 이 방법은 추후 트랜잭션 경계를 설계할 때에도 도움이 될 것이다.

초장기적 해결

Mongodb to SQL Migration 플랜