数据库结构与初始化
发布于 2025-12-31
3.3 数据库结构与初始化
Section titled “3.3 数据库结构与初始化”- 了解数据库的表结构
- 掌握SQL建表语句
- 掌握SQL插入数据
一、数据库定义
Section titled “一、数据库定义”SQL 脚本,创建票务和天气数据库表。定义数据结构,确保 MCP 服务器能查询存储的数据。
项目中的定位:数据基础,存储天气和票务信息。
核心功能:创建表、设置唯一键和注释。
数据库概述:
-
数据库名称:travel_rag
-
字符集:utf8mb4(支持中文等复杂字符)
-
校对规则:utf8mb4_unicode_ci(大小写不敏感,适合多语言)
-
作用:存储票务数据(火车票、机票、演唱会票),供 mcp_ticket_server.py 查询,支持 ticket_server.py 的票务查询功能。存储天气数据,供mcp_weather_server.py查询,支持weather_server.py天气查询功能。

代码路径:SmartVoyage/sql
DROP DATABASE IF EXISTS travel_rag;CREATE DATABASE travel_rag CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE travel_rag;三、train_tickets(火车票表)
Section titled “三、train_tickets(火车票表)”作用:存储火车票信息,记录出发地、目的地、时间、车次等。
CREATE TABLE train_tickets ( id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,自增,唯一标识每条记录 departure_city VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 出发城市(如“北京”) arrival_city VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 到达城市(如“上海”) departure_time DATETIME NOT NULL, -- 出发时间(如“2025-08-12 07:00:00”) arrival_time DATETIME NOT NULL, -- 到达时间(如“2025-08-12 11:30:00”) train_number VARCHAR(20) NOT NULL, -- 火车车次(如“G1001”) seat_type VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 座位类型(如“二等座”) total_seats INT NOT NULL, -- 总座位数(如 1000) remaining_seats INT NOT NULL, -- 剩余座位数(如 50) price DECIMAL(10, 2) NOT NULL, -- 票价(如 553.50) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间,自动记录插入时间 UNIQUE KEY unique_train (departure_time, train_number) -- 唯一约束,确保同一时间和车次不重复);四、flight_tickets(机票表)
Section titled “四、flight_tickets(机票表)”作用:存储机票信息,记录航班、舱位、时间等。
CREATE TABLE flight_tickets ( id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,自增,唯一标识每条记录 departure_city VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 出发城市(如“北京”) arrival_city VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 到达城市(如“上海”) departure_time DATETIME NOT NULL, -- 出发时间(如“2025-08-12 08:00:00”) arrival_time DATETIME NOT NULL, -- 到达时间(如“2025-08-12 10:30:00”) flight_number VARCHAR(20) NOT NULL, -- 航班号(如“CA1234”) cabin_type VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 舱位类型(如“经济舱”) total_seats INT NOT NULL, -- 总座位数(如 200) remaining_seats INT NOT NULL, -- 剩余座位数(如 10) price DECIMAL(10, 2) NOT NULL, -- 票价(如 1200.00) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间,自动记录插入时间 UNIQUE KEY unique_flight (departure_time, flight_number) -- 唯一约束,确保同一时间和航班号不重复);五、concert_tickets(演唱会票表)
Section titled “五、concert_tickets(演唱会票表)”作用:存储演唱会票信息,记录艺人、场地、时间等。
CREATE TABLE concert_tickets ( id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,自增,唯一标识每条记录 artist VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 艺人名称(如“周杰伦”) city VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 举办城市(如“上海”) venue VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 场馆(如“上海体育场”) start_time DATETIME NOT NULL, -- 开始时间(如“2025-08-12 19:00:00”) end_time DATETIME NOT NULL, -- 结束时间(如“2025-08-12 22:00:00”) ticket_type VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, -- 票类型(如“VIP”) total_seats INT NOT NULL, -- 总座位数(如 5000) remaining_seats INT NOT NULL, -- 剩余座位数(如 100) price DECIMAL(10, 2) NOT NULL, -- 票价(如 880.00) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间,自动记录插入时间 UNIQUE KEY unique_concert (start_time, artist, ticket_type) -- 唯一约束,确保同一时间、艺人和票类型不重复);六、weather_data(天气表)
Section titled “六、weather_data(天气表)”作用:存储城市天气信息,城市名称、最高温度、最低温度等。 https://dev.qweather.com/docs/api/weather/weather-daily-forecast/
DROP TABLE IF EXISTS weather_data;CREATE TABLE IF NOT EXISTS weather_data ( id INT AUTO_INCREMENT PRIMARY KEY, city VARCHAR(50) NOT NULL COMMENT '城市名称', fx_date DATE NOT NULL COMMENT '预报日期', sunrise TIME COMMENT '日出时间', sunset TIME COMMENT '日落时间', moonrise TIME COMMENT '月升时间', moonset TIME COMMENT '月落时间', moon_phase VARCHAR(20) COMMENT '月相名称', moon_phase_icon VARCHAR(10) COMMENT '月相图标代码', temp_max INT COMMENT '最高温度', temp_min INT COMMENT '最低温度', icon_day VARCHAR(10) COMMENT '白天天气图标代码', text_day VARCHAR(20) COMMENT '白天天气描述', icon_night VARCHAR(10) COMMENT '夜间天气图标代码', text_night VARCHAR(20) COMMENT '夜间天气描述', wind360_day INT COMMENT '白天风向360角度', wind_dir_day VARCHAR(20) COMMENT '白天风向', wind_scale_day VARCHAR(10) COMMENT '白天风力等级', wind_speed_day INT COMMENT '白天风速 (km/h)', wind360_night INT COMMENT '夜间风向360角度', wind_dir_night VARCHAR(20) COMMENT '夜间风向', wind_scale_night VARCHAR(10) COMMENT '夜间风力等级', wind_speed_night INT COMMENT '夜间风速 (km/h)', precip DECIMAL(5,1) COMMENT '降水量 (mm)', uv_index INT COMMENT '紫外线指数', humidity INT COMMENT '相对湿度 (%)', pressure INT COMMENT '大气压强 (hPa)', vis INT COMMENT '能见度 (km)', cloud INT COMMENT '云量 (%)', update_time DATETIME COMMENT '数据更新时间', UNIQUE KEY unique_city_date (city, fx_date)) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='天气数据表';七、数据插入
Section titled “七、数据插入”运行 SmartVoyage/sql/insert_data.sql 插入测试数据。
本节主要描述了smartVoyage数据库的定义、创建和插入数据的全过程。
发布于 2025-12-31