|
@@ -0,0 +1,134 @@
|
|
|
+# 一、Schema范式设计
|
|
|
+## 发布帖子模块
|
|
|
+- 1. 模块功能
|
|
|
+发布帖子模块允许用户分享他们的旅游经历、照片和建议。主要功能包括:
|
|
|
+
|
|
|
+文本输入:用户可以输入帖子标题和内容,描述他们的旅行经历。
|
|
|
+图片上传:用户可以上传多张旅行照片,增强帖子内容的吸引力。
|
|
|
+位置标记:用户可以选择旅行目的地的地理位置,提供更具体的信息。
|
|
|
+标签添加:用户可以为帖子添加相关标签(如“海滩”、“山脉”、“城市游”等),方便其他用户搜索。
|
|
|
+隐私设置:用户可以选择帖子是公开可见,还是仅限好友可见。
|
|
|
+预览功能:用户在发布前可以预览帖子效果,确保内容和格式符合期望。
|
|
|
+发布和保存草稿:用户可以选择立即发布帖子或保存为草稿,以便后续编辑。
|
|
|
+2. 用户界面设计
|
|
|
+发布帖子按钮:在首页或个人页面有一个明显的“发布帖子”按钮。
|
|
|
+
|
|
|
+- 发布帖子页面:
|
|
|
+
|
|
|
+标题输入框:输入帖子标题。
|
|
|
+内容输入框:富文本编辑器,支持文本格式化(如加粗、斜体、列表等)。
|
|
|
+图片上传区域:拖放区域或“选择文件”按钮,支持多张图片上传。
|
|
|
+位置选择:地图组件或下拉菜单,用户可以选择或搜索目的地。
|
|
|
+标签输入框:可输入多个标签,使用逗号分隔。
|
|
|
+隐私设置:选择框,用户可以选择公开或私密。
|
|
|
+预览按钮:查看帖子发布后的效果。
|
|
|
+发布和保存按钮:用户可以选择发布或保存为草稿。
|
|
|
+
|
|
|
+# 表设计
|
|
|
+为了设计一个符合规范的Parse Schema,我们需要创建几个表(Class),每个表将包含具体的字段。根据您描述的旅游App发布帖子模块,以下是所需的表及其字段的设计。
|
|
|
+
|
|
|
+### 1. Parse Schema 设计
|
|
|
+
|
|
|
+我们将创建以下几个表:
|
|
|
+
|
|
|
+- **User**:用户表,用于存储用户信息。
|
|
|
+- **Post**:帖子表,用于存储用户发布的帖子信息。
|
|
|
+- **Image**:图片表,用于存储与帖子相关的图片信息。
|
|
|
+- **Tag**:标签表,用于存储标签信息。
|
|
|
+
|
|
|
+### 2. 表结构及字段设计
|
|
|
+
|
|
|
+#### User 表
|
|
|
+
|
|
|
+- **表名**:User
|
|
|
+- **字段**:
|
|
|
+ - `objectId` (默认字段)
|
|
|
+ - `createdAt` (默认字段)
|
|
|
+ - `username` (String) - 用户名
|
|
|
+ - `email` (String) - 用户邮箱
|
|
|
+ - `profilePicture` (File) - 用户头像
|
|
|
+
|
|
|
+#### Post 表
|
|
|
+
|
|
|
+- **表名**:Post
|
|
|
+- **字段**:
|
|
|
+ - `objectId` (默认字段)
|
|
|
+ - `createdAt` (默认字段)
|
|
|
+ - `title` (String) - 帖子标题
|
|
|
+ - `content` (String) - 帖子内容
|
|
|
+ - `location` (GeoPoint) - 帖子位置
|
|
|
+ - `privacy` (String) - 帖子隐私设置(公开/私密)
|
|
|
+ - `user` (Pointer<User>) - 发布用户(外键关联到User表)
|
|
|
+ - `tags` (Array<Pointer<Tag>>) - 帖子标签(外键关联到Tag表)
|
|
|
+ - `images` (Array<Pointer<Image>>) - 帖子图片(外键关联到Image表)
|
|
|
+
|
|
|
+#### Image 表
|
|
|
+
|
|
|
+- **表名**:Image
|
|
|
+- **字段**:
|
|
|
+ - `objectId` (默认字段)
|
|
|
+ - `createdAt` (默认字段)
|
|
|
+ - `url` (String) - 图片URL
|
|
|
+ - `post` (Pointer<Post>) - 关联的帖子(外键关联到Post表)
|
|
|
+
|
|
|
+#### Tag 表
|
|
|
+
|
|
|
+- **表名**:Tag
|
|
|
+- **字段**:
|
|
|
+ - `objectId` (默认字段)
|
|
|
+ - `createdAt` (默认字段)
|
|
|
+ - `name` (String) - 标签名称
|
|
|
+
|
|
|
+### 3. PlantUML 类图表示
|
|
|
+
|
|
|
+以下是使用PlantUML表示的类图,展示了各个表及其字段和关系:
|
|
|
+
|
|
|
+```plantuml
|
|
|
+@startuml
|
|
|
+
|
|
|
+class User {
|
|
|
+ +objectId: String
|
|
|
+ +createdAt: Date
|
|
|
+ +username: String
|
|
|
+ +email: String
|
|
|
+ +profilePicture: File
|
|
|
+}
|
|
|
+
|
|
|
+class Post {
|
|
|
+ +objectId: String
|
|
|
+ +createdAt: Date
|
|
|
+ +title: String
|
|
|
+ +content: String
|
|
|
+ +location: GeoPoint
|
|
|
+ +privacy: String
|
|
|
+ +user: Pointer<User>
|
|
|
+ +tags: Array<Pointer<Tag>>
|
|
|
+ +images: Array<Pointer<Image>>
|
|
|
+}
|
|
|
+
|
|
|
+class Image {
|
|
|
+ +objectId: String
|
|
|
+ +createdAt: Date
|
|
|
+ +url: String
|
|
|
+ +post: Pointer<Post>
|
|
|
+}
|
|
|
+
|
|
|
+class Tag {
|
|
|
+ +objectId: String
|
|
|
+ +createdAt: Date
|
|
|
+ +name: String
|
|
|
+}
|
|
|
+
|
|
|
+User "1" -- "0..*" Post : has
|
|
|
+Post "1" -- "0..*" Image : contains
|
|
|
+Post "0..*" -- "0..*" Tag : tagged with
|
|
|
+
|
|
|
+@enduml
|
|
|
+```
|
|
|
+
|
|
|
+### 4. 设计范式说明
|
|
|
+
|
|
|
+- **第一范式**:所有字段都是原子性的,表中没有重复的列。
|
|
|
+- **第二范式**:所有非主键字段都完全依赖于主键,确保没有部分依赖。
|
|
|
+- **第三范式**:没有传递依赖,所有非主键字段都直接依赖于主键。
|
|
|
+
|