2017-10-29 62 views
0

首先在我的ER-型号我有具有IS-A有两个不相交的子实体储蓄账户支票账户关系的账号实体。 但是我有一个客户实体存款人账户关系的实体,这样的用例如下面的ER图。如何将外键约束引用添加到IS-A-Two-Tables关系中?

enter image description here

因此,我的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关系中获取两个表,是否可以添加一个约束?

回答

1

我建议你有一个额外的表account。然后saving-accountchecking-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) 
+0

谢谢,但它是可能实现,而无需在T-SQL的帐户表? –

+0

编号外键不能有条件 – FLICKER