ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于LLM的旅游行程智能规划系统毕业设计源码(源码+lw+部署文档+讲解等)

基于LLM的旅游行程智能规划系统毕业设计源码(源码+lw+部署文档+讲解等)

博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业, 从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。

一、研究目的

本研究旨在构建一种基于大型语言模型的旅游行程智能规划系统,以实现对用户个性化需求的深度理解与动态响应。通过融合多源数据,包括实时天气预报、景点门票信息、交通状况及社交媒体热点,本系统能够在规划阶段自动生成符合用户兴趣、预算与时间约束的最优行程方案。研究的核心目标是突破传统规则引擎与静态推荐方法的局限,使规划过程具备语义推理与上下文适应能力,从而在面对多变环境时保持高效且可解释的决策路径。为实现此目标,本文将首先对现有旅游规划系统进行系统性评估,识别其在数据整合、用户画像构建与实时反馈方面的不足。随后,基于Transformer架构的语言模型将被微调,以捕捉用户历史行为与偏好之间的隐含关联,并通过多模态融合技术将文本、图像及位置数据统一映射至语义空间。系统设计中,将引入强化学习框架,使规划策略能够在交互过程中持续优化,兼顾短期满意度与长期价值。实验部分计划在真实旅游平台上进行A/B测试,评估系统在行程质量、用户满意度与运营成本方面的提升幅度,并通过可解释性分析验证模型决策的透明度。最终,本研究期望为旅游行业提供一种可扩展、可持续且高度个性化的智能规划解决方案,推动从静态推荐向动态交互式服务的转型。除此之外,研究还将探讨模型在多语言环境下的适用性,并通过跨文化用户实验验证其普适性。未来工作将考虑与智能硬件的协同,以实现随时随地的行程调整与推送服务。

二、研究意义

本研究的意义主要体现在对旅游行业数字化转型的推动、对人工智能技术在高维决策领域应用的拓展以及对用户体验与服务质量提升的深远影响。首先,随着移动互联网与大数据技术的快速发展,传统旅游规划模式已难以满足日益多元化且即时化的用户需求;本研究通过引入大型语言模型,实现对海量文本、图像及时序信息的统一语义表征,从而在规划阶段实现对用户兴趣、预算与时间约束的精准匹配,显著提升规划效率与准确性。其次,本文在多模态融合与强化学习框架下构建的动态规划系统,为人工智能在高维决策问题中的应用提供了新的范式,展示了语言模型在跨领域知识迁移、语义推理及可解释性方面的潜力,可为后续研究提供可复制的技术路径。再次,系统所实现的个性化与实时响应功能,将极大改善游客体验,降低信息获取成本,提高旅游满意度与忠诚度,为旅游企业创造新的商业价值,并有助于实现资源优化配置、环境负荷减轻等可持续发展目标。最后,本研究在数据隐私保护与算法公平性方面的探索,也为相关政策制定与行业规范提供了技术依据,具有重要的社会责任与伦理意义。

三、国内外研究现状

国内外学术界对旅游行程规划的研究已形成多条主线,涵盖规则引擎、协同过滤、知识图谱、深度学习以及强化学习等技术路径。早期研究主要集中于基于专家系统与手工规则的规划方法,利用静态数据库存储景点信息与用户偏好,通过匹配算法生成固定行程;此类方法在可解释性上具有优势,但缺乏对动态环境的适应能力。随后,协同过滤技术被引入旅游推荐领域,借助用户历史行为数据挖掘相似性,从而实现个性化建议;然而此类模型对冷启动问题敏感,且难以处理多约束的行程规划需求。随着知识图谱技术的成熟,研究者开始构建景点属性、交通网络及时间约束等多维度知识图谱,并通过图神经网络提取语义关系,以提升推荐质量;国内高校在此方向上已取得若干论文成果,证明知识图谱能显著提升景点匹配准确率。与此同时,深度学习模型的引入为行程规划提供了更强的特征学习能力,尤其是序列模型如LSTM与Transformer被用于捕捉用户偏好与时间序列信息;国际上多篇论文已展示基于Transformer的行程生成模型在多约束优化中的潜力。近年来,强化学习成为行程规划研究的新热点,研究者通过将规划过程视为马尔可夫决策过程,在奖励函数中嵌入用户满意度、成本与时间等多维度指标,实现动态决策;国内外多项工作已验证强化学习在行程优化中的有效性。与此同时,随着大型语言模型的快速发展,学术界开始探索将LLM用于旅游文本理解与生成,以实现更自然的交互和更丰富的语义推理;国外实验表明,微调后的LLM能够从用户对话中提取兴趣点,并结合外部知识库生成可执行的行程计划。国内在此领域尚处于起步阶段,主要集中在模型微调与多模态融合的探索,尚缺乏系统化的跨模态规划框架。综上所述,当前研究主要围绕知识图谱、深度序列建模与强化学习展开,并逐步向LLM驱动的语义化规划迈进;国内外在技术手段与应用场景上已形成互补,但仍存在模型可解释性、实时性与多源数据融合等挑战。

