0

我正在使用包含近850個表的SQL Server數據庫。它有很多已定義的關係和大量未定義的關係(FK),未定義的主鍵等。這是一團糟。我無法訪問應用程序源代碼,因此我無法通過代碼追蹤未定義的關係。SQL Server數據庫中的未定義關係(外鍵)

是否有任何軟件或查詢由我只能看數據,並計算出表之間的關係?更具體地說,每個表中的每個字段(列)都映射(加入)所有其他表的每一列,併爲我提供某種類型的報告。將近60%的情況下,列名在相關表中將類似,但許多表具有相同的主鍵名稱(例如item_id)。

我需要它正在每天苦不堪言我一生所有這些不確定的關係! :(

+0

同意當前2和(可能)所有後續答覆。這是一個「精靈」問題:一旦你讓精靈脫離瓶子(沒有陳述性的參照完整性),它很難將它拿回瓶中。 – 2012-02-16 19:51:09

回答

2

我認爲最好的方法是使用Profiler來捕獲正在執行的語句,並嘗試推斷的關係。這是一個艱難的一個,並沒有任何簡單的解決方案,我所知道!的

好運

+0

這是一個由許多開發人員組織處理的巨大應用程序。我認爲需要一年時間才能完成應用程序中的所有按鈕的點擊。我已經嘗試了剖析器並找出了一些鏈接,但大多數情況下我甚至無法確定哪個應用程序頁面與特定數據庫表關聯。無論如何,我可以在不向所有表寫入觸發器的情況下獲得在數據庫中執行的所有DML查詢? – 2012-02-17 15:09:42

1

好了,你可以查詢元數據 - INFORMATION_SCHEMA.COLUMNS - 過濾掉東西是不大可能加入成爲關鍵 - 就像TEXT/NVARCHAR(MAX),把它放在某種。數據字典表,你開始與信息標記列

您可以用之類的東西查詢:

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS AS C 
INNER JOIN INFORMATION_SCHEMA.TABLES AS T 
    ON C.COLUMN_NAME = T.TABLE_NAME + '_ID'; 

看看是否有明顯的匹配。

這可能會幫助你的數據庫的處理。但這需要很多工作。

如果沒有外鍵約束,甚至有可能他們已經完成了諸如「多鍵」之類的事情,其中​​某個列是某個表或另一個表的外鍵(取決於某種類型的選擇器)可能有外鍵約束) - 有可能你甚至不會在分析器中看到這一點,除非在單獨的連接之間 - 所以有一次你可能會看到它連接到一個表,有時甚至是另一個表。

+0

謝謝凱德。我已經嘗試了所有可以與列名匹配的東西,並找出了我可以達到的最大關係。但我想把數據帶入畫面。例如Table a內部連接a.product_id(int)= b.item_id(varchar(10))上的表B,列名是不同的,但數據很陌生。我想要加入一列與850表中的所有列併爲數據庫中的所有列做這些工作。是否有任何簡單的方法,我可以使用某種工具來做到這一點 – 2012-02-17 15:16:20

+0

@need_the_buzz你當然可以編碼生成所有類似數據類型字段的比較,並獲得每一側的計數和計數匹配,但沒有我知道的工具。 – 2012-02-17 16:11:43