我在如何設計一個表,必須有一個主鍵是兩個互斥表的外鍵的問題。主鍵是兩個不同的互斥表的外鍵
+----------------+ +-----------------+
| 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' ? –