【问题标题】:SQL - Constraint to ensure value in one table is tied to the appropriate value in another tableSQL - 确保一个表中的值与另一表中的适当值相关联的约束
【发布时间】:2016-11-24 07:58:08
【问题描述】:

我不完全确定如何措辞。我有 3 个用于预订系统的表,其中包含 'Payments''Credit Cards''Reservations'。我需要添加一个约束,以确保“付款”表中的信用卡 ID 属于进行预订的客户,该客户与付款表中的信用卡 ID 号位于同一行。

信用卡 - 包含属性“CC_ID”、“Customer_ID”、“Card_Number”

Reservations - 包含属性“R_ID”、“Schedule_ID”、“Customer_ID”

Payments - 包含属性“CC_ID”、“Reservation”

所以我基本上需要检查 Payments 中的 CC_ID,它与 Credit Cards 中的客户 ID 相关联,属于进行预订的同一客户位于 Reservations 中,并最终与 Payemnts 中的 Reservation 编号相对应。当值被添加到 Payments 表时,这将是一个输入约束,而不是在输入时手动检查以确保它属于客户。

【问题讨论】:

  • 请为您正在使用的数据库系统添加标签。答案将取决于此

标签: mysql sql


【解决方案1】:

执行您想要的操作的一种方法是使用触发器。简单的约束是不行的。 . .少一点你稍微改变一下数据结构。

因此,一种方法是将payments 更改为包含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 表不需要这两个键,但同时拥有这两个键允许您在两个列上创建外键约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2020-12-03
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多