火车售票联网数据库设计及部分实现
2014-10-28 22:41
225 查看
一,数据库表设计
以下为求解某站到某站剩余席位SQL
注:1,当前以T8353坪石到广州车次信息
2,每节车厢为112个席位
3,当前数据为一节车厢所产生
4,随机向train_site表添加记录
二,数据加工脚本
/*
坪石【0】~广州【5】
排除当车次坪石到广州及坪石后续到任何一个站的席位
韶关【2】~源潭【4】
排除当车次韶关之前车站到韶关之后的任何一个站的席位
排除当车次韶关到终点站(广州【5】)及韶关后续到任何一个站的席位
*/
DECLARE @start INT,@end INT
SET @start=4
SET @end=5
UPDATE train_over_num SET siteNum=112-(
(SELECT COUNT(1) FROM train_site WHERE trainId='2C2BD95D-4396-4EF5-ABD4-35103B584683'
AND (startNode<@start AND endNode>@start)
OR ( startNode>=@start AND startNode<@end AND endNode>@start))
)
WHERE trainId='2C2BD95D-4396-4EF5-ABD4-35103B584683' and startNode=@start AND endNode=@end
有人购票时,我们就根据startNode,endNode来查询train_over_num表剩余多少。确定下单时,查询席位默认以短程排在前面(优先使用短程)。
以上设计凭自己想象出来,期待更好的设计。
表名 | Train_class | 火车车次表 | | |
Id | Varchar(50) | 标识 | | |
trainName | Varchar(50) | 火车车次名称 | | |
trainRename | Varchar(50) | 火车车次名称 | | |
| | | | |
表名 | Train_node | 火车车站表 | | |
nodeId | Varchar(50) | 主键标识 | | |
nodeName | Varchar(50) | 车站名称 | | |
trainId | Varchar(50) | 所属火车 | | |
nodeIndex | int | 所属列车车站序号 | | |
SerialNo | int | 车站序号 | | |
| | | | |
表名 | Train_over_num | 火车余票表 | | |
id | Varchar(50) | 标识 | | |
trainId | Varchar(50) | 所属火车 | | |
startNode | int | 开始站 | | |
endNode | int | 结束站 | | |
siteNum | int | 剩余席位 | | |
bedNum | int | 剩余床位 | | |
| | | | |
表名 | Train_site | 火车旅客表 | | |
id | Varchar(50) | 标识 | | |
trainId | Varchar(50) | 所属火车 | | |
trainer | Varchar(50) | 旅客姓名 | | |
trainerCardId | Varchar(50) | 旅客身份证 | | |
ownerBox | int | 所属车厢 | | |
startNode | int | 开始站 | | |
endNode | int | 结束站 | | |
siteNo | int | 席位编号 | | -1,为无座票;大于0为正常席位 |
siteStatus | int | 席位状态 | | 1,正常;2,退票;3, |
以下为求解某站到某站剩余席位SQL
注:1,当前以T8353坪石到广州车次信息
2,每节车厢为112个席位
3,当前数据为一节车厢所产生
4,随机向train_site表添加记录
车次名称 | 车站名称 | 所属列车停靠序号 |
T8353 | 坪石 | 0 |
T8353 | 乐昌 | 1 |
T8353 | 韶关东 | 2 |
T8353 | 英德 | 3 |
T8353 | 源潭 | 4 |
T8353 | 广州 | 5 |
车次标识 | 开始节点 | 结束节点 | 剩余席位 | 已占席位 |
T8353 | 0 | 1 | 75 | 37 |
T8353 | 0 | 2 | 51 | 0 |
T8353 | 0 | 3 | 27 | 0 |
T8353 | 0 | 4 | 12 | 0 |
T8353 | 0 | 5 | 12 | 0 |
T8353 | 1 | 2 | 88 | 3 |
T8353 | 1 | 3 | 64 | 21 |
T8353 | 1 | 4 | 49 | 0 |
T8353 | 1 | 5 | 49 | 0 |
T8353 | 2 | 3 | 67 | 0 |
T8353 | 2 | 4 | 52 | 24 |
T8353 | 2 | 5 | 52 | 0 |
T8353 | 3 | 4 | 73 | 15 |
T8353 | 3 | 5 | 73 | 0 |
T8353 | 4 | 5 | 112 | 0 |
二,数据加工脚本
/*
坪石【0】~广州【5】
排除当车次坪石到广州及坪石后续到任何一个站的席位
韶关【2】~源潭【4】
排除当车次韶关之前车站到韶关之后的任何一个站的席位
排除当车次韶关到终点站(广州【5】)及韶关后续到任何一个站的席位
*/
DECLARE @start INT,@end INT
SET @start=4
SET @end=5
UPDATE train_over_num SET siteNum=112-(
(SELECT COUNT(1) FROM train_site WHERE trainId='2C2BD95D-4396-4EF5-ABD4-35103B584683'
AND (startNode<@start AND endNode>@start)
OR ( startNode>=@start AND startNode<@end AND endNode>@start))
)
WHERE trainId='2C2BD95D-4396-4EF5-ABD4-35103B584683' and startNode=@start AND endNode=@end
有人购票时,我们就根据startNode,endNode来查询train_over_num表剩余多少。确定下单时,查询席位默认以短程排在前面(优先使用短程)。
以上设计凭自己想象出来,期待更好的设计。
相关文章推荐
- 火车联网售票数据库设计和余票查询
- (转载)数据库设计指南----第2 部分— 设计表和字段
- 单线程和多线程访问数据库性能比较二实现代码部分(oracle 数据库)
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- [转] 简易论坛后台数据库设计及实现
- 基于日志结构的嵌入式数据库设计和实现1
- 数据库设计指南 第2 部分— 设计表和字段
- 转:用汽车售票系统谈数据库结构设计
- 简易论坛后台数据库设计及实现
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- 用汽车售票系统谈数据库结构设计
- 统一身份认证子系统数据库设计与数据访问层实现
- 重新设计NBearV3中的实体关联设计语言,实现数据库完整性约束和级联更新
- 函数实现数据库操作部分
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- 数据库访问层设计与实现(1)
- (转载)数据库设计指南----第4 部分— 保证数据的完整性
- 统一身份认证子系统详细设计与部分实现
- 一步一步实现数据库到类的自动化映射(二) 类层次的设计 类的实现
- 简易论坛后台数据库设计及实现