在我們的數據庫系統中,我們有學生和人員領域。他們有PersonnelCardId和StudentCardId,我們把它們作爲主鍵。然後我們有一個支付cardID的支付設備,我們宣佈它是一個外鍵。我們不能在這種情況下插入一行,並且在研究之後,我們瞭解到我們不能將兩個主鍵引用到外鍵。那麼我們如何解決這種情況呢?謝謝。對外鍵的兩個主鍵引用
回答
正如你所說的,一個外鍵不能同時引用兩個不同的表。根據您目前的架構中,cardID
外鍵只能引用要麼PersonnelCardId
或StudentCardId
...
如果我理解正確的話,你的架構看起來像:
PersonnelCard
----------------
PersonnelCardID - PK
PersonnelCardFields
StudentCard
----------------
StudentCardID - PK
StudentCardFields
PaymentDevice
----------------
PaymentDeviceID - PK
CardID - FK
要解決這個問題,你必須找到一種方法,在PersonnelCard
和StudentCard
表結合...
Card
----------------
CardID - PK
CardType - (Personnel or Student)
CardFields
的FK在PaymentDevice
表,現在可以在新的引用PK表。
實際上,我們不希望將人員和學生表結合在一起,但我們想出了另一個解決方案,即我們將studentCardId和personnelCardId作爲列放入PaymentDevice字段,並且想要像那樣約束它們,alter table PaymentDevice add constraint PaymentDevice_con檢查((StudentCardID = NOT NULL AND PersonnelCardId = NULL),反之亦然);然而,它似乎不工作,所以你怎麼看?這不合乎邏輯嗎? –
@ user1463542與'NULL'比較時,您需要使用'IS'而不是'='...'(StudentCardID不爲NULL且PersonnelCardId爲NULL)' –
@ user1463542而不是將'student'和'人員'表,你還可以創建一個新的'卡'表,並且'人員'和'學生'擁有他們自己的FK到這張卡表嗎? –
- 1. 一個外鍵引用不同表的兩個主鍵?
- 2. SQL,兩個外鍵引用另一個表的相同主鍵
- 3. 創建具有複合主鍵的表引用兩個外鍵
- 4. 數據建模兩個引用相同主鍵的外鍵
- 5. POSTGRESQL外鍵引用兩個不同表格的主鍵
- 6. 一個外鍵和兩個主鍵
- 7. Mysql外鍵引用兩個列,它們是兩個不同表中的主鍵
- 8. 兩個外鍵作爲主鍵
- 9. 複合主鍵,外鍵。引用對象或關鍵字?
- 10. Laravel將外鍵引用移動到具有兩列的主鍵?
- 11. A柱作爲主鍵或兩個外鍵爲主鍵
- 12. MySQL查詢外鍵引用主鍵
- 13. 外鍵是否總是引用主鍵?
- 14. SQL:外鍵引用複合主鍵
- 15. 對同一表中的主鍵的外鍵引用EF6
- 16. 有兩個外鍵約束引用同一個主鍵,都使用ON UPDATE CASCADE
- 17. 引用相同列的兩個外鍵
- 18. MySQL:引用兩個父項的外鍵
- 19. 由兩個外鍵引用的Oracle列
- 20. 兩個外鍵引用一個表
- 21. 兩個外鍵引用另一個表
- 22. 跨2個表引用2個主鍵的外鍵?
- 23. 聚集索引的外鍵VS主鍵
- 24. 主鍵SQL中的兩個屬性(此密鑰的引用外鍵)
- 25. MySQL的 - 引用一個外鍵的多種可能的主鍵
- 26. 兩個主鍵
- 27. 如何將兩個主鍵用於一個外鍵?
- 28. Grails使用主鍵和外鍵顯示兩個表中的值
- 29. Django兩個自引用外鍵
- 30. 跨多個表引用主鍵的外鍵?
任何作爲'子'的表(例如,有一個外鍵指向另一個'父'表)必須在父表中有一個匹配的記錄,然後才能插入到子中。例如創建您的人事和/或學生記錄之前,你沒有進入支付表。 –
Okey,我們的問題是我們有兩個不同的Card ID,一個是studentCardId,另一個是名爲StudentsCardId的兩個不同的表名爲Students和Personnels,我們將它們聲明爲主鍵。所以根據你的定義,如果我們可以爲一個表添加一個匹配的記錄,它將失敗的另一個表。那麼我們該如何解決這個問題呢?我們應該改變什麼? –