-1

我正在開發一個數據庫模式,並圍繞圍繞開發模式的一部分的柵欄。我有外鍵去某些表,有很多表包含一箇中心表的外鍵。數據庫規範化 - 外鍵一致性

我正在設計的兩個表中,我使用「ID類型」查找(外鍵列出ID所屬的類型/表),然後設置了FK ID值。我想知道是否應該爲所有表外鍵做到這一點,以保持一致。對於這兩個表格,可能需要將它們連接到不同的表格,具體取決於記錄的內容。認爲人們被綁定到流程的不同方面,因此人員記錄將被鏈接回1個表格或不同的表格,具體取決於他們參與流程的位置。

對於其他表格,它們實際上只會鏈接到該主要中央表格。我應該直接將一個明確的外鍵,直接留給那個表,還是一直保留一個ID類型/表和一個基於ID類型錶鏈接的FK ID?

如果這沒有意義,讓我知道,我會盡力解釋更好。

謝謝!

+1

你不清楚。例如,「我設置了一個」ID類型「查找([...]),然後是FK ID值」 - 我們不知道「設置」是什麼意思,我們不知道FK是什麼去哪裏。清楚指示對象。請給出DDL,示例數據和表格含義。 PS FK是約束條件。他們說,亞行也出現在其他地方。他們告訴DBMS數據庫狀態可能會出現*給定*什麼表意味着什麼業務情況可能出現。設計*表格的含義*。使用ID來識別/命名商業實體/事物。通常不需要關聯表id,其實體形成PK。 FKs最後。 – philipxy

+0

根據自我回答的第一句,這是關於(?!)「外鍵列,它鏈接到不同的表,基於另一個表標識符列(請參閱我的評論)。所以它是一個重複的[ MySQL外鍵使用多個字段引用另一個表中的主鍵](https://stackoverflow.com/questions/41047790/mysql-foreign-key-using-more-than-one-field-to-reference從數據庫設計 - 文章,博客文章,照片,故事](https://stackoverflow.com/questions/4969133/database-design-articles-blog-to-a-key-from-a)和/ – philipxy

回答

0

與一位同事交談時,建議我沒有一個外鍵列,它根據另一個表標識符列鏈接到不同的表。顯然這可能會很快變得危險,因爲如果人們不小心,身份證可能會錯誤地與錯誤的表相關聯。

建議是讓人員表格,然後是多個人員交叉引用表格,每個人員需要鏈接到數據的每個區域。每個CR表將具有非空外鍵,並且僅記錄到FK鏈接到的1個表。還會有一個人員類型ID,以便一個人可以在需要存在的儘可能多的CR內存在多個類型/卷。

如果有人不同意,我很樂意儘可能多地拿到我所能做到的。

+0

在你的問題中沒有提及它是關於這個答案的第一句話的,FK反模式通常是模擬「SQL /數據庫子類型」的錯誤方法。這個答案的其餘部分與你的問題一樣不清楚,你需要停止標記你*沒有說過的東西*想到的詞(例如「數據領域」)和*說*你的意思。例子有幫助,但你仍然需要說出它們是*的例子。 – philipxy

+0

在設計中,當列的列值必須出現在另一列的列表中時,FK約束纔有效。我們聲明FK,以便DBMS拒絕無效更新。如果一列的值只限於其他幾個地方之一(每個類型列),那麼這不是一個FK持有的例子;這是一個不同的約束。每個目標表的不同的可空列組將是FK。類型列可以指示哪些FK(或者表,如果每個表有一個)持有。所以可能只是每個FK是否爲空。但這些都是分型的反模式。因此,這個答案。 – philipxy