Open1

Next.js x NestJS x Prisma x GraphQL学習メモ

関口司関口司

DB上のidがInt(オートインクリメント)な状態でID型の扱いをどうすべきか

前提

  • GraphQLで扱う ID の実態はString型
  • ID型は一意のデータを示すもので、キャッシュに利用されることが多い
  • DBのPrimaryはInt型のidを使おうとしていた
  • DBのidとGraphQLのIDの型の不一致が起こるので「何かしら対処が必要」って状況

お気持ち

  • DBではオートインクリメントなInt型のままが楽でいいなぁ(わざわざUUIDにする必要もないな)
  • キャッシュ利用をどうするかのイメージは全然できてないが、ID型使っといたほうが良さそうな気もするなぁ

個人的に考えた策

1. ID型を使わない

  • 最もシンプルな策
  • キャッシュはIDなしでもどうにかなる?
  • プライマリーなIDが型にないことによる違和感はあるかも?

2. DB上のidをString(UUIDなど)にする

  • UUID生成まわりを整備すれさえすればその後のコードはシンプル
  • 整備さえすれば のコストをどう考えるか次第?

3. 型は不一致なまま実際の値をキャストしてがんばる

  • コードが一番ごちゃつきそう

今回の策

  • 1. ID型を使わない で行くことに
    • GraphQLに明るくないのでキャッシュ云々の知識がまだない
    • uuid周りの実装も調べる限りそんな時間はかからないかなとも思いつつ、実際にやったことはない
    • 今つくろうとしているものがプロトレベルのものであるため、あとから2.の方針に切り替えてもさほど大きな問題にならない

最後に

このへんの情報がなかったので自分で考えたことを言語化してみたが、もっとスマートな解があればぜひ知りたい。