#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类图
@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时序图 #登录时序图
@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
#食谱浏览时序图
@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<Recipe>
RecipeCtrl -> UI : renderRecipeCards()
UI -> 用户 : 显示分类食谱
== 模糊搜索 ==
用户 -> UI : 输入关键词
UI -> RecipeCtrl : search(keyword)
RecipeCtrl -> RecipeService : fuzzySearch(keyword)
RecipeService --> RecipeCtrl : List<Recipe>
RecipeCtrl -> UI : renderSearchResults()
UI -> 用户 : 显示搜索结果
@enduml
#每日推荐时序图
@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营养咨询时序图
@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<NutritionExpert>
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
#用户收藏时序图
@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
#个人中心时序图
@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