我必须对一种情况建模,即我有一个表Chequing_Account(包含预算,IBAN号和其他帐户详细信息),该表必须与两个不同的表Person和Corporation都可以具有0、1或许多支票帐户。
换句话说,我在同一个表中有两个一对多关系
我想听听尊重标准化要求的解决方案。我听到的大多数解决方案是:
1)找到一个人和公司都属于的公共实体,并在此实体和Chequing_Account表之间创建一个链接表,在我的情况下这是不可能的,即使我要解决一般问题而不是此特定实例也是如此。
2)创建两个链接表PersonToChequingAccount和CorporationToChequingAccount,它们将两个实体与Chequing Accounts关联起来。但是,我不希望两个人拥有相同的支票帐户,也不想让自然人和公司共享一个支票帐户!看到这张图片
3)在Chequing Account中创建两个指向公司和自然人的外键,但是我要强制一个人和Company可以有许多支票帐户,但是我必须手动确保对于每个ChequingAccount行,不是两个关系都指向公司和自然人,因为支票帐户是公司还是自然人。看到这张图片
是否有其他更清洁的解决方案来解决此问题?
CHECK (CorporationID IS NOT NULL AND NaturalPersonID IS NULL OR CorporationID IS NULL AND NaturalPersonID IS NOT NULL)
尽管如此,我还是更喜欢解决方案1(但这就是我自己)。它“干净”得多。
ChecquingAccount
表中有OwnerTypeID=1
和的记录OwnerID=123
,表明它是type Corporation
,因此123
是Corporation
表中的ID 。OwnerTypeID告诉您哪个表,而OwnerID告诉您该表中的ID。
Customers
桌子。
OwnerTypeID
在ChecquingAccount
表中使用1=Corporation
和2=NaturalPerson
?这样一来,您只需OwnerID
在ChecquingAccount
表格中添加一个即可将其与一起建立索引OwnerTypeID
。