0

我有很多對錶,我想要有效地確定哪些對具有通過PK-FK關係彼此相關的表。如何有效地確定兩個表是否相關?

  1. 如果記錄了PK-FK關係,我會利用這一點,但我不能認爲它總是記錄在案。 (例如,如果源文件是平面文件等)
  2. 如果沒有文檔記錄,我需要一種方法來有效地確定這兩個表是否相關。
  3. 如果對中的表與非複合鍵無關,我需要使用複合鍵。

我要找的是以下情況之一:

  1. 任何現有的算法。
  2. 任何研究論文。
  3. 任何想法/指針。
  4. 任何類似的在線作品。
  5. 書建議等

例如:

想我再也以下表對:

{Table1, Table2} 
{Table3, Table4} 
{Table5, Table6} 

還有更多...

出了上述的如果表格3和表格4通過PK-FK關係相互關聯,我想返回對{Table3, Table4}。要返回正確的對,我需要一種有效的方法來確定表是否相關(假設關係沒有記錄)。

注意:我正在尋找基於數據的表發現爲表之間的PK-FK關係,而不僅僅是基於元數據的發現(因爲在某些情況下元數據可能不可用)。

非常感謝提前。

+0

[用於在數據庫中發現事實上的外鍵的工具?]的可能重複(http://stackoverflow.com/questions/7031203/tools-for-discovering-de-facto-foreign-keys-in-databases) – philipxy

+0

除了上面的重複之外,請繼續在數據庫stackoverflow.com中搜索「(查找或發現)(​​」外鍵「或依賴關係或關係或關係)。還有很多隻需要元數據查詢的問題都得到了有關發現的答案 – philipxy

回答

0

聲明:我是一個這樣的算法,鏈接器的作者。 Linkifier根據元數據(如列名及其數據類型的相似性)和列統計信息(如平均列寬度(字節))估計FK約束。

之前還有人說,重要的是要指出,FK約束識別通常是一個棘手的問題 - 有理由爲什麼DB不推斷FK約束,但用戶必須提供它們。因此,不要期望估計值是100%準確的。

一般建議的工作流程,如果你想設置的約束在數據庫:

  1. 確保列具有合理的數據類型和名稱。 DBLint可能會有所幫助。
  2. 如果數據庫很小,請告訴數據庫計算數據庫中所有列的統計信息。這將提高PK和FK約束估計的準確性。但是,對龐大而複雜的數據庫進行統計計算可能需要相當長的時間。另一方面,統計數據不一定準確(根據所有數據計算) - 估計(基於數據的子樣本)就足夠了。請查閱您的數據庫供應商的文檔。
  3. 如果未在數據庫中設置PK,則讓Linkifier估算PK。查看估算後,在數據庫上執行生成的SQL alter查詢。真正的PK知識將提高FK約束估計的準確性,因爲FK約束的一邊將被認爲是正確的。警告:設置和執行PK可能非常耗時(特別是在大型事務表上)。
  4. 如果您已將PK添加到數據庫中,請重新運行Linkifier以獲取FK約束的實際估計值。
  5. 在仔細重新激活FK約束估計之後,對數據庫執行生成的alter查詢。警告:由於誤報可能實際上被數據庫接受爲有效,因此不鼓勵對數據庫盲估應用FK約束。另外,建立和執行FK約束可能非常耗時。

如果您只想生成ER圖,請從Linkifier導出估算值並使用yEd(適用於ER圖的合適佈局算法爲BPMN)或Oracle Data Modeler對其進行可視化。

相關問題