任务分配情况
1.需求分析
-
姓名\任务 需求概述,角色,内容编写 功能建模 数据建模 行为建模 王玉 √ 王雨萌 √ 陆睿希 √ 胡雨娟 √
2.系统设计
1 系统分析
1.1项目背景:
随着铁路交通网络的快速发展,公众对火车票务服务的便捷性、实时性和公平性需求日益增长。传统票务系统在高峰期常面临高并发访问压力,存在余票更新滞后、支付占座超时、退改签流程繁琐等问题,同时缺乏灵活的票价动态调整机制和高效的候补购票功能,难以满足现代旅客的多样化需求。
为此,我们设计并开发了一套智能化火车票务管理系统,旨在通过技术创新优化购票全流程,提升用户体验与运营效率。系统以铁路运输业务为核心,覆盖车次查询、余票动态计算、在线支付、退改签服务、候补购票、票价动态调整等核心场景,同时集成多维度风控策略与高并发处理能力,保障系统稳定性与数据安全性。
1.2 系统价值与创新点
-
高效票务管理
-
自动化候补队列按优先级分配余票,提升资源利用率。
-
-
用户体验优化
-
购票流程简化至“查询-下单-支付”三步,支持第三方支付无缝对接;
-
退票自动计算手续费并实时恢复余票,改签流程透明化;
-
用户敏感信息(如身份证号)脱敏显示,保障隐私合规。
-
-
运营智能化
-
铁路工作人员可灵活调整车次、站点及运营状态,系统自动校验变更安全性;
-
支付风控模块实时监控交易异常,阻断恶意占票行为;
-
基于日志监控与数据分析,辅助管理人员优化资源配置。
-
-
技术架构优势
-
采用分布式架构与数据库分片技术,支持千万级并发访问;
-
敏感数据加密存储(如BCrypt加密密码),传输过程全链路加密;
-
通过异步消息队列处理余票更新与通知,确保系统高可用性。
-
1.3需求分析
1.3.1需求概述
本系统为乘客提供便捷的火车票购买与管理服务。乘客可通过输入出发站、到达站及日期查询车次信息,系统动态显示列车发车时间、席别、实时票价及余票情况,并支持提交订单与第三方支付。若支付超时或候补订单未匹配成功,系统将自动释放座位并更新订单状态,保障公平性。退票时系统根据发车时间自动计算手续费并恢复余票,改签需先退票后重新购票。运营管理员可维护列车、车站信息等。乘客信息(如身份证号)脱敏显示,候补订单按提交时间优先级处理,超时未支付或候补失败自动通知用户。系统全面覆盖购票、退改、候补、运营管理及风控场景,兼顾效率与合规性。
用户角色
角色 | 主要职责 |
---|---|
普通用户 | 购票、退票、改签、订单查询、信息反馈。 |
管理员 | 系统维护、用户管理、异常处理、日志监控。车次/票价/站点管理、运营状态调整。 |
支付接口管理员 | 支付渠道配置、风控管理、交易异常处理(第三方服务)。 |
1.3.2系统功能建模设计
需求清单
乘客
- 用户注册:乘客可以通过系统进行注册,创建个人账户。
- 个人信息管理:注册后,乘客可以管理自己的个人信息,如修改密码、更新联系方式等。
- 在线购票:乘客可以在系统中选择车次并购买车票。
- 候补购票:如果当前没有可用的车票,乘客可以选择候补购票,等待有其他乘客退票时自动获得车票。
- 车票查询:乘客可以查询自己已购买的车票信息,包括车次、座位号等。
- 订单查询:乘客可以查看自己的订单记录,了解购票和支付状态。
- 支付记录查询:乘客可以查询自己的支付记录,以便对账或解决支付问题。
车站管理员
- 乘客信息:车站管理员可以访问乘客的信息,用于管理和统计。
- 车票查询:管理员可以查询车票信息,以便进行管理和调度。
- 订单查询:管理员可以查看订单记录,监控售票情况。
- 支付记录查询:管理员可以查询支付记录,确保财务数据的准确性和完整性。
- 车站信息管理:管理员可以管理车站的基本信息,如地址、联系方式等。
- 车次停靠管理:管理员可以管理车次的停靠站点和时间,确保列车运行的顺利进行。
- 票价管理:管理员可以设置和调整票价,根据市场情况和政策要求进行定价。
- 余票信息调整:管理员可以根据实际情况调整剩余车票的数量,避免资源浪费或供不应求的情况发生。
用例图
原型图
1.2.3行为建模
业务流程描述
- 用户购票流程
当乘客进入购票页面时,可以通过系统查询车次(输入出发站、到达站、发车日期),然后系统会根据车次停靠表(Train_Schedule)动态计算区间余票(基于余票信息表 Ticket_Inventory),显示车次、席别、票价(匹配票价表 Ticket_Price)、发车时间等信息供乘客选择,乘客选择车次并提交订单后,系统通过扣减余票,生成订单表(Order)记录,并跳转至支付页面。支付成功后,订单状态更新为“已支付”,生成支付记录表(Payment)数据;若支付超时(如30分钟未支付),系统自动释放库存并标记订单为“已取消”。 - 退票与改签流程
乘客需要退票或改签时,可以在订单详情页发起退票,系统查询相应金额并退款(我们这里退款时退全款)后更新订单状态为“已取消”,并且同时恢复对应区间的余票(更新余票信息表 Ticket_Inventory)。记录退款信息至支付记录表(Payment)。改签则需先退票后重新购票,系统禁止直接修改原有订单。 - 候补购票流程
当余票不足时,乘客可提交候补订单表(Wait_Order),指定车次、席别、乘车日期。系统实时监控余票变化:当有余票释放时,按候补下单时间顺序锁定座位,通知用户支付(15分钟内未支付则释放)。若候补失败(发车前24小时仍无票),系统自动取消候补订单并通知用户。 - 列车与车站管理流程
运营管理员可维护列车表(Train)信息(如调整运营状态is_active)、车站表(Station)信息(如新增车站编码station_code)。修改车次停靠表(Train_Schedule)时(如增减停靠站),需校验是否存在未完成的关联订单(通过订单表 Order检查),若有则禁止修改。 - 票价动态调整流程
运营管理员可在票价表(Ticket_Price)中设置不同区间、席别的票价规则(含生效日期effective_date),系统自动匹配当前有效票价。 - 支付与风控流程
支付接口对接第三方(如支付宝、微信),通过transaction_id关联支付流水,确保交易可追溯。若支付失败(如余额不足),系统自动释放座位并标记订单为“支付失败”,防止占票不支付。 - 数据安全与高并发流程
用户密码(password字段)使用BCrypt加密存储,身份证号(id_card)脱敏显示。
业务流程图
-
用户注册登录核心流程图
-
作用:用户信息管理流程是整个系统的基础模块,用于创建和维护用户身份标识。通过收集用户账号、用户名等基础信息,配合密码加密技术,确保用户数据安全存储,满足登录认证需求。
-
列车基础数据录入流程
-
作用:规范列车基础数据录入流程,确保车次号唯一和时间逻辑正确。关联车站表,为车次停靠表提供基础数据,支持车次路线规划。
-
车站基础信息管理
-
作用:统一车站基础信息管理,确保车站编码唯一。方便与列车线路、车次停靠信息进行关联。是否为换乘站的标记功能,支持系统智能规划多线路换乘方案,帮助乘客查询便捷换乘路线,同时也为列车调度提供参考,优化不同线路间的衔接效率。
-
管理列车停靠站序列
-
作用:车次停靠信息生成流程基于列车表数据,细化每趟列车的具体运行轨迹。通过为每个途经车站生成停靠记录,明确列车的到站时间、离站时间和停留分钟数,为乘客提供精确的乘车时刻参考,便于安排出行计划。
-
管理余票库存
-
作用:余票信息更新流程实现车票库存的动态管理,是保障票务系统正常运行的关键。在列车发车前,系统根据列车总座位数初始化各车次、席别的余票数量;随着用户下单购票或退票操作,实时更新余票数据,确保用户查询到的车票数量真实准确,避免超售或漏售问题。
-
规范票价设置流程
-
作用:票价信息管理流程用于制定和维护铁路运输的价格体系,支持灵活的票价策略。通过关联列车编号、出发站、到达站及席别,系统可针对不同线路、车型和座位等级设置差异化票价,并结合生效/失效日期实现动态调价
-
描述订单生命周期(未支付→已支付→已取消)
-
作用:订单信息生成流程记录用户购票的完整交易过程,是连接用户、车次和支付环节的纽带。在用户提交购票请求后,系统通过校验余票和票价,确保交易可行性;校验通过后生成唯一订单编号,详细记录用户信息、车次信息、订单金额及订单状态等数据。
-
-
管理支付流程
-
作用:支付记录管理流程负责处理用户购票的资金交易环节,确保支付安全与数据一致性。在用户选择支付方式完成付款后,系统调用第三方支付接口获取交易结果,并将实际支付金额、支付方式、支付时间及第三方交易流水号等信息写入支付记录表。
-
规范候补购票流程
-
作用:候补订单流程为余票不足时的用户提供购票候补服务,提升车票资源利用率。当用户提交候补订单后,系统将其需求信息(车次、席别、乘车时间等)写入候补订单表,并加入排队队列。通过定时扫描余票信息,一旦出现退票或新增车票,系统自动将符合条件的候补订单转为正式订单
-
管理用户常用乘车人信息
-
作用:乘客信息管理流程用于维护乘车人的身份资料,满足铁路实名制购票要求。用户可添加多个乘客信息,系统通过身份证号验证确保信息真实性和唯一性,防止重复购票或冒用身份。标记默认乘客功能支持用户快速填写常用乘车人信息,简化购票流程,提升操作效率。
-
总流程
-
1.2.4数据库需求分析
数据字典
- 用户信息,包括用户账号,用户名,加密后的密码,用户真实姓名,身份证号,手机号
- 列车表信息,包括列车编号,起始站编号,终点站编号,发车时间,到达终点站时间,总座位数,运营状态
- 车站信息,包括车站编号,车站名称,是否为换乘站
- 车次停靠信息,包括停靠记录编号,关联列车编号,关联车站编号,停靠顺序,到站时间,离站时间,停留分钟数
- 余票信息,包括余票编号,票价,关联列车编号,发车时间,出发站编号,到达站编号,席别,可用余票数量
- 票价信息,包括票价编号,关联列车编号,出发站编号,到达站编号,席别,票价,票价生效日期,票价失效日期
- 订单信息,包括订单编号,关联用户编号,关联乘客编号,关联列车编号,出发站编号,到达站编号,席别,下单时间,乘车时间,订单金额,订单状态,支付时间,是否退票
- 支付记录信息,包括支付记录编号,关联订单编号,关联用户编号,实际支付金额,支付方式,支付时间,第三方交易流水号,支付状态
- 候补订单信息,包括候补订单编号,关联用户编号,关联列车编号,出发站编号,到达站编号,席别,乘车时间,候补下单时间,候补状态,候补成功时间
- 乘客信息,包括乘客编号,关联用户编号,乘客真实姓名,身份证号,联系电话,是否为默认乘客
数据库概念设计
2 系统设计
2.1数据库逻辑结构设计
用户表(用户账号,用户名,加密后的密码,用户真实姓名,身份证号,手机号)
列车表(列车编号,起始站编号,终点站编号,发车时间,到达终点站时间,总座位数,运营状态)
车站表(车站编号,车站名称,是否为换乘站)
车次停靠表(停靠记录编号,关联列车编号,关联车站编号,停靠顺序,到站时间,离站时间,停留分钟数)
余票信息表(余票编号,关联列车编号,发车时间,出发站编号,到达站编号,席别,可用余票数量,票价)
票价表(票价编号,关联列车编号,出发站编号,到达站编号,席别,票价,票价生效日期,票价失效日期)
订单表(订单编号,关联用户编号,关联乘客编号,关联列车编号,出发站编号,到达站编号,席别,下单时间,乘车时间,订单金额,订单状态,支付时间,是否退票)
支付记录信息表(支付记录编号,关联订单编号,关联用户编号,实际支付金额,支付方式,支付时间,第三方交易流水号,支付状态)
候补订单表(候补订单编号,关联用户编号,关联列车编号,出发站编号,到达站编号,席别,乘车时间,候补下单时间,候补状态,候补成功时间)
乘客信息表(乘客编号,关联用户编号,乘客真实姓名,身份证号,联系电话,是否为默认乘客)
2.2数据库物理结构设计
1. 用户表 (User)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
user_id | BIGINT | 用户唯一标识 | PK |
username | VARCHAR(50) | 用户名(登录用) | UNIQUE, NOT NULL |
password | VARCHAR(100), | 加密后的密码(使用BCrypt或SHA-256哈希加密) | NOT NULL |
real_name | VARCHAR(50) | 用户真实姓名 | NOT NULL |
id_card | VARCHAR(18), | 身份证号 | UNIQUE, NOT NULL |
phone | VARCHAR(11), | 手机号 | UNIQUE, NOT NULL |
CREATE TABLE `User` (
user_id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
real_name VARCHAR(50) NOT NULL,
id_card VARCHAR(18) NOT NULL UNIQUE,
phone VARCHAR(11) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 车站表 (Station)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
station_id | INT | 车站编号 | 主码 |
station_name | VARCHAR(50) | 车站名称(如北京南站) | NOT NULL |
station_code | VARCHAR(10) | 车站编码(如BJN) | UNIQUE, NOT NULL |
is_transfer | BOOLEAN | 是否为换乘站 | DEFAULT FALSE |
CREATE TABLE `Station` (
station_id INT AUTO_INCREMENT PRIMARY KEY,
station_name VARCHAR(50) NOT NULL,
station_code VARCHAR(10) NOT NULL UNIQUE,
is_transfer BOOLEAN NOT NULL DEFAULT FALSE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
3. 列车表 (Train)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
train_id | VARCHAR(10) | 列车编号 | 主码 |
start_station_id | INT | 起始站ID(外键关联车站表) | 外码(Station.station_id) |
end_station_id | INT | 终点站ID(外键关联车站表) | 外码(Station.station_id) |
departure_time | TIME | 发车时间 | NOT NULL |
arrival_time | TIME | 到达终点站时间 | NOT NULL |
total_seats | INT | 总座位数(按车厢和席别动态计算,非冗余字段) | NOT NULL |
is_active | BOOLEAN | 是否运营中 | DEFAULT TRUE |
CREATE TABLE `Train` (
train_id VARCHAR(10) PRIMARY KEY,
start_station_id INT NOT NULL,
end_station_id INT NOT NULL,
departure_time TIME NOT NULL,
arrival_time TIME NOT NULL,
total_seats INT NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT TRUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
4. 车次停靠表 (Train_Schedule)
字段名 | 类型/约束 | 说明 | 完整性约束 |
---|---|---|---|
schedule_id | BIGINT | 停靠记录编号 | 主码 |
train_id | VARCHAR(10) | 关联列车编号 | 外码(Train.train_id) |
station_id | INT | 关联车站编号 | 外码(Station.station_id) |
sequence_number | INT | 停靠顺序(从1开始) | NOT NULL |
arrival_time | TIME | 到站时间(若为始发站则无值) | |
departure_time | TIME | 离站时间(若为终点站则无值) | |
stop_duration | INT | 停留分钟数 |
CREATE TABLE `Train_Schedule` (
schedule_id BIGINT AUTO_INCREMENT PRIMARY KEY,
train_id VARCHAR(10) NOT NULL,
station_id INT NOT NULL,
sequence_number INT NOT NULL,
arrival_time TIME DEFAULT NULL,
departure_time TIME DEFAULT NULL,
stop_duration INT DEFAULT NULL,
FOREIGN KEY (train_id) REFERENCES Train(train_id),
FOREIGN KEY (station_id) REFERENCES Station(station_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
5. 余票信息表 (Ticket_Inventory)
字段名 | 类型/约束 | 说明 | 完整性约束 |
---|---|---|---|
inventory_id | BIGINT | 余票编号 | 主码 |
train_id | VARCHAR(10) | 关联列车编号 | 外码(Train.train_id) |
departure_date | DATETIME | 发车时间 | NOT NULL |
from_station_id | INT | 出发站编号 | 外码(Station.station_id) |
to_station_id | INT | 到达站编号 | 外码(Station.station_id) |
seat_type | VARCHAR(10) | 席别(商务座/一等座/二等座等) | NOT NULL |
available_count | INT | 可用余票数量 | NOT NULL |
ticket_price | DECIMAL(10,2) | 票价 | NOT NULL |
CREATE TABLE `Ticket_Inventory` (
inventory_id BIGINT AUTO_INCREMENT PRIMARY KEY,
train_id VARCHAR(10) NOT NULL,
departure_date DATETIME NOT NULL,
from_station_id INT NOT NULL,
to_station_id INT NOT NULL,
seat_type VARCHAR(10) NOT NULL,
available_count INT NOT NULL,
ticket_price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (train_id) REFERENCES Train(train_id),
FOREIGN KEY (from_station_id) REFERENCES Station(station_id),
FOREIGN KEY (to_station_id) REFERENCES Station(station_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
6. 票价表 (Ticket_Price)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
price_id | BIGINT | 票价编号 | 主码 |
train_id | VARCHAR(10) | 关联列车编号 | 外码(Train.train_id) |
from_station_id | INT | 出发站编号 | 外码(Station.station_id) |
to_station_id | INT | 到达站编号 | 外码(Station.station_id) |
seat_type | VARCHAR(10) | 席别 | NOT NULL |
price | DECIMAL(10,2) | 票价 | NOT NULL |
effective_date | DATE | 票价生效日期 | NOT NULL |
expiry_date | DATE | 票价失效日期(可选,默认为长期有效) |
CREATE TABLE `Ticket_Price` (
price_id BIGINT AUTO_INCREMENT PRIMARY KEY,
train_id VARCHAR(10) NOT NULL,
from_station_id INT NOT NULL,
to_station_id INT NOT NULL,
seat_type VARCHAR(10) NOT NULL,
price DECIMAL(10,2) NOT NULL,
effective_date DATE NOT NULL,
expiry_date DATE DEFAULT NULL,
FOREIGN KEY (train_id) REFERENCES Train(train_id),
FOREIGN KEY (from_station_id) REFERENCES Station(station_id),
FOREIGN KEY (to_station_id) REFERENCES Station(station_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
7. 订单表 (Order)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
order_id | BIGINT | 订单编号 | PK |
user_id | BIGINT | 关联用户编号 | FK(User.user_id) |
passenger_id | BIGINT | 关联乘客编号 | FK(Passenger) |
train_id | VARCHAR(10) | 关联列车编号 | FK(Train.train_id) |
from_station_id | INT | 出发站编号 | FK(Station.station_id) |
to_station_id | INT | 到达站编号 | FK(Station.station_id) |
seat_type | VARCHAR(10) | 席别 | NOT NULL |
order_time | DATETIME | 下单时间 | NOT NULL |
departure_date | DATETIME | 乘车时间 | NOT NULL |
price | DECIMAL(10,2) | 订单金额(从票价表同步) | NOT NULL |
order_status | VARCHAR(20) | 订单状态(未支付/已支付/已取消/已完成) | NOT NULL |
payment_time | DATETIME | 支付时间(仅状态为已支付时有效) | |
whether_refund | BOOLEAN | 表示是否退退票 | NOT NULL |
CREATE TABLE `Order` (
order_id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
train_id VARCHAR(10) NOT NULL,
from_station_id INT NOT NULL,
to_station_id INT NOT NULL,
seat_type VARCHAR(10) NOT NULL,
order_time DATETIME NOT NULL,
departure_date DATETIME NOT NULL,
price DECIMAL(10,2) NOT NULL,
order_status VARCHAR(20) NOT NULL,
payment_time DATETIME DEFAULT NULL,
whether_refund BOOLEAN NOT NULL DEFAULT FALSE,
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (train_id) REFERENCES Train(train_id),
FOREIGN KEY (from_station_id) REFERENCES Station(station_id),
FOREIGN KEY (to_station_id) REFERENCES Station(station_id),
FOREIGN KEY (passenger_id) REFERENCES Passenger(passenger_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
8. 支付记录表 (Payment)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
payment_id | BIGINT | 支付记录编号 | 主码 |
order_id | BIGINT | 关联订单编号 | 外码(Order.order_id) |
user_id | BIGINT | 关联用户编号 | 外码(User.user_id) |
payment_amount | DECIMAL(10,2) | 实际支付金额 | NOT NULL |
payment_method | VARCHAR(20) | 支付方式(支付宝/微信/银联等) | NOT NULL |
payment_time | DATETIME | 支付时间 | NOT NULL |
transaction_id | VARCHAR(50) | 第三方交易流水号 | ,UNIQUE |
payment_status | VARCHAR(20) | 支付状态(成功/失败) | NOT NULL |
CREATE TABLE `Payment` (
payment_id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
payment_amount DECIMAL(10,2) NOT NULL,
payment_method VARCHAR(20) NOT NULL,
payment_time DATETIME NOT NULL,
transaction_id VARCHAR(50) UNIQUE,
payment_status VARCHAR(20) NOT NULL,
FOREIGN KEY (order_id) REFERENCES `Order`(order_id),
FOREIGN KEY (user_id) REFERENCES User(user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
9. 候补订单表 (Wait_Order)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
wait_order_id | BIGINT | 候补订单编号 | PK |
user_id | BIGINT | 关联用户编号 | FK(User.user_id) |
train_id | VARCHAR(10) | 关联列车编号 | FK(Train.train_id) |
from_station_id | INT | 出发站编号 | FK(Station.station_id) |
to_station_id | INT | 到达站编号 | FK(Station.station_id) |
seat_type | VARCHAR(10) | 席别 | NOT NULL |
departure_date | DATE | 乘车日期 | NOT NULL |
create_time | DATETIME | 候补下单时间 | NOT NULL |
wait_status | VARCHAR(20) | 候补状态(等待中/成功/失败/取消) | NOT NULL |
success_time | DATETIME | 候补成功时间(仅状态为成功时有效) |
CREATE TABLE `Wait_Order` (
wait_order_id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
train_id VARCHAR(10) NOT NULL,
from_station_id INT NOT NULL,
to_station_id INT NOT NULL,
seat_type VARCHAR(10) NOT NULL,
departure_date DATE NOT NULL,
create_time DATETIME NOT NULL,
wait_status VARCHAR(20) NOT NULL,
success_time DATETIME DEFAULT NULL,
FOREIGN KEY (user_id) REFERENCES User(user_id),
FOREIGN KEY (train_id) REFERENCES Train(train_id),
FOREIGN KEY (from_station_id) REFERENCES Station(station_id),
FOREIGN KEY (to_station_id) REFERENCES Station(station_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;
10. 乘客信息表 (Passenger)
字段名 | 类型 | 说明 | 完整性约束 |
---|---|---|---|
passenger_id | BIGINT | 乘客编号 | PK |
user_id | BIGINT | 关联用户编号(添加该乘客的用户) | FK(User.user_id) |
real_name | VARCHAR(50) | 乘客真实姓名 | NOT NULL |
id_card | VARCHAR(18) | 身份证号 | UNIQUE, NOT NULL |
phone | VARCHAR(11) | 联系电话(可选) | |
is_default | BOOLEAN | 是否为默认乘客(用户常用乘客标记) | DEFAULT FALSE |
CREATE TABLE `Passenger` (
passenger_id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
real_name VARCHAR(50) NOT NULL,
id_card VARCHAR(18) NOT NULL UNIQUE,
phone VARCHAR(11) DEFAULT NULL,
is_default BOOLEAN NOT NULL DEFAULT FALSE,
FOREIGN KEY (user_id) REFERENCES User(user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;