|
@@ -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个成员可加入多个项目)。
|