如何确保具有复合主键的表中某些列具有相同的数据

问题描述 投票:0回答:1

我有一个名为

order
的表,它存储客户订单所需的内容。
该表包括(已简化):
orderID、stockID、数量、custID、handledBy 和状态。
该表的复合主键是orderID和stockID。

插入新记录时如何保证某些字段的数据相同?

例如:
我想添加这些记录:
(订单001、库存001、15、客户001、员工001、包装)
(订单001、库存002、50、客户001、员工001、准备发货)
如何确保 custID 和 StaffID 字段具有相同的数据,以免出现以下可能的情况?
(订单001、库存001、15、客户001、员工001、包装)
(订单001、库存002、50、客户005、员工007、准备发货)

这个想法是,每个订单都会有完全相同的客户(custID),并且相同的订单将始终由相同的员工(staffID)处理,因此如果 order001 属于客户 cust001 并由 Staff001 处理,则所有其他记录对于orderID order001,将始终将cust001作为custID中的数据,将staff001作为staffID中的数据

mysql
1个回答
0
投票

您可以通过用户触发来解决此问题 请参考下面的代码,它将只允许插入具有相同订单、custID和staffID组合的数据

删除表 MasterOrderCustStaffMapping 创建表 MasterOrderCustStaffMapping(orderID varchar(500), custID varchar(500), StaffID varchar(500))

插入 MasterOrderCustStaffMapping 从 Order_Details 中选择不同的 orderID、custID、staffID

在 Order_Details 上创建触发器 UPD_Order_Details 用于插入 作为 开始

删除O FROM 订单_详细信息 O 在 O.orderID=D.orderID AND O.stockID=D.stockID AND O.quantity=D.quantity AND O.custID=D.custID AND O.staffID=D.staffID AND O.status=D 上插入内连接 D 。地位 LEFT JOIN MasterOrderCustStaffMapping M ON D.orderID=M.orderID 和 D.staffID=M.staffID AND M.custID=O.custID 其中 M.orderID 为 NULL

结束

© www.soinside.com 2019 - 2024. All rights reserved.