Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库设计:如何处理取消订单,但保存订单历史记录_Sql_Database_Database Design_Entity Relationship - Fatal编程技术网

Sql 数据库设计:如何处理取消订单,但保存订单历史记录

Sql 数据库设计:如何处理取消订单,但保存订单历史记录,sql,database,database-design,entity-relationship,Sql,Database,Database Design,Entity Relationship,如何使用数据库处理以下场景 存在以下数据库关系: 使用者 他有很多订单 他有很多票 顺序 他有很多钱 有许多订单项 票 属于OrderItem 属于用户 属于票务分类 票务分类 他有很多票 每当用户下订单时,都会在数据库中创建票据。当支付失败或用户在支付过程中离开页面时,如何处理此情况?实际上,我只想创建属于成功订单的票据,但在付款订单历史记录中止的情况下,无法确定尝试购买哪些票据 是否缺少保留之类的中间表?我假设您有一个带有用户ID的用户表和一个带有事件ID的事件表 每个活动都有许多门票出售。

如何使用数据库处理以下场景

存在以下数据库关系:

使用者 他有很多订单 他有很多票

顺序 他有很多钱 有许多订单项

票 属于OrderItem 属于用户 属于票务分类

票务分类 他有很多票

每当用户下订单时,都会在数据库中创建票据。当支付失败或用户在支付过程中离开页面时,如何处理此情况?实际上,我只想创建属于成功订单的票据,但在付款订单历史记录中止的情况下,无法确定尝试购买哪些票据


是否缺少保留之类的中间表?

我假设您有一个带有用户ID的用户表和一个带有事件ID的事件表

每个活动都有许多门票出售。首先,让我们定义一个票证类别表

TicketCategory
--------------
TicketCategory ID
TicketCategory Name
如果您有基本票、专业票等,此处不包括门票价格,因为不同活动的门票价格可能不同

接下来,让我们创建一个事件票证连接表

EventTicket
-----------
EventTicket ID
Event ID
TicketCategory ID
Ticket Price
Total Tickets
Tickets Reserved
Tickets Sold
我给每个表一个自动递增的整数ID主键。它使连接更简单

对于在活动中售出的每种类型的票证,您都有一个事件ID TicketCategory ID唯一索引。您还可以有一个TicketCategory ID、Event ID和unique索引,用于报告目的

total tickets整数值在设置事件时设置,除非事件的容量发生变化,否则不会发生变化

tickets reserved整数值是保留但未购买的票数

售出的票数整数值是售出的票数。我假设被取消的订单相对较少。如果愿意,可以添加tickets paid整数值以跟踪订购但未付款的票数

当你看到有多少票可供出售时,你可以把预订和售出的票数从总票数中减去

现在,让我们来处理一张订票单。通常,您有一个Order表和一个OrderLineItem表

Order
-----
Order ID
User ID
Event ID
Order Timestamp
Status (Active, Paid, Cancelled)

OrderLineItem
-------------
OrderLineItem ID
Order ID
TicketCategory ID
Quantity
Ticket Price Per Ticket
订单表有一个关于用户ID、事件ID、订单时间戳和状态的唯一索引。OrderLineItem表在订单ID TicketCategory ID上具有唯一索引

您可以通过将数量乘以每张票的票价来计算订单行项目总数。您可以通过计算所有订单行项目总计来计算订单总额

预订表可以如下所示:

Reservation
-----------
Reservation ID
User ID
Event ID
TicketCategory ID
Quantity
Reservation Timestamp
您将拥有一个用户ID、事件ID、TicketCategory ID和唯一索引。我将把其他可能的唯一索引留给您

预订时,EventTicket表中的票证数量将减少


下单时,您首先检查是否已预订。如果是,则删除保留行并创建订单行。如果不是,则创建订单行。无论哪种方式,您都可以在EventTicket表中进行适当的调整。

问题是,如何处理取消的订单?通过向订单行添加取消标志来回答。是否缺少像预订那样的中间表?可能如果您接受预订,您需要一个表来存储预订信息。谢谢。你能向我解释一下,我如何补充我的计划,使之在保留的情况下起作用吗?是应该在成功购买后才创建票证,还是应该在创建事件时将票证数量插入数据库而不使用用户ID?我没有足够的关于您的域的信息来进一步阐述。是一个活动或多个活动的门票。用户是否希望购买一组门票,如季票,每场比赛一张,或单票,仅限单场比赛?活动是否有指定的座位或仅限人数?我可能还有其他问题,但现在,这些问题已经足够了。门票总是只针对一个单一的活动,用户需要同时购买一张或多张门票,例如基本门票、专业门票,这些门票可以来自同一活动的不同门票类别。这些类别没有座位号,只是在跟踪其容量。提前感谢您的帮助!谢谢售票处怎么样?如何查找用户的已取消订单历史记录?@Fabio:SELECT from order,其中user Id=和Status=已取消