在SQL中创建和构建复杂的座位结构?

时间:2016-07-05 14:16:01

标签: java mysql data-structures

我正在尝试为mySQL中的体育场座位创建一个数据结构,用于预订系统。我希望能够查询数据库,迭代块以创建图形表示并能够预订座位。情况是:

  • 许多座位,我们会说A到G。
  • 'x'座位数A,B,C ......按行块变化。
  • 'y'座位数,按行排列(A:35,B:32等)
  • 每个座位都有一个状态(预订/可用)和一个客户参考。 (外键)。

我猜测会有一个'主'表,每个座位都有一行,以及块,行,位置,状态,客户等的列。对于其他表,例如要用作外键的行。

问题是我显然不想手动插入每个座位,所以如何通过输入连续多少座位然后自动生成座位来自动执行此操作?

最后,我如何重复使用它,所以它可以多次用于更多事件?在每个活动中为每个座位添加记录将需要资源。

那么,构建这些数据的方法是什么,我会用什么来简化生活并轻松生成?

程序在java中,可能需要一个函数来构建结构吗?

2 个答案:

答案 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