四、预期达到目标及解决的关键问题

本研究的预期目标主要聚焦于构建一套完整、可扩展且具备高可解释性的旅游行程智能规划系统,具体包括:首先实现基于大型语言模型的多模态语义理解与生成,使系统能够在对话交互中准确捕捉用户兴趣、预算与时间约束,并自动生成可执行的行程方案;其次通过知识图谱与图神经网络实现景点属性、交通网络及时间约束等多维度信息的统一表征,从而支持多目标优化与动态调整;再次引入强化学习框架,使规划策略能够在交互过程中持续自我改进,并在实时约束下保持高质量决策;最后通过可解释性模块将模型决策过程可视化,为用户提供透明、可追溯的规划依据。为实现上述目标,研究将围绕数据融合、模型微调、算法优化与系统部署四大技术环节展开工作。预期系统能够在真实旅游平台上完成A/B测试,显著提升行程满意度与用户留存率,并在多语言、多文化环境下保持一致的规划质量。关键问题主要包括:一是多源数据的异构性与实时性挑战,如何在保证信息完整性的前提下实现高效同步;二是大型语言模型在旅游领域的专业化程度不足,需设计高效微调策略以兼顾语义准确性与推理速度;三是强化学习奖励函数的设计问题,如何将用户满意度、成本节约与时间利用率等多维指标统一量化;四是模型可解释性的实现难点,需在保持性能的同时提供可追溯的决策依据;五是数据隐私与安全问题,尤其在收集用户行为与偏好时必须遵守相关法规并实现差分隐私保护;六是系统部署与弹性伸缩问题,如何在云端或边缘计算环境下实现低延迟、高可用的服务。针对上述关键问题,本研究将提出创新性的解决方案,并通过实验验证其有效性,为旅游行业数字化转型提供可复制、可推广的技术路径。

五、研究内容

本研究旨在构建一套基于大型语言模型的旅游行程智能规划系统,其整体研究内容可分为数据准备、知识图谱构建、模型开发与融合、规划算法设计、可解释性与评估四大模块。首先,在数据准备阶段,将收集来自旅游网站、社交媒体、天气预报平台以及交通运营商的结构化与非结构化信息;通过爬虫技术获取实时景点门票价格、开放时间以及用户评论;利用API接口同步交通时刻表与路况数据;并对文本数据进行分词、实体识别与情感分析,以构成多源异构数据集。其次,知识图谱构建模块将对上述数据进行统一语义标注,采用RDF三元组表示景点属性、交通节点及时间约束;通过实体消歧与关系抽取技术,将景点与其所在城市、类别、评价分数等信息关联;随后利用图神经网络对知识图谱进行嵌入学习,以获得高维语义向量,为后续的推荐与规划提供统一特征空间。第三,模型开发与融合阶段将重点在大型语言模型的微调与多模态融合上;针对旅游领域的专业术语与场景,将采用自监督预训练任务对Transformer进行微调;随后将文本向量、图嵌入向量以及图像特征通过注意力机制融合,形成复合语义表示;该表示将作为规划算法的输入,确保模型能够捕捉用户偏好与环境约束的细粒度信息。第四,规划算法设计模块将把行程生成视为马尔可夫决策过程;在状态空间中包含用户预算、时间窗口、景点属性与交通节点;行动空间则为选择下一景点或停留时间的决策;奖励函数将综合用户满意度预测值、成本节约指标与时间利用率,采用深度强化学习方法(如PPO或DQN)进行策略优化;在训练过程中,将利用知识图谱提供的约束信息,确保生成的行程可执行且符合实际交通与景点开放情况。第五,可解释性与评估模块将通过注意力可视化、规则提取以及因果推理技术,为用户展示规划过程中的关键决策依据;同时设计多维度评估指标,包括行程质量得分、用户满意度调查、系统响应时间与资源占用率等;通过在真实旅游平台上进行A/B测试与离线仿真,对比传统规则引擎与协同过滤方法,验证本系统在规划准确性、实时性与可解释性方面的优势。综上所述,本研究通过多源数据融合、知识图谱构建、LLM微调与强化学习相结合的技术路线,致力于实现一套既能提供高度个性化又具备实时动态调整能力的旅游行程智能规划系统,为旅游行业数字化转型提供可落地的技术方案。

