是否可能有1到0或1的递归关系,以及如何查询这样的表?

ev7lccsx  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(396)

这个票证表应该用于队列系统中,我可以将票证从服务队列转发到不同的队列。
我的票证表有如下字段 number , ticketRequest (创建票证的时间戳), expectedCallTimestamp (要参加的预测呼叫的时间戳)等。。。
以下是表票证的创建脚本:

CREATE TABLE `ticket` (
 `ticket_id` int(11) NOT NULL AUTO_INCREMENT,
 `wrong_ticket_id` int(11) DEFAULT NULL,
 `number` int(3) NOT NULL,
 `forwarded` tinyint(1) NOT NULL DEFAULT '0',
 `answered` tinyint(1) DEFAULT NULL,
 `ticketRequest` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `expectedCallTimestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `callTimestamp` timestamp NULL DEFAULT NULL,
 `serviceDuration` time DEFAULT NULL,
 `service_id` int(11) NOT NULL,
 `organic_unit_id` int(11) NOT NULL,
 `device_id` int(11) NOT NULL,
 `user_id` int(11) DEFAULT NULL,
 `counter_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`ticket_id`),
 UNIQUE KEY `UQ_ticket_wrongTicketId` (`wrong_ticket_id`) USING BTREE,
 KEY `FK_ticket_queue` (`service_id`,`organic_unit_id`),
 KEY `FK_ticket_device` (`device_id`),
 KEY `FK_ticket_workerbycounter` (`user_id`,`counter_id`),
 CONSTRAINT `FK_ticket_device` FOREIGN KEY (`device_id`) REFERENCES `device` (`device_id`),
 CONSTRAINT `FK_ticket_queue` FOREIGN KEY (`service_id`, `organic_unit_id`) REFERENCES `queue` (`service_id`, `organic_unit_id`),
 CONSTRAINT `FK_ticket_workerbycounter` FOREIGN KEY (`user_id`, `counter_id`) REFERENCES `workerbycounter` (`user_id`, `counter_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1

好的,所以我想的是——当一个客户选择了一个他打算选择的不同的服务时(有时会发生),作为柜台后面的操作员,我可以用相同的服务创建一个新的票证 ticketRequest 错误服务票证的时间戳,并使用该错误服务票证的时间戳。 ticket_id 通过转发邮件引用。 wrong_ticket_id (具有预期/正确服务的人)用于多种目的。
我的方法是在表ticket上有一个1到0或1的递归关系,其中有一个可为null且唯一的字段 wrong_ticket_id 这和错误的服务票是一样的。 ticket_id 如前所述,创建forwardedticket时。
下面是我试图构建的数据模型示例:

有没有可能实现这个功能,或者有没有更好的方法来处理这个问题?以及如何选择错误服务票证的信息,例如,当有一张票证和其他没有被转发的票证在同一队列中转发时,调用队列中的下一张票证?

shyt4zoc

shyt4zoc1#

据我所知,您打算在现有票据(错误票据)和新票据(更正票据)之间建立亲子关系。
你建议的方法是可行的,除了一些小的修正-
将错误的\u ticket \u id列保留为可空,因为在使用有效服务创建的大多数票证中,该列可以为空。
您可以选择对错误的\u票证\u id设置检查约束。只有当“forwarded”为true时,才会填充此列。

相关问题