安卓公交查询系统数据库设计
- 行业动态
- 2025-04-23
- 3132
需求分析
公交查询系统需支持以下核心功能:
- 线路查询:按线路编号或名称查询详细信息(如站点、首末班时间)。
- 站点查询:通过站点名称或定位获取途经线路及到站时间。
- 实时到站信息:结合车辆定位数据,提供车辆当前位置及预计到站时间。
- 收藏与历史记录:用户可收藏常用线路或站点,并查看查询历史。
数据库设计
表结构设计
表名 | 描述 | 关键字段 | 关联关系 |
---|---|---|---|
lines | 公交线路基本信息 | line_id(主键)、line_name、start_station、end_station、first_time、last_time | 无 |
stations | 公交站点信息 | station_id(主键)、station_name、latitude、longitude | 无 |
line_stations | 线路与站点关联关系 | id(主键)、line_id(外键)、station_id(外键)、station_order | 关联 lines 和 stations |
vehicles | 车辆实时信息 | vehicle_id(主键)、line_id(外键)、plate_number、current_station_id(外键)、status、location_lat、location_lng、update_time | 关联 lines 和 stations |
timetables | 线路发车时间表 | timetable_id(主键)、line_id(外键)、departure_time、arrival_time | 关联 lines |
users | 用户信息 | user_id(主键)、username、password、phone | 无 |
favorites | 用户收藏的线路或站点 | favorite_id(主键)、user_id(外键)、type(线路/站点)、ref_id(线路ID或站点ID) | 关联 users |
history | 用户查询历史 | history_id(主键)、user_id(外键)、query_type(线路/站点)、query_content、query_time | 关联 users |
字段详细说明
lines
表
| 字段名 | 类型 | 说明 |
|——–|——|——|
| line_id | INT | 线路唯一标识(自增主键) |
| line_name | VARCHAR(50) | 线路名称(如“1路”) |
| start_station | INT | 起始站ID(关联 stations.station_id
) |
| end_station | INT | 终点站ID(关联 stations.station_id
) |
| first_time | TIME | 首班时间 |
| last_time | TIME | 末班时间 |
stations
表
| 字段名 | 类型 | 说明 |
|——–|——|——|
| station_id | INT | 站点唯一标识(自增主键) |
| station_name | VARCHAR(100) | 站点名称(如“天安门东”) |
| latitude | DECIMAL(9,6) | 纬度(用于定位) |
| longitude | DECIMAL(9,6) | 经度(用于定位) |
line_stations
表
| 字段名 | 类型 | 说明 |
|——–|——|——|
| id | INT | 主键(自增) |
| line_id | INT | 线路ID(关联 lines.line_id
) |
| station_id | INT | 站点ID(关联 stations.station_id
) |
| station_order | INT | 站点在线路中的排序(1表示起点站) |
vehicles
表
| 字段名 | 类型 | 说明 |
|——–|——|——|
| vehicle_id | INT | 车辆唯一标识(自增主键) |
| line_id | INT | 所属线路ID(关联 lines.line_id
) |
| plate_number | VARCHAR(20) | 车牌号 |
| current_station_id | INT | 当前所在站点ID(关联 stations.station_id
) |
| status | VARCHAR(20) | 车辆状态(如“行驶中”“停站”) |
| location_lat | DECIMAL(9,6) | 车辆当前纬度(GPS定位) |
| location_lng | DECIMAL(9,6) | 车辆当前经度(GPS定位) |
| update_time | TIMESTAMP | 数据更新时间(用于实时性) |
示例数据
lines
表
line_id | line_name | start_station | end_station | first_time | last_time |
---|---|---|---|---|---|
1 | 1路 | 101 | 105 | 05:30:00 | 22:30:00 |
stations
表
station_id | station_name | latitude | longitude |
---|---|---|---|
101 | 天安门东 | 915 | 404 |
102 | 王府井 | 918 | 411 |
line_stations
表
id | line_id | station_id | station_order |
---|---|---|---|
1 | 1 | 101 | 1 |
2 | 1 | 102 | 2 |
相关问题与解答
问题1:如何优化线路查询性能?
解答:
- 索引优化:在
lines.line_name
、stations.station_name
字段上创建索引,加速模糊查询。 - 缓存机制:对热门线路或站点的查询结果进行缓存(如Redis),减少数据库压力。
- 分页查询:针对长线路的站点列表,采用分页加载,避免单次查询返回过多数据。
问题2:如何处理车辆实时位置的延迟问题?
解答:
- 数据更新策略:设定车辆位置的刷新频率(如每10秒更新一次),并通过
update_time
字段标记数据时效性。 - 客户端容错:若实时数据延迟,优先展示最近一次有效位置,并提示“数据可能稍有延迟”。
- 异常处理:对长时间未更新的车辆数据(如超过1分钟),标记为“位置暂不可用