This commit is contained in:
longdayi 2025-02-21 13:20:15 +08:00
parent 2f42048c5c
commit db43031fd4
1 changed files with 71 additions and 54 deletions

View File

@ -44,7 +44,8 @@ model Term {
createdBy String? @map("created_by") createdBy String? @map("created_by")
depts Department[] @relation("department_term") depts Department[] @relation("department_term")
hasChildren Boolean? @default(false) @map("has_children") hasChildren Boolean? @default(false) @map("has_children")
posts Post[] @relation("post_term") posts Post[] @relation("post_term")
@@index([name]) // 对name字段建立索引以加快基于name的查找速度 @@index([name]) // 对name字段建立索引以加快基于name的查找速度
@@index([parentId]) // 对parentId字段建立索引以加快基于parentId的查找速度 @@index([parentId]) // 对parentId字段建立索引以加快基于parentId的查找速度
@@map("term") @@map("term")
@ -87,14 +88,14 @@ model Staff {
deletedAt DateTime? @map("deleted_at") deletedAt DateTime? @map("deleted_at")
officerId String? @map("officer_id") officerId String? @map("officer_id")
watchedPost Post[] @relation("post_watch_staff") watchedPost Post[] @relation("post_watch_staff")
visits Visit[] visits Visit[]
posts Post[] posts Post[]
sentMsgs Message[] @relation("message_sender") sentMsgs Message[] @relation("message_sender")
receivedMsgs Message[] @relation("message_receiver") receivedMsgs Message[] @relation("message_receiver")
registerToken String? registerToken String?
enrollments Enrollment[] enrollments Enrollment[]
teachedPosts PostInstructor[] teachedPosts PostInstructor[]
ownedResources Resource[] ownedResources Resource[]
@@index([officerId]) @@index([officerId])
@ -186,41 +187,42 @@ model AppConfig {
model Post { model Post {
// 字符串类型字段 // 字符串类型字段
id String @id @default(cuid()) // 帖子唯一标识,使用 cuid() 生成默认值 id String @id @default(cuid()) // 帖子唯一标识,使用 cuid() 生成默认值
type String? // Post类型课程、章节、小节、讨论都用Post实现 type String? // Post类型课程、章节、小节、讨论都用Post实现
level String? level String?
state String? state String?
title String? // 帖子标题,可为空 title String? // 帖子标题,可为空
subTitle String? subTitle String?
content String? // 帖子内容,可为空 content String? // 帖子内容,可为空
important Boolean? //是否重要/精选/突出 important Boolean? //是否重要/精选/突出
domainId String? @map("domain_id") domainId String? @map("domain_id")
terms Term[] @relation("post_term") terms Term[] @relation("post_term")
order Float? @default(0) @map("order") order Float? @default(0) @map("order")
duration Int? duration Int?
// 日期时间类型字段 // 日期时间类型字段
createdAt DateTime @default(now()) @map("created_at") createdAt DateTime @default(now()) @map("created_at")
publishedAt DateTime? @map("published_at") // 发布时间 publishedAt DateTime? @map("published_at") // 发布时间
updatedAt DateTime @updatedAt @map("updated_at") updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at") // 删除时间,可为空 deletedAt DateTime? @map("deleted_at") // 删除时间,可为空
instructors PostInstructor[] instructors PostInstructor[]
// 关系类型字段 // 关系类型字段
authorId String? @map("author_id") authorId String? @map("author_id")
author Staff? @relation(fields: [authorId], references: [id]) // 帖子作者,关联 Staff 模型 author Staff? @relation(fields: [authorId], references: [id]) // 帖子作者,关联 Staff 模型
enrollments Enrollment[] // 学生报名记录 enrollments Enrollment[] // 学生报名记录
visits Visit[] // 访问记录,关联 Visit 模型 visits Visit[] // 访问记录,关联 Visit 模型
parentId String? @map("parent_id") parentId String? @map("parent_id")
parent Post? @relation("PostChildren", fields: [parentId], references: [id]) // 父级帖子,关联 Post 模型 parent Post? @relation("PostChildren", fields: [parentId], references: [id]) // 父级帖子,关联 Post 模型
children Post[] @relation("PostChildren") // 子级帖子列表,关联 Post 模型 children Post[] @relation("PostChildren") // 子级帖子列表,关联 Post 模型
hasChildren Boolean? @default(false) @map("has_children") hasChildren Boolean? @default(false) @map("has_children")
// 闭包表关系 // 闭包表关系
ancestors PostAncestry[] @relation("DescendantPosts") ancestors PostAncestry[] @relation("DescendantPosts")
descendants PostAncestry[] @relation("AncestorPosts") descendants PostAncestry[] @relation("AncestorPosts")
resources Resource[] // 附件列表 resources Resource[] // 附件列表
watchableStaffs Staff[] @relation("post_watch_staff") // 可观看的员工列表,关联 Staff 模型 watchableStaffs Staff[] @relation("post_watch_staff") // 可观看的员工列表,关联 Staff 模型
watchableDepts Department[] @relation("post_watch_dept") // 可观看的部门列表,关联 Department 模型 watchableDepts Department[] @relation("post_watch_dept") // 可观看的部门列表,关联 Department 模型
meta Json? // 封面url 视频url objectives具体的学习目标 rating评分Int meta Json? // 封面url 视频url objectives具体的学习目标 rating评分Int
// 索引 // 索引
@@index([type, domainId]) @@index([type, domainId])
@@index([authorId, type]) @@index([authorId, type])
@ -236,15 +238,15 @@ model Post {
} }
model PostAncestry { model PostAncestry {
id String @id @default(cuid()) id String @id @default(cuid())
ancestorId String? @map("ancestor_id") ancestorId String? @map("ancestor_id")
descendantId String @map("descendant_id") descendantId String @map("descendant_id")
relDepth Int @map("rel_depth") relDepth Int @map("rel_depth")
ancestor Post? @relation("AncestorPosts", fields: [ancestorId], references: [id]) ancestor Post? @relation("AncestorPosts", fields: [ancestorId], references: [id])
descendant Post @relation("DescendantPosts", fields: [descendantId], references: [id]) descendant Post @relation("DescendantPosts", fields: [descendantId], references: [id])
// 复合索引优化 // 复合索引优化
// 索引建议 // 索引建议
@@index([ancestorId]) // 针对祖先的查询 @@index([ancestorId]) // 针对祖先的查询
@@index([descendantId]) // 针对后代的查询 @@index([descendantId]) // 针对后代的查询
@@index([ancestorId, descendantId]) // 组合索引,用于查询特定的祖先-后代关系 @@index([ancestorId, descendantId]) // 组合索引,用于查询特定的祖先-后代关系
@ -292,18 +294,16 @@ model Visit {
// totalWatchTime Int? @default(0) @map("total_watch_time") // 总观看时长(秒) // totalWatchTime Int? @default(0) @map("total_watch_time") // 总观看时长(秒)
// // 时间记录 // // 时间记录
// lastWatchedAt DateTime? @map("last_watched_at") // 最后观看时间 // lastWatchedAt DateTime? @map("last_watched_at") // 最后观看时间
createdAt DateTime @default(now()) @map("created_at") // 创建时间 createdAt DateTime @default(now()) @map("created_at") // 创建时间
updatedAt DateTime @updatedAt @map("updated_at") // 更新时间 updatedAt DateTime @updatedAt @map("updated_at") // 更新时间
deletedAt DateTime? @map("deleted_at") // 删除时间,可为空 deletedAt DateTime? @map("deleted_at") // 删除时间,可为空
meta Json? meta Json?
@@index([postId, type, visitorId]) @@index([postId, type, visitorId])
@@index([messageId, type, visitorId]) @@index([messageId, type, visitorId])
@@map("visit") @@map("visit")
} }
model Enrollment { model Enrollment {
id String @id @default(cuid()) @map("id") id String @id @default(cuid()) @map("id")
status String @map("status") status String @map("status")
@ -316,8 +316,8 @@ model Enrollment {
// 关联关系 // 关联关系
student Staff @relation(fields: [studentId], references: [id]) student Staff @relation(fields: [studentId], references: [id])
studentId String @map("student_id") studentId String @map("student_id")
post Post @relation(fields: [postId], references: [id]) post Post @relation(fields: [postId], references: [id])
postId String @map("post_id") postId String @map("post_id")
@@unique([studentId, postId]) @@unique([studentId, postId])
@@index([status]) @@index([status])
@ -326,14 +326,14 @@ model Enrollment {
} }
model PostInstructor { model PostInstructor {
postId String @map("post_id") postId String @map("post_id")
instructorId String @map("instructor_id") instructorId String @map("instructor_id")
role String @map("role") role String @map("role")
createdAt DateTime @default(now()) @map("created_at") createdAt DateTime @default(now()) @map("created_at")
order Float? @default(0) @map("order") order Float? @default(0) @map("order")
post Post @relation(fields: [postId], references: [id]) post Post @relation(fields: [postId], references: [id])
instructor Staff @relation(fields: [instructorId], references: [id]) instructor Staff @relation(fields: [instructorId], references: [id])
@@id([postId, instructorId]) @@id([postId, instructorId])
@@map("post_instructor") @@map("post_instructor")
@ -347,7 +347,7 @@ model Resource {
fileId String? @unique fileId String? @unique
url String? url String?
// 元数据 // 元数据
meta Json? @map("meta") meta Json? @map("meta")
// 处理状态控制 // 处理状态控制
status String? status String?
createdAt DateTime? @default(now()) @map("created_at") createdAt DateTime? @default(now()) @map("created_at")
@ -360,7 +360,7 @@ model Resource {
ownerId String? @map("owner_id") ownerId String? @map("owner_id")
post Post? @relation(fields: [postId], references: [id]) post Post? @relation(fields: [postId], references: [id])
postId String? @map("post_id") postId String? @map("post_id")
// 索引 // 索引
@@index([type]) @@index([type])
@@index([createdAt]) @@index([createdAt])
@ -404,3 +404,20 @@ model NodeEdge {
@@index([targetId]) @@index([targetId])
@@map("node_edge") @@map("node_edge")
} }
model Animal {
id String @id @default(cuid())
name String
age Int
gender Boolean
personId String?
person Person? @relation(fields: [personId], references: [id])
}
model Person {
id String @id @default(cuid())
name String
age Int
gender Boolean
animals Animal[]
}