我不太确定如何表达。我的预订系统有 3 个表,其中包括“付款”、“信用卡” 和 “预订”。我需要添加一个约束,以确保“付款”表中的信用卡 ID 属于进行预订的客户,该客户与付款表中的信用卡 ID 号位于同一行。
信用卡 - 包含属性“CC_ID”、“Customer_ID”、“Card_Number”
预订 - 包含属性“R_ID”、“Schedule_ID”、“Customer_ID”
付款 - 包含属性“CC_ID”、“预订”
因此,我基本上需要检查付款中的 CC_ID(与信用卡中的客户 ID 绑定(bind))是否属于进行预订的同一客户位于预订中,最终与付款中的预订编号相对应。当将值添加到“付款”表时,这将是一个输入约束,而不是在输入时手动检查以确保它属于客户。
最佳答案
执行您想要的操作的一种方法涉及触发器。简单的约束是不行的。 。 。少一点点改变数据结构。
因此,一种方法是更改付款
以包含customer_id
。我意识到这是多余的,但是您可以使用外键约束。
alter table payments add customer_id . . . ;
alter table reservations add constraint unq_reservations_2
unique (customer_id, r_id);
alter table payments add constraint
foreign key (customer_id, reservation) references reservations(customer_id, r_id);
虽然 reservation
表不需要这两个键,但拥有这两个键允许您在两列上创建外键约束。
关于mysql - SQL - 确保一个表中的值与另一表中的适当值相关联的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775970/