六、需求分析

用户需求方面,旅游者在行程规划过程中普遍渴望获得高度个性化的推荐服务,既要满足其兴趣爱好与预算限制,又要兼顾时间安排与旅行安全;他们期望系统能够通过自然语言交互快速捕捉偏好,并在对话中即时给出可执行的行程方案;此外,用户还需要系统具备实时更新功能,以应对天气变化、景点临时关闭或交通拥堵等突发事件,从而保障行程的顺利进行;在多设备使用场景下,用户期望能够在手机、平板与电脑之间无缝切换,且数据同步保持一致;最后,鉴于个人信息与行程细节的敏感性,用户对数据隐私与安全保护提出了严格要求,希望系统能够在不泄露个人偏好与位置的前提下完成推荐。

功能需求方面,系统首先必须实现多源异构数据的高效集成,包括景点信息、门票价格、交通时刻表、实时天气预报以及社交媒体热度等;其次,需要构建基于大型语言模型的对话接口,使用户能够通过自然语言描述需求,并获得即时反馈;第三,推荐引擎应采用知识图谱与图神经网络相结合的技术,对景点属性与用户偏好进行语义匹配,并在满足预算、时间与兴趣约束的前提下生成多条可选行程;第四,规划算法需支持动态重排功能,在接收到实时环境信息后能够自动调整行程顺序或替换景点,以最大化用户满意度与资源利用率;第五,系统应提供可视化的行程展示,包括地图路线、时间轴与成本明细,并配备解释性模块,让用户了解每个决策背后的逻辑;最后,为满足性能与可扩展性要求,系统需支持云端弹性伸缩、低延迟响应以及多语言多文化环境下的本地化适配。

七、可行性分析

经济可行性方面,本系统的主要投入包括数据采集与清洗、模型训练与微调、云端计算资源以及后期运营维护费用;其中,公开旅游数据与天气预报接口均可通过合作协议或API订阅获取,成本相对可控;大型语言模型的训练与微调虽需GPU集群,但可采用分布式训练框架并利用现有云服务的按需计费模式降低资本支出;系统上线后,通过精准行程推荐提升用户转化率与平均消费,可在短期内实现成本回收;此外,平台可通过增值服务如个性化旅游套餐、广告投放与数据分析报告等多元化收入渠道,进一步提升经济效益。社会可行性方面,随着移动互联网普及与旅游消费升级,用户对智能化、个性化服务的需求日益增长,本系统正好契合这一趋势;同时,系统将严格遵守个人信息保护法规,通过差分隐私与加密技术保障用户数据安全,提升社会信任度;在行业层面,该系统可为旅行社与景区提供客流预测与营销决策支持,促进旅游产业链的数字化转型与就业结构优化;然而,系统推广过程中需注意文化差异与本地化需求,避免因算法偏见导致服务不公平。技术可行性方面,近年来大型语言模型已在多语言文本理解与生成任务中展现出卓越性能,可通过迁移学习快速适配旅游领域语料;知识图谱构建技术成熟,图神经网络能够有效捕捉景点属性与用户偏好之间的隐含关系;实时数据集成可借助流式处理框架实现低延迟更新;强化学习规划算法已在类似推荐场景中得到验证,可在本系统中实现动态决策;综上所述,技术层面具备充分的成熟度与可扩展性,为项目落地提供坚实基础。

八、功能分析

