这是在做一个大型货场租赁系统时遇到的问题,在计算货场剩余存储空间时,不仅仅需要知道哪些货位是空闲的,还要能够判断出哪些货位之间是连续的。因为在新货物入场时,可以判断这些货物是否可以堆放在一起,而不是放在不连续的多个货位上,这样更便于管理,并且在出货时也更加迅速。
假设这个货场共有100个货位,现在已存放货物的货位是1、2、3、4、87、89、99、100,则剩余空位是5~86、88、90~98。数据库的设计方式一般有两种:一种是在表中为每个货位建一条记录,类似表1所示的结构设计;另一种设计方式是仅将存放有货物的货位号放在表中,也就是存货情况表中仅有货位编号列,存放1、2、3、4、87、89、99、100这几个数值。
表1 存货情况表
货位编号 |
是否存放有货物(1-是,0-否) |
1 |
1 |
2 |
1 |
3 |
0 |
... |
... |
相对于大型数据库而言,第一种架构设计对于查询语句编写方面会更方便一些。如果数据需要驻留在一些手持设备上,多数开发人员会更喜欢第二种架构设计,因为它能够节省宝贵的存储空间。尤其是当表的数据量非常大时,这种设计方式更能显示出它的优势。这里我们将以第二种架构设计方式来演示查询的创建方法,下面是创建示例表的语句:
CREATE TABLE Freights(Numb int NOT NULL);
INSERT INTO Freights VALUES
(1),(2),(3),(4),(87),(89),(99),(100);
1、查找剩余空位区间和剩余空位编号
要查找剩余空位区间,就是要找出表2所示的数值范围。
表2 剩余空位区间
货位开始编号 |
货位结束编号 |
5 |
86 |
88 |
88 |
90 |