model DictAttachmentAttribute { id Int @id @default(autoincrement()) type String // 资源分类 name String // 属性名 desc String? // 属性补充描述 AttachmentAttribute AttachmentAttribute[] @@unique([type, name]) @@map("dict_attachment_attributes") } model AttachmentAttribute { attachmentId Int // 对应attachments表 attributeId Int // 对应dict_attachment_attributes表 value String // 对应该attribute_id值 desc String? // 补充描述 Attachment Attachment @relation(fields: [attachmentId], references: [id]) DictAttribute DictAttachmentAttribute @relation(fields: [attributeId], references: [id]) @@id([attachmentId, attributeId]) @@map("attachment_attributes") } model Attachment { id Int @id @default(autoincrement()) type String? // 分类,text-图文,image-图片,audio-音频,video-视频 location String? // 存储路径 name String? // 资源名称 ossType String? // oss类型 usersId Int // 作者id,对应users表 status Int @default(0) // 是否禁用,0-未禁用,1-已禁用、已删除 desc String? // 补充描述 createdAt DateTime? @default(now()) // 创建时间 User User @relation(fields: [usersId], references: [id]) AttachmentAttribute AttachmentAttribute[] Course Course[] ContentAttachment ContentAttachment[] @@map("attachments") } model Course { id Int @id @default(autoincrement()) title String // 标题 subTitle String? // 子标题 desc String? // 描述信息 coverId Int? // 课程封面id authorId Int // 作者id originPrice Float? // 初始价格 price Float? // 现售价格 status Int @default(0) // 是否上架 counts Int @default(0) // 购买计数初始数 order Int @default(1000) // 排序 detail String? // 关联markdown详情页 type String? // 分类 Cover Attachment? @relation(fields: [coverId], references: [id]) Author User @relation(fields: [authorId], references: [id]) Contents CourseContent[] Tags CourseTag[] CourseComment CourseComment[] @@map("courses") } model CourseContent { id Int @id @default(autoincrement()) courseId Int // 对应courses表 title String // 标题 type String? // 类型 order Int @default(1000) // 排序 pid Int? // 上级内容id status Int @default(0) // 是否开放 authorId Int // 作者id Course Course @relation(fields: [courseId], references: [id]) Author User @relation(fields: [authorId], references: [id]) Attachments ContentAttachment[] Tags ContentTag[] ContentComment ContentComment[] @@map("course_contents") } model ContentAttachment { // 对应courses_contents表 contentId Int // 对应attachments表 attachmentId Int Content CourseContent @relation(fields: [contentId], references: [id]) Attachment Attachment @relation(fields: [attachmentId], references: [id]) @@id([contentId, attachmentId]) @@map("content_attachments") } model DictCourseTag { id Int @id @default(autoincrement()) name String // 标签名,比如:Vue,React typeId Int? // 分类,对应dict_course_types,比如:前端、后端、服务端 order Int @default(1000) // 排序 status Int @default(0) // 是否禁用,0-未禁用,1-已禁用 CourseType DictCourseType? @relation(fields: [typeId], references: [id]) CourseTags CourseTag[] ContentTag ContentTag[] @@unique([name, typeId]) @@map("dict_course_tag") } model DictCourseType { id Int @id @default(autoincrement()) name String @unique // 分类名 order Int @default(100) // 排序 status Int @default(0) // 是否禁用,0-未禁用,1-已禁用 CourseTags DictCourseTag[] @@map("dict_course_type") } model CourseTag { courseId Int // 对应courses表 tagId Int // 对应dict_tags表 Course Course @relation(fields: [courseId], references: [id]) Tag DictCourseTag @relation(fields: [tagId], references: [id]) @@id([courseId, tagId]) @@map("course_tags") } model ContentTag { contentId Int // 对应courses表 tagId Int // 对应dict_tags表 Content CourseContent @relation(fields: [contentId], references: [id]) Tag DictCourseTag @relation(fields: [tagId], references: [id]) @@id([contentId, tagId]) @@map("course_content_tags") } model Comment { id Int @id @default(autoincrement()) // 上一级评论 pid Int userId Int content String created DateTime @default(now()) // 点赞数量 hands Int @default(0) // 是否显示,0-否,1-是 status Int @default(1) // 是否采纳为最佳,0-否,1-是 isBest Int @default(0) User User @relation(fields: [userId], references: [id]) parent Comment? @relation("comment_relation", fields: [pid], references: [id]) children Comment[] @relation("comment_relation") CourseComment CourseComment[] ContentComment ContentComment[] @@map("comments") } model CourseComment { courseId Int commentId Int Course Course @relation(fields: [courseId], references: [id]) Comment Comment @relation(fields: [commentId], references: [id]) @@id([courseId, commentId]) @@map("course_comments") } model ContentComment { contentId Int commentId Int Content CourseContent @relation(fields: [contentId], references: [id]) Comment Comment @relation(fields: [commentId], references: [id]) @@id([commentId, contentId]) @@map("content_comments") }