0

首先在我的 ER 模型中,我有一个account实体,它与两个不相交的子实体 Saving -account和checks- account具有IS-A关系。但是,我有一个客户实体与帐户实体有存款人关系,例如下面的 ER 图这样的用例。

在此处输入图像描述

因此,我将 ER 翻译成这样的表:

客户(cid,cname)

存款人(cid帐号

储蓄账户(帐号,余额,利率)

支票账户(帐号,余额,透支金额)

所以最后,我只从 IS-A 关系中取出两张表储蓄账户和支票账户。


那么问题就来了,为了创建depositor表,我取了一个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应该引用account表,但我拥有的是储蓄账户支票账户表。在这种情况下,如何在 T-SQL 中添加约束?如果我只从 IS-A 关系中获取两个表,是否可以添加约束?

4

1 回答 1

0

我建议你有一个额外的桌子叫做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)
于 2017-10-29T06:42:25.757 回答