#AI智能食谱推荐助手 #数据范式设计 您是一名专业的数据库工程师,熟悉PostgreSQL数据库和ParseServer,请注意表名用大驼峰,字段小驼峰,有预留字段:objectId,updatedAt,createdAt。 关于ParseServer中断 数据类的描述,字段主要类型有 String => String Number => Number Bool => bool Array => JSON Array Object => JSON Object Date => Date File => Parse.File Pointer => other Parse.Object Relation => Parse.Relation Null => null GeoPoint => {latitude: 40.0, longitude: -30.0} #项目需求 我需要一个食谱推荐系统,需要有食谱表,食谱分类表(中式菜系,西式料理,减脂轻食,甜点烘培,汤羹粥品,素食主义),每日推荐(每日推荐3个) #输出结果(UML类图) 请您帮我用plantuml的类图描述设计好的几张表及其关系 #输出结果(信息结构图) 请您帮我用markmap格式表示上卖弄的信息结构图 #输出结果(SQL语句) 请您帮我用sql格式给我建表语句和测试数据插入语句 我需要一个食谱推荐系统,需要有用户,食谱表,食谱分类表(中式菜系,西式料理,减脂轻食,甜点烘培,汤羹粥品,素食主义),每日推荐(每日推荐3个),AI对话,收藏,浏览记录,用户信息等功能。请您帮我设计好这些表的字段,表之间的关系,以及表之间的关系描述。 #UML类图 ```plantuml @startuml AI智能食谱推荐助手数据库结构 class User { + objectId: String + username: String + password: String + email: String + avatar: Parse.File + createdAt: Date + updatedAt: Date } class DishCategory { + objectId: String + categoryName: String + description: String + coverImage: Parse.File + createdAt: Date + updatedAt: Date } class Recipe { + objectId: String + recipeName: String + ingredients: [String] + steps: [String] + cookingTime: Number + calorie: Number + coverImage: Parse.File + tags: [String] + createdAt: Date + updatedAt: Date } class UserFavorite { + objectId: String + createdAt: Date + updatedAt: Date } class UserHistory { + objectId: String + viewTime: Date + createdAt: Date + updatedAt: Date } class DailyRecommendation { + objectId: String + recommendDate: Date + recommendType: String + createdAt: Date + updatedAt: Date } class NutritionExpert { + objectId: String + expertName: String + specialty: String + description: String + avatar: Parse.File + createdAt: Date + updatedAt: Date } class AIConversation { + objectId: String + chatHistory: [Object] + lastActive: Date + createdAt: Date + updatedAt: Date } ' 关系定义 User "1" *-- "many" UserFavorite : has Recipe "1" *-- "many" UserFavorite : isFavoritedBy User "1" *-- "many" UserHistory : has Recipe "1" *-- "many" UserHistory : isViewedBy DishCategory "1" *-- "many" Recipe : contains DailyRecommendation "1" *-- "3" Recipe : recommends User "1" *-- "many" AIConversation : has NutritionExpert "1" *-- "many" AIConversation : participatesIn @enduml ``` #UML时序图 #登录时序图 ```plantuml @startuml 用户登录登出时序图(简化版) actor 用户 participant "登录界面" as UI participant "认证控制器" as AuthCtrl participant "用户服务" as UserService == 登录流程 == 用户 -> UI : 点击"一键登录" UI -> AuthCtrl : requestQuickLogin() AuthCtrl -> UserService : verifyDeviceToken() alt 验证成功 UserService --> AuthCtrl : 返回用户数据\n(objectId,username,avatar) AuthCtrl -> UI : redirectToHome() UI -> 用户 : 显示主界面 else 验证失败 UserService --> AuthCtrl : 返回错误码\n(401) AuthCtrl -> UI : showToast("登录失效") UI -> 用户 : 停留登录页 end == 登出流程 == 用户 -> UI : 点击"退出"按钮 UI -> AuthCtrl : triggerLogout() AuthCtrl -> UserService : clearAuthToken() UserService --> AuthCtrl : 操作成功(200) AuthCtrl -> UI : resetLoginState() UI -> 用户 : 跳转至登录页 @enduml ``` #食谱浏览时序图 ```plantuml @startuml 食谱浏览时序图 actor 用户 participant "浏览界面" as UI participant "食谱控制器" as RecipeCtrl participant "食谱服务" as RecipeService database "分类数据库" as CategoryDB == 分类浏览 == 用户 -> UI : 选择分类标签 UI -> RecipeCtrl : loadByCategory(categoryId) RecipeCtrl -> CategoryDB : getRecipes(categoryId) CategoryDB --> RecipeCtrl : List RecipeCtrl -> UI : renderRecipeCards() UI -> 用户 : 显示分类食谱 == 模糊搜索 == 用户 -> UI : 输入关键词 UI -> RecipeCtrl : search(keyword) RecipeCtrl -> RecipeService : fuzzySearch(keyword) RecipeService --> RecipeCtrl : List RecipeCtrl -> UI : renderSearchResults() UI -> 用户 : 显示搜索结果 @enduml ``` #每日推荐时序图 ```plantuml @startuml 每日推荐时序图 actor 用户 participant "推荐界面" as UI participant "推荐控制器" as RecCtrl participant "推荐引擎" as RecEngine database "用户画像" as UserProfile 用户 -> UI : 点击"今日推荐" UI -> RecCtrl : getDailyRecommendations() RecCtrl -> UserProfile : getUserPreferences() UserProfile --> RecCtrl : 用户偏好数据 RecCtrl -> RecEngine : generateRecommendations() RecEngine --> RecCtrl : [Recipe1, Recipe2, Recipe3] RecCtrl -> UI : displayRecipes() UI -> 用户 : 展示3个推荐菜谱 @enduml ``` #AI营养咨询时序图 ```plantuml @startuml AI营养咨询时序图 actor 用户 participant "咨询界面" as UI participant "咨询控制器" as AICtrl participant "AI服务" as AIService database "专家数据库" as ExpertDB == 选择营养师 == 用户 -> UI : 进入咨询页 UI -> AICtrl : loadAvailableExperts() AICtrl -> ExpertDB : getAllExperts() ExpertDB --> AICtrl : List AICtrl -> UI : showExpertSelection() UI -> 用户 : 显示专家列表 == 咨询对话 == 用户 -> UI : 选择专家并提问 UI -> AICtrl : sendQuestion(question, expertId) AICtrl -> AIService : processQuestion(question, expertId) AIService -> AIService : 生成营养建议 AIService --> AICtrl : AIResponse AICtrl -> UI : updateChatHistory() UI -> 用户 : 显示AI回复 @enduml ``` #用户收藏时序图 ```plantuml @startuml 用户历史记录查看时序图 actor 用户 participant "我的页面" as MyPage participant "历史记录页面" as HistoryPage participant "食谱详情页" as DetailPage participant "历史记录控制器" as HistoryCtrl participant "食谱服务" as RecipeService == 历史记录浏览 == 用户 -> MyPage : 点击"历史记录" MyPage -> HistoryCtrl : 请求历史记录列表 HistoryCtrl -> RecipeService : 获取用户浏览历史(userId) RecipeService --> HistoryCtrl : 返回[Recipe1,Recipe2,...] HistoryCtrl -> HistoryPage : 渲染历史列表 HistoryPage -> 用户 : 显示带封面的食谱卡片 == 查看详情 == 用户 -> HistoryPage : 点击某个食谱卡片 HistoryPage -> HistoryCtrl : 请求食谱详情(recipeId) HistoryCtrl -> RecipeService : 获取完整食谱数据(recipeId) RecipeService --> HistoryCtrl : 返回食谱详情+步骤+营养数据 HistoryCtrl -> DetailPage : 渲染详情页 DetailPage -> 用户 : 展示:\n- 封面图\n- 食材表\n- 烹饪步骤\n- 营养信息 @enduml ``` #个人中心时序图 ```plantuml @startuml 个人中心时序图 actor 用户 participant "个人中心界面" as UI participant "用户控制器" as UserCtrl participant "数据服务" as DataService database "用户数据" as UserDB 用户 -> UI : 访问个人中心 UI -> UserCtrl : loadUserDashboard() UserCtrl -> DataService : getUserData(userId) DataService -> UserDB : 查询[资料+收藏+历史] UserDB --> DataService : 组合数据 DataService --> UserCtrl : UserDashboardDTO UserCtrl -> UI : renderDashboard() UI -> 用户 : 展示:\n1. 个人信息\n2. 收藏列表\n3. 浏览历史 == 编辑资料 == 用户 -> UI : 点击"编辑资料" UI -> UserCtrl : requestEditForm() UserCtrl -> DataService : getEditableFields(userId) DataService --> UserCtrl : 可编辑字段 UserCtrl -> UI : showEditForm() UI -> 用户 : 显示编辑表单 @enduml ``` #信息结构图 ```markdown