Skip to content

1. 基本概念

节目表(Program)

  • 代表一个具体的演出或活动,比如"周杰伦2023嘉年华世界巡回演唱会-北京站"
  • 包含演出的基本信息如标题、艺人、地点、详细介绍等

票档表(TicketCategory)

  • 代表同一节目不同价位的票,比如"内场票-1280元"、"看台票-880元"等
  • 每个节目可以有多个票档,每个票档有不同的价格和总数量

座位表(Seat)

  • 代表场馆中的具体座位,与特定的节目和票档关联
  • 包含座位的位置(排号、列号)、价格、状态(未售、锁定、已售)等信息

2. 表之间的关系

一对多关系:

  1. 节目表 → 票档表

    • 一个节目(Program)可以有多个票档(TicketCategory)
    • 关系通过 [programId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/TicketCategory.java#L26-L29) 字段建立
    • 在[TicketCategory](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/TicketCategory.java#L17-L53)实体中,[programId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/TicketCategory.java#L26-L29)字段指向对应的节目
  2. 票档表 → 座位表

    • 一个票档(TicketCategory)可以对应多个座位(Seat)
    • 关系通过 [ticketCategoryId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Seat.java#L34-L37) 字段建立
    • 在[Seat](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Seat.java#L16-L64)实体中,[ticketCategoryId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Seat.java#L34-L37)字段指向对应的票档
  3. 节目表 → 座位表

    • 一个节目(Program)可以直接关联多个座位(Seat)
    • 关系通过 [programId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Seat.java#L29-L32) 字段建立
    • 在[Seat](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Seat.java#L16-L64)实体中,[programId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Seat.java#L29-L32)字段指向对应的节目
  4. 节目表 → 演出时间表

    • 一个节目(Program)可以有一个演出时间(ProgramShowTime)
    • 关系通过 [programId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/ProgramShowTime.java#L26-L29) 字段建立
    • 在[ProgramShowTime](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/ProgramShowTime.java#L16-L46)实体中,[programId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/ProgramShowTime.java#L26-L29)字段指向对应的节目
  5. 节目表 → 节目分组表

    • 多个节目可以属于同一个节目分组(ProgramGroup)
    • 关系通过 [programGroupId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Program.java#L23-L26) 字段建立
    • 在[Program](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Program.java#L15-L246)实体中,[programGroupId](file:///D:/Java_projects/damai/damai-server/damai-program-service/src/main/java/com/damai/entity/Program.java#L23-L26)字段指向对应的节目分组

3. 数据模型图示

节目分组(ProgramGroup) 1 ←─→ N 节目(Program)

                                  ↓ 1
                             演出时间(ProgramShowTime)

                                  ↓ M
                              票档(TicketCategory)

                                  ↓ K
                              座位(Seat)

4. 实际应用场景

这种设计模式的优势在于:

  1. 层次清晰:节目→票档→座位的层级结构非常清晰,便于管理
  2. 灵活定价:同一节目可以设置多种票价(不同票档)
  3. 精细化管理:可以对每个座位进行独立管理,包括状态跟踪
  4. 数据一致性:通过外键关联确保数据的一致性和完整性
  5. 扩展性强:便于添加新的票档或座位,而不影响现有数据结构

例如,对于"周杰伦2023嘉年华世界巡回演唱会"这个节目:

  • 节目表存储演唱会基本信息
  • 票档表存储不同价位的票:VIP票(1680元)、内场票(1280元)、看台票(880元)等
  • 座位表存储场馆中每个具体座位的信息,每个座位都归属于某个票档

这样的设计能够很好地支撑在线选座购票、库存管理、价格策略等业务需求。我来为您解释票档表、节目表和座位表之间的关系。让我先查看这些表的实体类定义,以便更准确地说明它们之间的关系。