You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PostgreSQL与Prisma ORM构建每日习惯管理应用的关联问题

问题分析与解决方案

你的核心问题是Prisma Schema中User与Habit的一对多关联定义错误,导致创建多个习惯时旧习惯被覆盖。

当前Schema的错误点

  1. User模型中Habit Habit?定义的是一对一可选关联,而非一对多,这意味着一个用户只能关联一个习惯
  2. habitId String[] @unique的设计完全错误:数组类型加@unique会限制所有用户的habitId数组不能重复,且不符合一对多关联的外键设计逻辑
  3. Habit模型中user User[]定义的反向一对多没有指定对应外键字段,关联关系不完整

修正后的Prisma Schema

model User {
  id           String   @id @default(uuid())
  email        String   @unique
  verify_email Boolean  @default(false)
  habits       Habit[]  // 一个用户对应多个习惯,一对多的正向关联

  @@map("user")
}

model Habit {
  id         String          @id @default(uuid())
  title      String
  created_at DateTime
  userId     String          // 外键,关联到User的id
  user       User            @relation(fields: [userId], references: [id]) // 反向关联,一个习惯属于一个用户
  dayHabits  DayHabit[]
  weekDays   HabitWeekDays[]

  @@map("habits")
}

调整说明

  • User模型用habits Habit[]替代原有单个Habit字段,明确一个用户拥有多个习惯
  • Habit模型新增userId String作为外键,通过@relation指定反向关联关系,这是一对多关联的标准设计
  • 移除原User模型中错误的habitId String[] @unique和@@index([habitId]),这些不符合一对多关联逻辑

后续操作步骤

  1. 运行npx prisma migrate dev生成新迁移文件并应用到数据库
  2. 重新生成Prisma Client:npx prisma generate
  3. 创建习惯时,为每个Habit指定对应的userId,即可实现一个用户关联多个习惯,不会再出现覆盖问题

内容的提问来源于stack exchange,提问作者Higor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:40:25