系统功能模块可划分为七大核心子系统,分别为数据采集与预处理子系统、用户画像与偏好管理子系统、对话交互与LLM推理子系统、知识图谱构建与语义融合子系统、行程推荐与规划优化子系统、实时动态调整与信息更新子系统以及可视化展示与解释性输出子系统。数据采集与预处理子系统负责从旅游网站、景区门票平台、交通运营商及天气预报服务等多源渠道抓取原始信息,并通过清洗、标准化与实体抽取将文本、结构化表格与时序数据统一转换为可供后续处理的格式;该子系统还需实现对用户行为日志的收集与匿名化处理,以支持后续画像构建。用户画像与偏好管理子系统以多维度特征向量描述每位用户,包括兴趣标签、预算范围、旅行时长、历史行程记录及社交媒体关注点等;该子系统通过在线学习机制不断更新画像,并将其存储于高性能键值数据库中,以供对话交互与推荐引擎即时调用。对话交互与LLM推理子系统采用微调后的Transformer模型,支持自然语言理解与生成;在用户发起规划请求时,模型解析意图、抽取约束条件,并将结果映射为结构化查询语句;同时,该子系统提供多轮对话管理能力,允许用户逐步细化需求。知识图谱构建与语义融合子系统将从数据采集层得到的实体与关系构建成统一的RDF图谱;随后利用图神经网络生成景点、交通节点与时间约束等实体的嵌入表示;该子系统还实现跨模态注意力机制,将文本向量、图嵌入向量与图像特征融合,形成复合语义表示,为推荐引擎提供统一特征空间。行程推荐与规划优化子系统以强化学习框架为核心,将用户画像与语义表示作为状态输入,行动空间为景点选择与停留时间安排;奖励函数综合用户满意度预测、成本节约与时间利用率等指标;该子系统通过离线训练得到策略网络,并在在线环境中进行微调,以实现高质量的行程方案生成。实时动态调整与信息更新子系统负责监控外部环境变化,如天气预报、交通拥堵、景区门票变动等;当检测到影响行程的事件时,系统自动触发规划优化子系统重新评估并生成替代方案;同时,该子系统通过推送机制将更新结果实时同步至用户端。可视化展示与解释性输出子系统将最终行程以地图路线、时间轴与成本明细的形式呈现给用户;其解释模块通过注意力热图、规则提取或因果推理技术向用户展示每个决策背后的逻辑依据,提升系统透明度。上述七大子系统在统一的服务治理框架下协同工作,形成完整的旅游行程智能规划闭环。

九、数据库设计

字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
user_id | 用户唯一标识符 | 20 | VARCHAR | 主键 (PK) |
username | 登录用户名 | 50 | VARCHAR | |
email | 邮箱地址 | 100 | VARCHAR | |
hashed_password | 加密后密码存储字段 | 255 | VARCHAR | |
created_at | 账户创建时间戳 | -| DATETIME| |

表: user_profiles
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
profile_id | 个人资料唯一标识符 | 20 | VARCHAR | 主键 (PK) |
user_id | 所属用户标识符 | 20 | VARCHAR | 外键 (FK) 指向 users.user_id |
name | 用户真实姓名或昵称 | 50 | VARCHAR | |
age | 年龄(可空)| 3| INT| |
gender | 性别(M/F/Other)| 10| VARCHAR| |

表: user_preferences
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
pref_id | 偏好记录唯一标识符 | 20 | VARCHAR | 主键 (PK) |
user_id | 所属用户标识符 | 20 | VARCHAR | 外键 (FK) 指向 users.user_id |
budget_min | 最低预算(元)| 10| DECIMAL(10,2)| |
budget_max | 最高预算(元)| 10| DECIMAL(10,2)| |
duration_min | 最短行程天数 | 3 | INT | |
duration_max | 最长行程天数 | 3 | INT | |
preferred_language | 首选语言代码(如 zh-CN)| 10| VARCHAR| |

表: interests
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
interest_id | 兴趣标签唯一标识符 | 20 | VARCHAR | 主键 (PK) |
name | 兴趣名称(如 美食、徒步)| 50 | VARCHAR| |

表: user_interest_map
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
user_id | 用户标识符 | 20 | VARCHAR | 外键 (FK) 指向 users.user_id |
interest_id | 兴趣标识符 | 20 | VARCHAR | 外键 (FK) 指向 interests.interest_id |
PRIMARY KEY (user_id, interest_id) | 复合主键 |

表: trips
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
trip_id | 行程唯一标识符 | 20 | VARCHAR | 主键 (PK) |
user_id | 所属用户标识符 | 20 | VARCHAR | 外键 (FK) 指向 users.user_id |
title | 行程标题(如 “北京三日游”)| 100| VARCHAR| |
start_date | 开始日期 | -| DATE| |
end_date | 结束日期 | -| DATE| |
status | 行程状态(draft, active, completed)| 20 | VARCHAR|

