我在如何设计一个表,必须有一个主键是两个互斥表的外键的问题。主键是两个不同的互斥表的外键
+----------------+ +-----------------+
| PARTY | + PERSON +
+----------------+ +-----------------+
| Unique ID (PK) | -|------O|-| Unique ID (FK) |
| Party Type | | some details |
| | +-----------------+
| |
| | +-----------------+
| | | BUSINESS |
| | +-----------------+
| | | Scheme Code (PK)|
| | -|------O|<| Serial No (PK) |
| | | Unique ID (FK) |
| | | some details |
+----------------+ +-----------------+
+-----------+ +-----------------+
| PERSON | -|-----------O|<| BANK ACCOUNT |
+-----------+ +-----------------+
| Account No (PK) |
+-----------+ | Unique ID (FK) |
| BUSINESS | -|-----------O|<| Scheme Code (FK)|
+-----------+ | Serial No (FK) |
| some details |
+-----------------+
有4个实体。一方可以是个人或企业(但不能在同一时间)。一个人可以拥有一个或多个银行账户,一个企业也可以拥有一个或多个银行账户。
对于一个人,只能分配一个唯一ID。
对于一个企业,它可以共享相同的唯一方ID给它具有(计划编号,序列号,和唯一ID)的独特组合
党的主键是唯一的ID“
PERSON的主键是唯一的ID“
企业的主键是唯一的ID”, '方案代号' 和 '序列号'
银行帐户是p& rimary密钥是PERSON和BUSINESS的所有密钥的组合,唯一的公共外键是'唯一ID','Scheme Code'/'序列号'是仅限于BUSINESS的外部密钥。
我认为这个问题是在银行帐户实体。如果PARTY是商业用户,所有主/外密钥都被填充(唯一ID,方案代码,序列号),则不存在任何问题。但是,如果PARTY是PERSON,则只会填充唯一ID并且其他两个键将具有NULL值。我认为不允许使用NULL主键。
嗨Simofuri,谢谢你的回答。我的问题是,当BANK_ACCOUNT for BUSINESS将共享相同的account_no,但使用不同的scheme_code和serial_no。 PARTY是与商业的一对多关系。只要与scheme_code和serial_no的组合是唯一的,那么BUSINESS就可以拥有相同的party_id。 –
例如,scheme_code'1'下的BUSINESS'A'将与scheme_code'2'下的BUSINESS'A'共享相同的account_no'abc',但scheme_code'3'下的BUSINESS'A'将拥有不同的account_no'efg'。如果我们仅将BANK_ACCOUNT中的party_id作为FOREIGN KEY引用PARTY,那么我们如何确定BUSINESS_A'对于scheme_code'1'/'2'具有account_no'abc'并且对于scheme_code'3'具有account_no'def' ? –