2016-11-23 45 views
0

我不完全确定如何对此进行说明。我有一个预订系统,包括'支付','信用卡''预订'。我需要添加一个约束以确保'Payments'表中的信用卡ID属于与“付款”表中的信用卡ID号码位于同一行的预订客户。SQL - 确保一个表中的值与另一个表中的相应值绑定的约束条件

信用卡 - 包含属性 “CC_ID”, “CUSTOMER_ID”, “CARD_NUMBER”

预订 - 包含属性 “R_ID”, “Schedule_ID”, “CUSTOMER_ID”

付款 - 包含属性 “CC_ID”, “保留” 是

所以基本上,我需要检查在付款,这是针对某一客户ID 信用卡,则CC_ID属于一个由可在预订预订同一客户,并最终与对应预订号码Payemnts。当将值添加到Payments表时,这将成为输入限制,而不是在输入时手动检查以确保其属于客户。

+1

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

回答

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表不需要这两个密钥,但它们都允许您在两个列上创建外键约束。

相关问题