目前 2 個表有關係時,如何將 2 個表關聯到第三個表?
這一次,我發現自己在想出一個好的問題標題方面完全不知所措。
考慮以下三個表格。每個都有額外的列,但只提到與表之間的關係相關的列:
- 表
a
有一個主鍵a_id
- 表
b
有一個主鍵b_id
和一個a_id
作為外鍵的列a
(一對多關係)- 表
reference
有一個主鍵ref_id
reference
是引用來證實其他 2 個表格中包含的資訊的來源列表。因此,我需要表格將它們聯繫在一起。兩者a
和都與b
具有多對多關係reference
,但還有一個複雜的問題:腳註編號。a
此腳註編號對於每個and對必須是唯一的,但僅當存在 a和相同reference
的關係時才需要。(當然,這必須與相同的.)有關。到目前為止,我想出的表示這種關係的最好方法是一對錶:b``reference``b``a
bridge_a_reference
:
- 列:
a_id
,ref_id
,footnote_num
(可為空)- 主鍵:
a_id
,ref_id
- 外鍵:
a_id
到表a
;ref_id
到餐桌reference
bridge_b_reference
:
- 列:
b_id
,a_id
,ref_id
- 主鍵:
b_id
,ref_id
- 外鍵:
b_id
,a_id
to tableb
;a_id
,ref_id
到表bridge_a_reference
這確保了數據的一致性。只有
b
和之間存在reference
對應關係,a
並且與正確相關,才可能存在關係。它還確保所有/對的腳註編號都是一致的。但是,它是多餘的,第二次儲存和之間的關係(儘管至少強制保持一致),並且不能確保/關係需要腳註編號。reference``b``a``a``reference``a``b``b``reference
我已經嘗試過幾次重新排列我腦海中的表格,但是我能想到的所有其他事情都允許某種不一致(
b
對於reference
沒有對應關係的a
關係reference
或關係或/b
對a
的腳註編號不一致。)我怎樣才能更好建構我的橋接表以消除冗餘並確保腳註要求?甚至可能嗎?a``reference
這是一個建議,因此您可以以聲明方式強制執行您想要的約束。(我稍微簡化了表名,刪除了
bridge_
前綴。)我們
footnote_num
從:Table: a_ref -- was named: bridge_a_reference a_id, ref_id Primary key: (a_id, ref_id) Foreign keys: a_id -> a ref_id -> reference
我們添加了這個表——它基本上只儲存那些
a_ref
帶有腳註的行,那些你想添加子元素的行b_ref
:Table: a_ref_with_footnote a_id, ref_id, footnote_num Primary key: (a_id, ref_id) Unique key: (a_id, footnote_num) Foreign keys: (a_id, ref_id) -> a_ref
a_ref_with_footnote
最後,除了現在引用中間表 ( )的外鍵外,第三個表與您的設計保持一致:Table: b_ref -- was named: bridge_b_reference: a_id, b_id, ref_id, Primary key: (b_id, ref_id) Foreign keys: (a_id, b_id) -> b (a_id, ref_id) -> a_ref_with_footnote