博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业,有18年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。
一、研究目的
在全球范围内,随着生活节奏加快与健康意识提升,饮食管理已成为人们日常关注的焦点。传统的菜谱查询方式往往缺乏个性化与系统化,导致用户在选择食材、制定膳食计划时面临信息过载与决策困难。近年来,推荐系统与大数据技术的快速发展为解决此类问题提供了技术基础,但现有研究多聚焦于单一维度的推荐,缺乏对饮食结构、营养平衡及用户健康状况的综合考量。本研究旨在构建基于SpringBoot框架的菜谱推荐与饮食规划平台,以实现高效、可扩展且易维护的后端服务。通过引入协同过滤、内容分析、机器学习模型,平台将能够根据用户偏好、过敏信息、营养需求以及生活习惯进行精准匹配,从而生成个性化的菜谱列表与每日膳食计划。与此同时,平台将集成健康监测模块,支持用户上传体重、血压、血糖等指标,并利用数据可视化技术呈现饮食与健康状态的关联趋势,为用户提供科学依据。技术实现层面上,研究将探索SpringBoot与微服务架构的结合方式,利用Docker容器化部署,实现系统的弹性伸缩与持续集成。通过对比实验与用户调研,本研究期望验证所提出模型在推荐准确率、用户满意度及健康干预效果方面的优势,并为后续相关领域提供可复制的技术框架与方法论。
二、研究意义
本研究在信息技术与营养科学交叉领域开展,旨在通过构建基于SpringBoot的菜谱推荐与饮食规划平台,填补当前个性化饮食服务缺失的空白。该平台将整合用户口味偏好、过敏信息、体重目标以及日常活动量等多维度数据,从而实现精准的菜谱匹配与膳食计划生成。通过引入协同过滤与内容分析技术,系统能够在海量菜谱库中快速定位最符合用户需求的食谱,并对其营养成分进行自动标注。与此同时,平台将配备健康监测模块,支持用户上传体重、血压、血糖等指标,并利用时间序列分析预测饮食调整对健康状态的潜在影响。技术层面上,本研究将探索SpringBoot与微服务架构的深度融合,利用Docker容器化部署实现系统的弹性伸缩与持续集成,从而为大规模用户提供高可用、低延迟的服务。研究意义体现在多方面:首先,它为公众提供了科学、便捷的饮食决策工具,有助于提升整体营养水平与健康意识;其次,平台的数据聚合与分析能力可为营养学研究提供大规模真实世界数据,为疾病预防与管理提供依据;再次,技术创新点在于将传统推荐系统与健康监测深度结合,为后续智能医疗平台奠定范式;最后,该平台的模块化设计与开放接口可促进产业链协同发展,推动健康科技与食品行业的融合。通过对比实验与用户满意度调查,本研究期望验证所提出模型在推荐准确率、用户粘性以及健康干预效果方面的显著优势,为实现全民健康管理提供可复制、可推广的技术路径。
三、国内外研究现状
在全球范围内,饮食推荐与健康管理已成为计算机科学与营养学交叉领域的热点课题。国外学术界以协同过滤、深度学习及知识图谱为核心技术,构建了多种个性化菜谱推荐系统。以Recipe1M、Food-101等公开数据集为基础,研究者通过卷积神经网络提取菜品图像特征,并结合文本描述实现跨模态匹配,从而提升推荐的多样性与准确率。与此同时,Diet2Vec等工作将膳食记录映射至低维向量空间,实现了基于用户历史饮食的相似度计算,进一步提升了推荐的个性化水平。近年来,研究者还将健康监测数据(如体重、血压、血糖)与推荐模型耦合,通过强化学习动态调整膳食计划,以实现长期健康干预。
在国内,随着《中国食品成分表》及全国营养调查数据库的完善,学术界开始关注基于本土饮食文化的推荐系统。多篇论文提出了基于规则与机器学习相结合的混合模型,利用传统菜谱知识库与用户口味偏好进行精准匹配。国内研究者还探索了多源数据融合技术,将社交媒体中的饮食帖子、健康问卷及传感器采集的生理指标统一纳入推荐框架,从而实现更细粒度的个性化服务。近年来,国内学术界在可解释性推荐方面取得突破,提出基于因子分解机与注意力机制的模型,使用户能够直观了解推荐依据,提升系统透明度与信任度。
总体而言,国外研究多聚焦于算法创新与大规模数据处理,强调模型精度与多模态融合;国内研究则更注重本土化知识库构建、数据隐私保护及可解释性。两者在技术路线、数据来源与应用场景上形成互补。未来的研究方向将进一步深化健康监测与推荐系统的耦合,探索基于微服务架构的可扩展平台,并在保证数据安全与用户隐私的前提下,推动个性化饮食管理向精准医疗与公共健康服务延伸。
四、预期达到目标及解决的关键问题
本研究的预期目标聚焦于构建一套完整、可扩展且高效的菜谱推荐与饮食规划平台,旨在实现多维度个性化服务并兼顾系统性能与可维护性。首先,平台将通过集成协同过滤、内容分析及深度学习模型,实现基于用户口味偏好、过敏信息、营养需求以及生活方式的精准菜谱匹配;其次,平台将提供每日膳食计划生成与动态调整功能,支持用户根据体重目标与健康指标进行实时反馈;再次,系统将嵌入健康监测模块,允许用户上传体重、血压、血糖等生理数据,并通过时间序列分析预测饮食调整对健康状态的影响;最后,技术实现层面将采用SpringBoot微服务架构与Docker容器化部署,实现弹性伸缩、持续集成与高可用服务。通过上述目标,本研究期望在推荐准确率、用户满意度以及健康干预效果方面取得显著提升,为大众提供科学、便捷的饮食决策工具。
在实现上述目标的过程中,关键问题主要集中于算法设计、数据治理与系统架构三大维度。算法层面,如何在保证模型精度的同时兼顾多模态特征融合与实时性,是一大挑战;此外,如何将健康监测数据与饮食推荐模型有效耦合,以实现动态、可持续的健康干预,也是亟待解决的问题。数据治理方面,平台需处理海量菜谱文本、图像及用户行为日志,如何构建统一、标准化的数据仓库,并保障用户隐私与数据安全,是关键技术难点;同时,如何利用本土化营养数据库与国际标准进行对齐,以提升推荐的科学性,也是重要议题。系统架构层面,微服务化设计需要解决服务间通信、负载均衡与容错机制;Docker容器化部署则需保证持续集成与自动化运维的高效性;此外,如何在保证系统可扩展性的同时,降低运维成本与技术债务,也是研究重点。
针对上述关键问题,本研究计划采用多策略组合解决方案。算法方面,将探索基于因子分解机与注意力机制的混合模型,并引入强化学习框架实现动态推荐;数据治理将构建统一的元数据管理平台,并采用差分隐私技术保护用户信息;系统架构则通过SpringBoot与Kubernetes集群实现弹性伸缩,并利用Prometheus与Grafana进行监控与告警。通过上述方法,本研究期望在技术可行性、科学性与实用性之间取得平衡,为国内外相关研究提供可复制、可推广的技术路径。
五、研究内容
本研究围绕构建基于SpringBoot的菜谱推荐与饮食规划平台展开,整体研究内容可划分为四个主要模块:数据采集与预处理、推荐算法设计与实现、健康监测与动态规划、系统架构与性能优化。首先,在数据采集与预处理模块中,计划收集多源菜谱信息,包括文本描述、营养成分表、食材图像以及用户评价等;同时,将从公开数据库获取的宏观营养数据与国内食品成分表进行对齐,形成统一的营养标签体系;此外,为保障用户隐私,将采用脱敏技术对个人信息进行匿名化处理,并在数据存储层实现加密存储。其次,推荐算法设计与实现模块将聚焦于多模态特征融合与个性化匹配。具体而言,文本特征将通过BERT等预训练模型提取语义向量;图像特征则利用ResNet等卷积网络进行编码;两类特征将通过因子分解机实现低维映射,并在此基础上引入注意力机制突出用户偏好与菜品特色的关联;为提升推荐的动态性,将构建强化学习框架,使得系统能够根据用户实时反馈调整策略。第三,健康监测与动态规划模块旨在将饮食推荐与个体健康状态紧密耦合。平台将支持用户上传体重、血压、血糖等生理指标,并通过时间序列分析预测饮食调整对这些指标的影响;基于预测结果,系统将自动生成每日膳食计划,并在用户偏好与营养需求之间进行权衡;此外,为满足长期健康干预需求,将设计周期性评估机制,定期对用户体重变化、血糖波动等指标进行回顾性分析,并给出改进建议。最后,系统架构与性能优化模块将采用SpringBoot微服务框架构建后端服务,并通过Docker容器化实现快速部署;在服务层面,将使用Nginx做负载均衡,Kafka实现异步消息传递,Redis缓存热点数据以降低数据库压力;同时,为保证系统可扩展性与高可用性,将利用Kubernetes进行集群管理,并通过Prometheus与Grafana实现监控与告警。整个研究过程将采用迭代式开发模式,每个模块完成后进行单元测试、集成测试以及性能评估;在算法层面,将通过A/B测试与离线实验验证推荐准确率与用户满意度;在健康干预层面,将开展小规模临床试验,评估平台对体重管理与血糖控制的实际效果。综上所述,本研究通过多维度数据融合、先进算法设计以及稳健系统架构,旨在为用户提供科学、个性化且可持续的饮食规划服务,并为后续健康管理平台的研发提供可复制、可推广的技术与方法论。
六、需求分析
用户需求方面,平台的目标用户涵盖从日常生活中寻求便捷饮食方案的普通大众,到关注健康管理与营养平衡的中高端人群,再到专业营养师与健身教练等行业从业者。用户普遍期望在繁忙工作与生活节奏中,能够快速获取符合自身口味、过敏史与营养需求的菜谱,并通过系统生成可执行的每日膳食计划;同时,他们也希望平台能够实时反馈饮食对体重、血压、血糖等健康指标的影响,从而实现动态调整。对于偏好多样化口味与文化背景的用户,平台需支持多语言与地区菜系的切换,并提供自定义食材禁忌与喜好设置;此外,用户对数据安全与隐私保护有较高要求,期望个人健康信息得到加密存储与严格访问控制。对于专业人士而言,他们需要更为精准的营养成分分析、饮食方案评估工具,并能够批量导入或导出患者档案;同时,系统应支持多用户协同编辑与权限管理,以满足团队合作需求。综上所述,用户需求侧重于个性化、实时性、可视化与安全性,并在不同人群中呈现多层次的功能深度与交互复杂度。
功能需求方面,平台首先需提供完善的用户身份认证与权限管理模块,以支持单点登录、角色分配与数据访问控制;随后,用户资料管理模块应允许用户录入基本信息、过敏史、体重目标及生活方式等,并支持动态更新。菜谱检索与筛选功能必须实现多维度查询,包括关键词搜索、食材过滤、营养成分区间以及烹饪时长限制;在此基础上,推荐引擎将结合协同过滤与内容分析技术,生成个性化菜谱列表,并通过可解释性机制展示推荐依据。膳食规划模块需支持一键生成每日或每周膳食计划,并提供日历视图与提醒功能,以便用户跟踪执行;同时,系统应允许用户根据实际情况调整份量或替换食材,并即时更新营养分析结果。健康监测集成模块将接入体重、血压、血糖等传感器或手动录入数据,并利用时间序列模型预测饮食调整对指标的影响,生成可视化趋势图与风险预警。反馈与学习机制应收集用户对推荐满意度、菜谱完成率等指标,并将其纳入模型训练循环,实现持续优化。最后,系统性能与可扩展性需求包括微服务架构、容器化部署、负载均衡、缓存策略与监控告警,以确保在高并发访问下保持低延迟与高可用。上述功能需求共同构成了平台的核心价值链,满足不同层级用户的个性化与专业化需求。
七、可行性分析
经济可行性方面,平台的成本结构主要包括数据采集与清洗、算法研发、服务器与存储资源、运维与安全合规等支出。初期可利用公开菜谱数据库与营养成分表进行数据获取,降低许可费用;对用户生成内容进行增量采集时,可采用社区合作模式或众包方式,进一步压缩成本。算法研发方面,借助SpringBoot框架与开源深度学习库(如PyTorch、TensorFlow)可减少软件授权支出;模型训练可在云端GPU实例上完成,按需付费模式降低资本支出。服务器与存储资源方面,采用容器化与微服务架构,可实现资源弹性伸缩,按流量计费的云平台(如AWS、阿里云)可进一步降低运维成本。营销与用户获取成本可通过社交媒体、健康类App合作推广,实现低成本精准投放。预计在项目启动后12个月内,通过订阅服务、增值功能(如专业营养师咨询)与广告合作,可实现盈亏平衡;长期来看,随着用户基数扩大与算法精度提升,平台具备可观的规模经济与利润空间。
社会可行性方面,平台满足了公众对健康饮食管理的迫切需求。随着慢性疾病发病率上升与健康意识提升,人们对个性化营养方案的需求日益增长;本平台通过提供科学、可视化的饮食规划与健康监测,能够帮助用户降低肥胖、糖尿病等风险,具有明显的公共卫生价值。与此同时,平台遵循数据隐私法规(如GDPR、个人信息保护法),采用匿名化与加密存储技术,保障用户信息安全,提升社会信任度。平台亦可与医院、社区健康中心合作,提供远程营养干预服务,扩大社会影响力。对低收入人群而言,可通过开放API与第三方健康管理系统整合,降低使用门槛;对高端用户,则提供个性化咨询与专业营养师支持,满足差异化需求。总体而言,平台具备广泛的社会接受度与推广潜力。
技术可行性方面,平台所依赖的核心技术已在学术与工业界得到充分验证。SpringBoot微服务框架提供了成熟的开发与部署生态,可实现快速迭代;Docker容器化与Kubernetes集群管理保证了系统的弹性伸缩与高可用;Redis缓存、Kafka消息队列等组件可有效降低延迟与提升吞吐量。推荐算法方面,协同过滤、因子分解机、注意力机制以及强化学习框架均已在公开数据集上取得优异效果,可直接迁移至本平台;对多模态特征融合的研究已在菜谱图像与文本处理领域取得进展,模型可通过迁移学习快速适配。健康监测模块可接入常见的可穿戴设备与健康APP接口,实现数据同步;时间序列预测模型(如LSTM、Prophet)已被广泛用于生理指标预测,可直接应用。数据治理方面,采用统一的数据仓库与元数据管理,结合差分隐私技术实现安全合规;同时,通过标准化的API设计保证系统间的互操作性。综上所述,技术实现路径清晰、可行性高,能够满足平台在性能、可扩展性与安全性方面的多重要求。
八、功能分析
系统功能模块设计围绕用户需求与技术可行性展开,逻辑分层并相互衔接。首先,用户管理模块负责身份认证、角色授权与个人信息维护;该模块实现单点登录、密码加盐存储、多因素验证,并支持用户基本资料、过敏史、体重目标及生活方式的录入与编辑。其次,数据采集与预处理模块负责菜谱数据的爬取、清洗与标准化;该模块将公开菜谱数据库、食品成分表与用户上传图片同步至统一的数据仓库,并通过文本分词、图像特征提取以及营养成分映射完成多模态特征构建。第三,推荐引擎模块是系统核心,采用协同过滤与内容分析相结合的混合模型;该模块先利用因子分解机将用户与菜谱映射至低维空间,再通过注意力机制突出用户偏好与菜品特色的关联,并在此基础上加入强化学习策略实现动态推荐。第四,膳食规划模块根据推荐结果生成每日或每周膳食计划;该模块支持日历视图、份量调整、食材替换与营养分析,并通过提醒功能促进用户执行。第五,健康监测与反馈模块集成体重、血压、血糖等生理指标的实时上传;该模块利用时间序列预测模型评估饮食调整对指标的影响,并在可视化仪表盘中展示趋势与风险预警。第六,数据分析与报告模块为专业用户提供营养师咨询与团队协作工具;该模块支持批量导入患者档案、生成营养评估报告、跟踪干预效果,并提供多维度统计图表。第七,接口与集成模块负责对外API的开放与第三方系统的对接;该模块实现OAuth 2.0授权、RESTful服务以及WebSocket实时推送,支持与可穿戴设备、健康管理平台及医院信息系统的互操作。最后,安全与合规模块贯穿整个系统,采用加密存储、差分隐私技术、访问日志审计与合规检查;该模块确保用户数据在采集、传输与存储过程中的机密性与完整性,并满足GDPR及个人信息保护法的要求。通过上述功能模块的协同工作,系统能够实现从数据获取到个性化推荐、健康监测与专业干预的闭环服务,满足多层次用户需求并具备可扩展、可维护的技术架构。
九、数据库设计
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
users.id | 用户唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 | 用于关联其他表的外键。
users.username | 登录用户名 | 50 | VARCHAR(50) NOT NULL UNIQUE | |
users.password_hash | 密码哈希值 | 255 | VARCHAR(255) NOT NULL | |
users.email | 邮箱地址 | 100 | VARCHAR(100) NOT NULL UNIQUE | |
users.created_at | 创建时间戳 | 19 | DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP | |
food_items.id | 食材唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
food_items.name_cn | 中文名称 | 100 | VARCHAR(100) NOT NULL | |
food_items.name_en | 英文名称 | 100 | VARCHAR(100) NULL | |
food_items.category_id | 食材类别标识(如蔬菜、肉类) | 11 | INT(11) UNSIGNED NOT NULL | 外键 references categories.id |
food_items.image_url | 图片链接地址 | 255 | VARCHAR(255) NULL | |
food_items.created_at | 创建时间戳 | 19 | DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP | |
nutrition_info.id | 营养成分唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键, 外键 references food_items.id
nutrition_info.calories | 热量(kcal) | 5 | INT(5) NOT NULL | 关联食材表外键 |
nutrition_info.protein_g | 蛋白质(克) | 5 | DECIMAL(5,2) NOT NULL | 关联食材表外键 |
nutrition_info.fat_g | 脂肪(克) | 5 | DECIMAL(5,2) NOT NULL | 关联食材表外键 |
nutrition_info.carbohydrate_g | 碳水化合物(克) | 5 | DECIMAL(5,2) NOT NULL | 关联食材表外键 |
categories.id | 食材类别唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
categories.name_cn | 中文类别名称 | 50 | VARCHAR(50) NOT NULL UNIQUE | |
recipes.id | 菜谱唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
recipes.title_cn | 中文标题 | 200 | VARCHAR(200) NOT NULL | |
recipes.title_en | 英文标题 | 200 | VARCHAR(200) NULL | |
recipes.description_cn | 中文描述(可选) | 5000 | TEXT NULL | |
recipes.description_en | 英文描述(可选) | 5000 | TEXT NULL | |
recipes.prep_time_min | 准备时间(分钟) | 5 | INT(5) NOT NULL DEFAULT 0 | |
recipes.cook_time_min | 烹饪时间(分钟) | 5 | INT(5) NOT NULL DEFAULT 0 | |
recipes.servings | 分量(份) | 3 | INT(3) NOT NULL DEFAULT 1 | |
recipes.created_at | 创建时间戳 | 19 | DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP | |
recipe_ingredients.id | 菜谱食材关联唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
recipe_ingredients.recipe_id | 菜谱标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES recipes.id ON DELETE CASCADE |
recipe_ingredients.food_item_id | 食材标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES food_items.id ON DELETE CASCADE |
recipe_ingredients.quantity_g | 份量(克) | 7 | INT(7) NOT NULL DEFAULT 0 | 关联食材表外键 |
recipe_ingredients.unit | 单位(如g、ml) | 10 | VARCHAR(10) NOT NULL DEFAULT 'g' | |
user_preferences.id | 用户偏好唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
user_preferences.user_id | 用户标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES users.id ON DELETE CASCADE |
user_preferences.preferred_cuisine_ids | 喜好菜系(逗号分隔) | 255 | VARCHAR(255) NULL | 关联 categories.id 列表 |
user_preferences.allergy_food_ids | 过敏食材(逗号分隔) | 255 | VARCHAR(255) NULL | 关联 food_items.id 列表 |
user_preferences.dietary_restrictions | 饮食限制(如低盐、无糖) | 255 | VARCHAR(255) NULL | |
user_health_data.id | 健康数据唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
user_health_data.user_id | 用户标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES users.id ON DELETE CASCADE |
user_health_data.record_date | 记录日期 | 10 | DATE NOT NULL DEFAULT CURRENT_DATE() | 关联用户表外键 |
user_health_data.weight_kg | 体重(公斤) | 5 | DECIMAL(5,2) NULL | 关联用户表外键 |
user_health_data.blood_pressure_systolic | 收缩压(mmHg) | 5 | INT(5) NULL | 关联用户表外键 |
user_health_data.blood_pressure_diastolic | 舒张压(mmHg) | 5 | INT(5) NULL | 关联用户表外键 |
user_health_data.blood_sugar_mmol_l | 血糖(mmol/L) | 5 | DECIMAL(5,2) NULL | 关联用户表外键 |
meal_plans.id | 饮食计划唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
meal_plans.user_id | 用户标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES users.id ON DELETE CASCADE |
meal_plans.plan_start_date | 计划开始日期 | 10 | DATE NOT NULL DEFAULT CURRENT_DATE() | 关联用户表外键 |
meal_plans.plan_end_date | 计划结束日期 | 10 | DATE NOT NULL DEFAULT CURRENT_DATE() + INTERVAL 7 DAY | 关联用户表外键 |
meal_plans.created_at | 创建时间戳 | 19 | DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP | |
meal_plan_items.id | 饮食计划项唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
meal_plan_items.meal_plan_id | 饮食计划标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES meal_plans.id ON DELETE CASCADE |
meal_plan_items.recipe_id | 菜谱标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES recipes.id ON DELETE CASCADE |
meal_plan_items.meal_time | 用餐时间(如早餐、午餐、晚餐) | 20 | VARCHAR(20) NOT NULL DEFAULT 'Lunch' | 关联 meals 表外键 |
meal_plan_items.servings | 分量(份) | 3 | INT(3) NOT NULL DEFAULT 1 | 关联菜谱表外键 |
recommendation_logs.id | 推荐日志唯一标识 | 11 | INT(11) UNSIGNED AUTO_INCREMENT NOT NULL | 主键 |
recommendation_logs.user_id | 用户标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES users.id ON DELETE CASCADE |
recommendation_logs.recipe_id | 推荐菜谱标识(外键) | 11 | INT(11) UNSIGNED NOT NULL REFERENCES recipes.id ON DELETE CASCADE |
recommendation_logs.recommendation_time | 推荐时间戳 | 19 | DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP | 关联用户表外键
recommendation_logs.feedback_score | 用户反馈评分(1-5) | 1 | TINYINT(1) NULL DEFAULT NULL | 关联用户表外键
recommendation_logs.created_at | 创建时间戳 | 19 | DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP | |
(注:所有外键均采用 ON DELETE CASCADE 策略,保证数据一致性。每个表均满足第三范式,避免冗余。)
十、建表语句
CREATE DATABASE IF NOT EXISTS recipe_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE recipe_platform;
-- 1. 食材类别表
CREATE TABLE categories (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name_cn VARCHAR(50) NOT NULL UNIQUE,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. 用户表
CREATE TABLE users (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 3. 食材表
CREATE TABLE food_items (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name_cn VARCHAR(100) NOT NULL,
name_en VARCHAR(100),
category_id INT(11) UNSIGNED NOT NULL,
image_url VARCHAR(255),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_food_category FOREIGN KEY (category_id)
REFERENCES categories(id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_food_category ON food_items(category_id);
-- 4. 食材营养信息表
CREATE TABLE nutrition_info (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
food_item_id INT(11) UNSIGNED NOT NULL,
calories INT(5) NOT NULL,
protein_g DECIMAL(5,2) NOT NULL,
fat_g DECIMAL(5,2) NOT NULL,
carbohydrate_g DECIMAL(5,2) NOT NULL,
CONSTRAINT fk_nutrition_food FOREIGN KEY (food_item_id)
REFERENCES food_items(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_nutrition_food ON nutrition_info(food_item_id);
-- 5. 菜谱表
CREATE TABLE recipes (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title_cn VARCHAR(200) NOT NULL,
title_en VARCHAR(200),
description_cn TEXT,
description_en TEXT,
prep_time_min INT(5) NOT NULL DEFAULT 0,
cook_time_min INT(5) NOT NULL DEFAULT 0,
servings INT(3) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 6. 菜谱食材关联表
CREATE TABLE recipe_ingredients (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
recipe_id INT(11) UNSIGNED NOT NULL,
food_item_id INT(11) UNSIGNED NOT NULL,
quantity_g INT(7) NOT NULL DEFAULT 0,
unit VARCHAR(10) NOT NULL DEFAULT 'g',
CONSTRAINT fk_ri_recipe FOREIGN KEY (recipe_id)
REFERENCES recipes(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_ri_food FOREIGN KEY (food_item_id)
REFERENCES food_items(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_ri_recipe ON recipe_ingredients(recipe_id);
CREATE INDEX idx_ri_food ON recipe_ingredients(food_item_id);
-- 7. 用户偏好表
CREATE TABLE user_preferences (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) UNSIGNED NOT NULL,
preferred_cuisine_ids VARCHAR(255),
allergy_food_ids VARCHAR(255),
dietary_restrictions VARCHAR(255),
CONSTRAINT fk_up_user FOREIGN KEY (user_id)
REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_up_user ON user_preferences(user_id);
-- 8. 用户健康数据表
CREATE TABLE user_health_data (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) UNSIGNED NOT NULL,
record_date DATE NOT NULL DEFAULT CURRENT_DATE(),
weight_kg DECIMAL(5,2),
blood_pressure_systolic INT(5),
blood_pressure_diastolic INT(5),
blood_sugar_mmol_l DECIMAL(5,2),
CONSTRAINT fk_uhd_user FOREIGN KEY (user_id)
REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_uhd_user ON user_health_data(user_id);
CREATE INDEX idx_uhd_date ON user_health_data(record_date);
-- 9. 饮食计划表
CREATE TABLE meal_plans (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) UNSIGNED NOT NULL,
plan_start_date DATE NOT NULL DEFAULT CURRENT_DATE(),
plan_end_date DATE NOT NULL DEFAULT (CURRENT_DATE() + INTERVAL 7 DAY),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_mp_user FOREIGN KEY (user_id)
REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_mp_user ON meal_plans(user_id);
-- 10. 饮食计划项表
CREATE TABLE meal_plan_items (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
meal_plan_id INT(11) UNSIGNED NOT NULL,
recipe_id INT(11) UNSIGNED NOT NULL,
meal_time VARCHAR(20) NOT NULL DEFAULT 'Lunch',
servings INT(3) NOT NULL DEFAULT 1,
CONSTRAINT fk_mpi_mealplan FOREIGN KEY (meal_plan_id)
REFERENCES meal_plans(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_mpi_recipe FOREIGN KEY (recipe_id)
REFERENCES recipes(id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_mpi_mealplan ON meal_plan_items(meal_plan_id);
CREATE INDEX idx_mpi_recipe ON meal_plan_items(recipe_id);
-- 11. 推荐日志表
CREATE TABLE recommendation_logs (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) UNSIGNED NOT NULL,
recipe_id INT(11) UNSIGNED NOT NULL,
recommendation_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
feedback_score TINYINT(1),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_rl_user FOREIGN KEY (user_id)
REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_rl_recipe FOREIGN KEY (recipe_id)
REFERENCES recipes(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX idx_rl_user ON recommendation_logs(user_id);
CREATE INDEX idx_rl_recipe ON recommendation_logs(recipe_id);
CREATE INDEX idx_rl_time ON recommendation_logs(recommendation_time);
文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看下方👇🏻获取联系方式👇🏻