我正在尝试为mySQL中的体育场座位创建一个数据结构,用于预订系统。我希望能够查询数据库,迭代块以创建图形表示并能够预订座位。情况是:
我猜测会有一个'主'表,每个座位都有一行,以及块,行,位置,状态,客户等的列。对于其他表,例如要用作外键的行。
问题是我显然不想手动插入每个座位,所以如何通过输入连续多少座位然后自动生成座位来自动执行此操作?
最后,我如何重复使用它,所以它可以多次用于更多事件?在每个活动中为每个座位添加记录将需要资源。
那么,构建这些数据的方法是什么,我会用什么来简化生活并轻松生成?
程序在java中,可能需要一个函数来构建结构吗?
答案 0 :(得分:1)
您可以创建
等表格 Table definition | Sample data
Block - Id, Name | (1, 'A'), (2, 'B')
Row - Id, BlockId, Name | (1 , 1, 'A'), (2 , 1, 'B')
Seat - Id, rowId, Name | (1 , 1, 'A1'), (2 , 1, 'A2')
Event - Id, Name, Date | (1 , 'Musical Concert', '2016-07/05')
EventSeats - EventId, SeatId, Status | (1 , 1, 1), (1 , 2, 0)
P.S状态1 - 已预订,状态0 - 可用
如果您创建上述模型,则可以在一个块中插入行的所有席位。
您也可以为每个活动预订座位。诸如客户名称等的预订信息可以存储在EventSeat表中。希望这能回答你的最后一个问题。
现在让我回答你的第一个问题。 “我不想手动插入每个座位”
由您来实现逻辑。 你可以做的是你可以从用户输入获得块数,每个块中的行数和每行中没有行数。
循环遍历它并以编程方式在循环中插入数据。希望你明白了。
答案 1 :(得分:0)
我只是在这里给你伪代码,在评论中给出了更多的可读性。
Java代码
int newEventId = 2; //e.g
EventSeat eventSeat = null
//Loop through all the blocks
for(Block block in Blocks){
//Get all rows of each blocks
for(Row row in block.rows){
//Get all seats of each row
for(Seat seat in row.seats){
//Create each entry for one seat
eventSeat = new EventSeat();
eventSeat.setSeatId(seat.getSetId());
eventSeat.setStatus(0);
.....
session.save(eventSeat)
}
}
}
存储过程
CREATE PROCEDURE dbo.fillEventSeat @eventId INT
AS
DECLARE @seatCounter INT @MaxSeatId INT, @seatId INT
SELECT @seatCounter = MIN(Id) , @MaxSeatId = MAX(Id)
FROM Seat
WHILE(@seatCounter IS NOT NULL
AND @seatCounter <= @MaxSeatId)
SELECT @seatId = Id
FROM Seat WHERE Id = @seatCounter
INSERT INTO EventSeat(eventId, seatId, status) VALUES (@eventId, @seatId, 0);
SET @seatCounter = @seatCounter + 1
END
GO