Prismaを使用したプロジェクト管理ツールの構築

Trelloのようなコラボレーション型プロジェクト管理ツールを構築しています。React、Express.js、PostgreSQL、およびSocket.ioを使用しています。

最初の手順はデータベーススキーマの設計です。ユーザー、プロジェクト、ボード、タスク、コメント、通知を扱うために6つのモデルを設計しました。

以下に、Prismaスキーマ設計における主要な技術的選択と学んだ教訓をまとめます。

• IDにCUIDを使用する すべてのIDに @default(cuid()) を使用しています。公開URLにおいては、単純な数値よりもCUIDの方が適しています。レコードの総数を推測されるのを防ぐことができるからです。

• 明示的なリレーション名 2つのフィールドが同じモデルを指している場合、Prismaが混乱することがあります。例えば、タスクには作成者(creator)と担当者(assignee)がいますが、どちらも Users モデルです。マイグレーションエラーを防ぐために、@relation 名を使用してこれらのリレーションを明示的に命名する必要があります。

• 多対多のリレーションのための中間テーブル ユーザーは多くのプロジェクトに所属できますし、プロジェクトには多くのユーザーが所属できます。これらを紐付けるために ProjectMember モデルを作成しました。userIdprojectId に一意制約(unique constraint)を追加することで、同じユーザーが同じプロジェクトに二重に登録されるのを防いでいます。

• 階層構造とロジック タスクはプロジェクトに直接属するのではなく、ボードに属します。ボードはプロジェクトに属します。これにより、ドラッグ&ドロップが簡単になります。タスクを移動するには、その boardId を更新するだけで済みます。

• Null許容のリレーション リレーションには必須のものと、オプション(任意)のものがあります。タスクには必ず作成者が必要なので、クエスチョンマークは使いません。一方で、担当者は任意なので、User?String? を使用します。スキーマを正しく機能させるには、これらを適切に含める必要があります。

見つけたよくある間違い:

次のステップでは、Expressバックエンドを構築し、リアルタイム更新のためにSocket.ioをセットアップします。

出典: https://dev.to/chinwuba_jeffrey/building-a-project-management-tool-from-scratch-starting-with-the-prisma-schema-161