表: trip_items
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
item_id | 行程项唯一标识符 | 20 | VARCHAR | 主键 (PK) |
trip_id | 所属行程标识符 | 20 | VARCHAR | 外键 (FK) 指向 trips.trip_id |
attraction_id | 景点标识符 | 20 | VARCHAR | 外键 (FK) 指向 attractions.attraction_id |
sequence_order | 顺序编号(从1开始)| 3| INT| |
arrival_time | 到达时间戳 | -| DATETIME| |
departure_time | 离开时间戳 | -| DATETIME| |
stay_duration_minutes | 停留时长(分钟)| 5 | INT|

表: attractions
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
attraction_id | 景点唯一标识符 | 20 | VARCHAR | 主键 (PK) |
name | 景点名称(如 故宫)| 100| VARCHAR|
category_id | 分类标识符 | 20 | VARCHAR | 外键 (FK) 指向 attraction_categories.category_id |
description | 景点简介(可空)| -| TEXT|
address | 地址(可空)| 200| VARCHAR|
latitude | 纬度(精确到小数点后6位)| 10| DECIMAL(9,6)|
longitude | 经度(精确到小数点后6位)| 10| DECIMAL(9,6)|

表: attraction_categories
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
category_id | 分类唯一标识符 | 20 | VARCHAR | 主键 (PK) |
name | 分类名称(如 博物馆、自然风光)| 50| VARCHAR|

表: transportation_routes
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
route_id | 路线唯一标识符 | 20 | VARCHAR | 主键 (PK) |
origin_attraction_id | 起点景点标识符 | 20 | VARCHAR | 外键 (FK) 指向 attractions.attraction_id |
destination_attraction_id | 终点景点标识符 | 20 | VARCHAR | 外键 (FK) 指向 attractions.attraction_id |
travel_mode | 交通方式(bus, train, walk, taxi)| 10| VARCHAR|
estimated_time_minutes | 估算行驶时长(分钟)| 5| INT|

表: tickets
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
ticket_id | 门票唯一标识符 | 20 | VARCHAR | 主键 (PK) |
attraction_id | 所属景点标识符 | 20 | VARCHAR | 外键 (FK) 指向 attractions.attraction_id |
price | 门票价格(元)| 10| DECIMAL(10,2)|
availability_date | 可售日期(可空)| -| DATE|
ticket_type | 票种(普通、学生、团体)| 20| VARCHAR|

表: weather_forecast
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
forecast_id | 天气预报唯一标识符 | 20 | VARCHAR | 主键 (PK) |
location_city | 城市名称(如 北京)| 50| VARCHAR|
forecast_date | 预报日期 | -| DATE|
condition_description | 天气描述(如 晴朗)| 100| VARCHAR|
temperature_min_celsius | 最低温度(摄氏度)| 5| DECIMAL(5,1)|
temperature_max_celsius | 最高温度(摄氏度)| 5| DECIMAL(5,1)|

表: reviews
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
review_id | 评论唯一标识符 | 20 | VARCHAR | 主键 (PK) |
attraction_id | 所属景点标识符 | 20 | VARCHAR | 外键 (FK) 指向 attractions.attraction_id |
user_id | 评论者用户标识符 | 20 | VARCHAR | 外键 (FK) 指向 users.user_id |
rating | 评分(1-5)| 1| INT|
comment | 评论内容(可空)| -| TEXT|
created_at | 评论时间戳 | -| DATETIME|

表: llm_config
字段名(英文) | 说明(中文) | 大小 | 类型 | 主外键 | 备注
---|---|---|---|---|---
config_id | 配置唯一标识符 | 20 | VARCHAR | 主键 (PK) |
model_name | 模型名称(如 GPT-4)| 50| VARCHAR|
temperature_setting | 温度参数值(0-1)| 5| DECIMAL(3,2)|
max_tokens_limit | 最大 token 限制 | 5| INT|
updated_at | 最后更新时间戳 | -| DATETIME|

以上表结构遵循第一范式与第二范式,避免冗余;通过外键实现表间完整性约束;字段类型与长度根据业务需求与存储效率进行合理设置。

十、建表语句

