Forráskód Böngészése

fix: project schema

fmode 1 hete
szülő
commit
9c725b32b3
1 módosított fájl, 35 hozzáadás és 38 törlés
  1. 35 38
      project-crud/Schema.md

+ 35 - 38
project-crud/Schema.md

@@ -23,62 +23,59 @@ ProjectTeam 项目成员名单表
 请用plantuml类图,帮我表示上面的三张表关系
 ```
 
-错误示例
+错误示例:没有表达出项目成员和项目多对多的关系,因此需要一个关系表ProjectTeam
 ```
-
 Profile.project 1 => n Project
 一个成员 只能对应一个项目
 一个项目 可以有 多个成员
-
 ```
 
 ## 数据文档
+```plantuml
+@startuml 项目管理系统数据库表关系图(Parse Server)
 
-``` plantuml
-@startuml 项目管理系统(Parse Server)数据库表关系图
-
-' 定义Parse Server风格的类(对应数据表),核心字段遵循Parse规范:
-' 1. 主键统一为 objectId(Parse默认唯一标识)
-' 2. 外键使用 Pointer<目标类> 类型,字段名直接为关联类名(如 project: Pointer<Project>)
+' 注:Parse Server 中所有对象默认包含主键 **objectId**,以下所有类均显式声明以符合规范
+' 外键关系通过 Parse 的 Pointer<目标类> 类型实现,类图中通过关联线标注
 
+' 1. Project 项目表
 class Project {
-  + objectId: String (PK)  // Parse默认主键,唯一标识项目
-  + projectName: String  // 项目名称
-  + startDate: Date  // 项目开始日期
-  + endDate: Date  // 项目结束日期
-  + status: String  // 项目状态(如:进行中、已完成、暂停)
-  // 其他扩展字段(如描述、负责人等可按需添加)
+  + objectId: String (PK, Parse 默认)
+  + title: String (项目标题)
+  + desc: String (项目描述)
+  + avatar: String (项目图片地址)
+  + duration: Number (项目天数)
 }
 
+' 2. Profile 用户档案表(项目组成员)
 class Profile {
-  + objectId: String (PK)  // Parse默认主键,唯一标识成员档案
-  + userName: String  // 成员姓名
-  + position: String  // 成员职位(如:产品经理、开发工程师)
-  + email: String  // 成员邮箱
-  + project: Pointer<Project> (FK)  // 关联项目,Parse指针类型(1个成员仅属1个项目)
-  // 其他扩展字段(如联系方式、入职时间等可按需添加)
+  + objectId: String (PK, Parse 默认)
+  + name: String (姓名)
+  + gender: String (男/女)
+  + desc: String (擅长技能)
 }
 
+' 3. ProjectTeam 项目成员名单表(关联表)
 class ProjectTeam {
-  + objectId: String (PK)  // Parse默认主键,唯一标识项目成员名单记录
-  + project: Pointer<Project> (FK)  // 关联项目,Parse指针类型(对应所属项目)
-  + profile: Pointer<Profile> (FK)  // 关联成员档案,Parse指针类型(对应项目成员)
-  + joinDate: Date  // 成员加入项目的时间
-  // 其他扩展字段(如成员角色、负责模块等可按需添加)
+  + objectId: String (PK, Parse 默认)
+  + project: Pointer<Project> (外键,关联项目)
+  + profile: Pointer<Profile> (外键,关联成员档案)
 }
 
-' 定义Parse Server风格的表间关联关系(基于Pointer类型外键,标注 cardinality)
-' 1. Project 与 Profile:1对多(1个项目包含多个成员,1个成员仅属1个项目
-Project "1" -- "n" Profile : 包含 >
-' 关联依据:Profile.project (Pointer<Project>) 指向 Project.objectId
+' 关系定义:遵循 Parse Server 关联逻辑
+' - 1个 Project 可对应多个 ProjectTeam 记录(1个项目有多个成员
+' - 1个 Profile 可对应多个 ProjectTeam 记录(1个成员可加入多个项目)
+' - ProjectTeam 作为中间表,实现 Project 与 Profile 的多对多关系
 
-' 2. Project 与 ProjectTeam:1对多(1个项目对应多条成员名单记录)
-Project "1" -- "n" ProjectTeam : 对应 >
-' 关联依据:ProjectTeam.project (Pointer<Project>) 指向 Project.objectId
-
-' 3. Profile 与 ProjectTeam:1对1(1个成员仅对应1条名单记录,因成员仅属1个项目)
-Profile "1" -- "1" ProjectTeam : 关联 >
-' 关联依据:ProjectTeam.profile (Pointer<Profile>) 指向 Profile.objectId
+Project "1" -- "*" ProjectTeam : 包含 >
+Profile "1" -- "*" ProjectTeam : 加入 >
 
 @enduml
-```
+```
+
+### 图表说明(符合 Parse Server 特性)
+1. **主键规范**:所有表均包含 `objectId` 字段,作为 Parse Server 自动生成的主键(PK)。
+2. **外键类型**:`ProjectTeam` 表中的 `project` 和 `profile` 字段,均使用 Parse 特有的 `Pointer<目标类>` 类型,分别指向 `Project` 和 `Profile` 表的 `objectId`。
+3. **关系逻辑**:
+   - **Project ↔ ProjectTeam**:1对多(1个项目对应多个成员关联记录)。
+   - **Profile ↔ ProjectTeam**:1对多(1个成员对应多个项目关联记录)。
+   - **Project ↔ Profile**:通过 `ProjectTeam` 中间表实现 **多对多** 关系(核心业务逻辑:1个项目可有多个成员,1个成员可加入多个项目)。