mysql - SQL - 确保一个表中的值与另一表中的适当值相关联的约束

标签 mysql sql

我不太确定如何表达。我的预订系统有 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/

相关文章:

php - 如何在 mySQL 数据库中正确存储事件的重复和复杂的提醒?

mysql - 使用内连接从查询中返回最小值

mysql - SQL Fiddle - 无法添加外键约束

C# SqlDataReader = 空?

sql - 平面数据层次顺序

php - 更新 wampserver 中的值

php - 将mysql转换为mysqli时出错

javascript - jQuery Datepicker 值并存储到 php 变量中

php - 将 2 个 WHERE 语句放在一起

mysql - 有什么方法可以显示 `gunzip < database.sql.gz | mysql ...` 进程的进度吗?