本项目使用 Mysql 数据库,实现数据的持久化存储。主要数据表如下
我来详细分析这两个类的定义、作用和关系:
#### User 类
用户模型,用于存储用户的基本信息和各种关联关系。
主要字段:
- 基本信息:
- ID: 主键
- Nickname: 用户昵称
- OpenID: 微信用户唯一标识
- SessionKey: 微信会话密钥
- AvatarURL: 头像链接
- CreatedAt/UpdatedAt: 创建和更新时间戳
关联关系:
1. 家庭关系:
- Family: 所属家庭(一对一)
- PendingFamily: 待审核的家庭(一对一)
2. 新闻交互:
- LikedNews: 点赞的新闻(多对多)
- FavoritedNews: 收藏的新闻(多对多)
- DislikedNews: 点踩的新闻(多对多)
- ViewedNews: 浏览过的新闻(多对多)
3. 饮食相关:
- FoodPreferences: 食物偏好(一对多)
- DesiredDishes: 期望的菜品(一对多)
- UserIngredientHistory: 食材使用历史(一对多)
- UserIngredientPreference: 食材偏好(一对多)
- UserRecipeHistory: 食谱使用历史(一对多)
- UserLastSelectedFoods: 最近选择的食物(一对多)
4. 营养和碳排放追踪:
- NutritionGoals: 营养目标(一对多)
- NutritionIntakes: 营养摄入(一对多)
- CarbonGoals: 碳排放目标(一对多)
- CarbonIntakes: 碳排放摄入(一对多)
#### RefreshToken 类
这是用于管理用户认证刷新令牌的模型。
主要字段:
- Token: 令牌字符串(唯一索引)
- UserID: 关联的用户ID
- ExpiresAt: 过期时间
- Revoked: 是否已撤销
外键关系:
- RefreshToken 通过 UserID 与 User 表建立一对多关系(一个用户可以有多个刷新令牌)
我来分析这些与新闻相关的模型结构:
#### News 类
这是新闻的主体模型,存储新闻的基本信息和交互数据。
主要字段:
- 基本信息:
- ID、Title: 新闻ID和标题
- UploadTime: 上传时间
- ViewCount, LikeCount, FavoriteCount, DislikeCount, ShareCount: 各类统计数据
关联关系:
1. 作者关系:
- Author: 与User表的一对一关系(通过AuthorID关联)
2. 用户交互:
- LikedByUsers: 点赞用户(多对多)
- FavoritedByUsers: 收藏用户(多对多)
- DislikedByUsers: 点踩用户(多对多)
- ViewedByUsers: 浏览用户(多对多)
3. 内容组成:
- Comments: 评论(一对多)
- Paragraphs: 段落内容(一对多)
- Images: 新闻图片(一对多)
#### Paragraph 类
用于存储新闻的文本段落。
主要字段:
- ID: 段落ID
- NewsID: 关联的新闻ID
- Text: 段落文本内容
外键关系:
- 通过NewsID与News表建立一对多关系
#### NewsImage 类
存储新闻中的图片信息。
主要字段:
- ID: 图片ID
- NewsID: 关联的新闻ID
- URL: 图片链接
- Description: 图片描述
外键关系:
- 通过NewsID与News表建立一对多关系
#### Draft 类
用于管理新闻草稿的模型。
主要字段:
- 基本信息:ID、Title
- AuthorID: 作者ID
- CreatedAt/UpdatedAt: 创建和更新时间
关联关系:
- Author: 与User的一对一关系
- Paragraphs: 草稿段落(一对多)
- Images: 草稿图片(一对多)
#### DraftParagraph 和 DraftImage 类
结构类似于正式新闻的Paragraph和NewsImage,但增加了时间戳字段,用于追踪草稿内容的修改历史。
#### Family 类
这是家庭单位的主体模型,用于管理家庭成员和相关功能。
主要字段:
- 基本信息:
- ID: 家庭唯一标识
- Name: 家庭名称
- Token: 用于邀请新成员加入的唯一标识符
- MemberCount: 成员数量
- CreatedAt/UpdatedAt: 创建和更新时间戳
关联关系:
1. 成员管理:
- Admins: 管理员列表(多对多)
- Members: 普通成员列表(多对多)
- WaitingList: 待审核成员列表(多对多)
2. 菜品管理:
- Dishes: 家庭想吃的菜品列表(一对多)
#### FamilyDish 类
这是连接家庭和菜品的关联模型,记录家庭成员对特定菜品的期望。
主要字段:
- ID: 主键
- FamilyID: 关联的家庭ID
- DishID: 关联的菜品ID
- ProposerUserID: 提议者的用户ID
- LevelOfDesire: 想吃程度(1-3级)
关联关系:
- Family: 与Family表的一对多关系
- Proposer: 与User表的一对多关系
让我分析一下评论(Comment)模型的结构:
#### Comment 类
这是一个评论系统的模型,支持多级评论(评论的评论)功能。
主要字段:
- 基本信息:
- ID: 评论唯一标识
- Content: 评论内容(text类型)
- PublishTime: 发布时间
- LikeCount: 点赞数量
- IsReply: 标识是否为回复
- DidLike: 临时字段,标记当前用户是否点赞(不存储到数据库)
关联关系:
1. 用户关联:
- UserID: 评论作者ID
- Author: 与User表的一对一关系,获取作者信息
2. 新闻关联:
- NewsID: 关联的新闻ID
3. 评论嵌套:
- ParentID: 父评论ID(可为空)
- Replies: 子评论列表(一对多关系)
4. 点赞关系:
- LikedByUsers: 点赞用户列表(多对多关系)
#### NutritionGoal 类
用于记录用户的营养摄入目标。
主要字段:
- 基本信息:
- UserID: 用户ID
- Date: 日期(带索引)
- 营养指标:
- Calories: 卡路里
- Protein: 蛋白质
- Fat: 脂肪
- Carbohydrates: 碳水化合物
- Sodium: 钠
#### NutritionIntake 类
记录用户实际的营养摄入情况。
主要字段:
- 继承NutritionGoal的所有营养指标
- 额外包含:
- MealType: 餐次类型
- Date: 记录日期(带索引)
#### CarbonGoal 类
用于记录用户的碳排放目标。
主要字段:
- UserID: 用户ID
- Date: 日期(带索引)
- Emission: 目标碳排放值
#### CarbonIntake 类
记录用户实际的碳排放情况。
主要字段:
- UserID: 用户ID
- Date: 日期(带索引)
- MealType: 餐次类型
- Emission: 实际碳排放值
#### Food 类
这是食物的基础模型,存储食物的基本信息和营养成分。
主要字段:
- 基本信息:
- ZhFoodName/EnFoodName: 中英文食物名称
- ImageUrl: 食物图片链接
- Price: 价格
- 营养成分:
- Calories: 卡路里
- Protein: 蛋白质
- Fat: 脂肪
- Carbohydrates: 碳水化合物
- Sodium: 钠
- 环保指标:
- GHG: 温室气体排放量
#### Recipe 类
这是食谱模型,管理食谱信息和配料关系。
主要字段:
- 基本信息:
- Name: 食谱名称
- URL: 食谱来源链接
- ImageURL: 食谱图片链接
- Category: 食谱分类
-
- 关联信息:
- Ingredients: JSON格式存储的配料表
- Foods: 与Food的多对多关系
#### FoodPreference 类
用于存储用户的一般饮食偏好设置。
主要字段:
- ID: 主键
- UserID: 用户ID
- Name: 偏好类型名称(如"highProtein"高蛋白)
#### DislikedFoodPreference 类
记录用户不喜欢的具体食物。
主要字段:
- ID: 主键
- UserID: 用户ID
- FoodID: 食物ID
#### UserRecipeHistory 类
记录用户的食谱选择历史。
主要字段:
- UserID: 用户ID
- RecipeID: 食谱ID
- SelectTime: 选择时间
#### UserIngredientHistory 类
记录用户的食材选择历史。
主要字段:
- UserID: 用户ID
- IngredientID: 食材ID
- SelectTime: 选择时间
#### UserIngredientPreference 类
存储用户对具体食材的偏好。
主要字段:
- UserID: 用户ID
- IngredientID: 食材ID
- IsLike: 偏好标志(喜欢/不喜欢)
- UpdateTime: 更新时间
#### UserLastSelectedFoods 类
记录用户最近选择的食物。
主要字段:
- UserID: 用户ID
- FoodID: 食物ID
- SelectTime: 选择时间
### question
能否根据以上的信息为该数据库绘制ER图?