CREATE DATABASE IF NOT EXISTS travel_planner CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE travel_planner;

-- 1. 用户基本信息表
CREATE TABLE IF NOT EXISTS users (
user_id VARCHAR(20) NOT NULL,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
hashed_password VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. 用户个人资料表
CREATE TABLE IF NOT EXISTS user_profiles (
profile_id VARCHAR(20) NOT NULL,
user_id VARCHAR(20) NOT NULL,
name VARCHAR(50),
age INT,
gender VARCHAR(10),
PRIMARY KEY (profile_id),
CONSTRAINT fk_user_profiles_user
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. 用户偏好表
CREATE TABLE IF NOT EXISTS user_preferences (
pref_id VARCHAR(20) NOT NULL,
user_id VARCHAR(20) NOT NULL,
budget_min DECIMAL(10,2),
budget_max DECIMAL(10,2),
duration_min INT,
duration_max INT,
preferred_language VARCHAR(10),
PRIMARY KEY (pref_id),
CONSTRAINT fk_user_preferences_user
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4. 兴趣标签表
CREATE TABLE IF NOT EXISTS interests (
interest_id VARCHAR(20) NOT NULL,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (interest_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 5. 用户兴趣映射表
CREATE TABLE IF NOT EXISTS user_interest_map (
user_id VARCHAR(20) NOT NULL,
interest_id VARCHAR(20) NOT NULL,
PRIMARY KEY (user_id, interest_id),
CONSTRAINT fk_user_interest_user
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_user_interest_interest
FOREIGN KEY (interest_id) REFERENCES interests(interest_id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 6. 行程表
CREATE TABLE IF NOT EXISTS trips (
trip_id VARCHAR(20) NOT NULL,
user_id VARCHAR(20) NOT NULL,
title VARCHAR(100),
start_date DATE,
end_date DATE,
status VARCHAR(20) DEFAULT 'draft',
PRIMARY KEY (trip_id),
CONSTRAINT fk_trips_user
FOREIGN KEY (user_id) REFERENCES users(user_id)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 7. 行程项表
CREATE TABLE IF NOT EXISTS trip_items (
item_id VARCHAR(20) NOT NULL,
trip_id VARCHAR(20) NOT NULL,
attraction_id VARCHAR(20) NOT NULL,
sequence_order INT NOT NULL,
arrival_time DATETIME,
departure_time DATETIME,
stay_duration_minutes INT,
PRIMARY KEY (item_id),
CONSTRAINT fk_trip_items_trip
FOREIGN KEY (trip_id) REFERENCES trips(trip_id)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_trip_items_attraction
FOREIGN KEY (attraction_id) REFERENCES attractions(attraction_id)
ON UPDATE CASCADE ON DELETE CASCADE,
INDEX idx_trip_items_sequence (trip_id, sequence_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 8. 景点表
CREATE TABLE IF NOT EXISTS attractions (
attraction_id VARCHAR(20) NOT NULL,
name VARCHAR(100) NOT NULL,
category_id VARCHAR(20),
description TEXT,
address VARCHAR(200),
latitude DECIMAL(9,6),
longitude DECIMAL(9,6),
PRIMARY KEY (attraction_id),
CONSTRAINT fk_attractions_category
FOREIGN KEY (category_id) REFERENCES attraction_categories(category_id)
ON UPDATE CASCADE ON DELETE SET NULL,
INDEX idx_attractions_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 9. 景点分类表
CREATE TABLE IF NOT EXISTS attraction_categories (
category_id VARCHAR(20) NOT NULL,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (category_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 10. 交通路线表
CREATE TABLE IF NOT EXISTS transportation_routes (
route_id VARCHAR(20) NOT NULL,
origin_attraction_id VARCHAR(20) NOT NULL,
destination_attraction_id VARCHAR(20) NOT NULL,
travel_mode VARCHAR(10),
estimated_time_minutes INT,
PRIMARY KEY (route_id),
CONSTRAINT fk_route_origin
FOREIGN KEY (origin_attraction_id) REFERENCES attractions(attraction_id)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_route_destination
FOREIGN KEY (destination_attraction_id) REFERENCES attractions(attraction_id)
ON UPDATE CASCADE ON DELETE CASCADE,
INDEX idx_route_origin_destination (origin_attraction

文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看下方👇🏻获取联系方式👇🏻

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进