如何将外键约束引用添加到IS-A-Two-Tables关系中?
问题描述:
首先在我的ER-型号我有具有IS-A有两个不相交的子实体储蓄账户和支票账户关系的账号实体。 但是我有一个客户实体存款人与账户关系的实体,这样的用例如下面的ER图。如何将外键约束引用添加到IS-A-Two-Tables关系中?
因此,我的ER翻译成这样的表:
客户(CID,CNAME)
存款(CID,帐户数)
储蓄账户(账号,平衡,利率)
支票账户(帐户数,平衡,透支量)
所以最后,我只取2个表储蓄账户和检查账户从IS-A关系。
然后出现问题,创造存款表,我采取了T-SQL:
CREATE TABLE depositor(
customer_id int not null,
account_number int not null,
access_date Date DEFAULT GETDATE(),
PRIMARY KEY(customer_id, account_number),
FOREIGN KEY(customer_id) REFERENCES customer(customer_id),
FOREIGN KEY(account_number) REFERENCES account(account_number)
)
在最后一行,外键ACCOUNT_NUMBER应参照帐户表,但我有什么储蓄帐户和检查帐户表。在这种情况下,我如何在T-SQL中添加一个约束?如果我只从IS-A关系中获取两个表,是否可以添加一个约束?
答
我建议你有一个额外的表account
。然后saving-account
和checking-account
应该是单独的表格指向那个。
此外,您应该有一个account_id字段作为PK而不是account_number。作为最佳实践规则,PK不应具有任何商业含义,它应该是一个抽象的概念。
综上所述,笔者建议如下表:
account(aid, account-number, balance, plus any other common field for account)
saving-account([optional pk], aid_ref, interest-rate, plus fields specific to saving-account)
checking-account([optional pk], aid_ref, overdraft-amount, plus fields specific to saving-account)
customer(cid, cname)
depositor(cid, aid)
谢谢,但它是可能实现,而无需在T-SQL的帐户表? –
编号外键不能有条件 – FLICKER