使用 Prisma 构建项目管理工具

我正在构建一个类似于 Trello 的协作式项目管理工具。我使用的是 React、Express.js、PostgreSQL 和 Socket.io。

第一步是数据库模式 (schema)。我设计了六个模型来处理用户、项目、看板、任务、评论和通知。

以下是我在 Prisma schema 设计中的关键技术选择和经验教训:

使用 CUID 作为 ID 我为所有 ID 使用了 @default(cuid())。对于公开 URL 来说,它们比简单的数字更好,可以防止他人通过 ID 猜测你的记录总数。

显式关系名称 当两个字段指向同一个模型时,Prisma 会产生混淆。例如,一个任务有一个创建者 (creator) 和一个指派人 (assignee),两者都是 User 模型。我必须使用 @relation 名称显式地命名这些关系,以防止迁移错误。

用于多对多关系的中间表 (Junction Tables) 一个用户可以属于多个项目,一个项目可以拥有多个用户。我创建了一个 ProjectMember 模型来将它们关联起来。我在 userIdprojectId 上添加了唯一约束 (unique constraint),这可以防止同一个用户重复加入同一个项目。

层级结构与逻辑 任务 (Tasks) 并不直接存在于项目 (Projects) 中,而是存在于看板 (Boards) 中。看板又属于项目。这种设计让拖拽操作变得简单:要移动一个任务,只需更新其 boardId 即可。

可为空的关系 有些关系是必填的,有些则是可选的。任务必须有一个创建者,所以我没有使用问号。指派人是可选的,所以我使用了 User?String?。你必须同时包含两者,schema 才能正常工作。

我发现的一些常见错误:

接下来,我将构建 Express 后端,并设置 Socket.io 以实现实时更新。

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