SQL Server数据库中未定义的关系(外键)

时间:2012-02-16 18:00:51

标签: sql-server-2005 foreign-key-relationship undefined-reference

我正在使用包含近850个表的SQL Server数据库。它有许多已定义的关系和大量未定义的关系(FK),未定义的主键等。这是一团糟。我无权访问应用程序源代码,因此无法通过代码跟踪未定义的关系。

是否有任何软件或查询可以查看数据并找出表之间的关系?更具体地说,每个表中的每个字段(列)都映射(连接)所有其他表的每个列,并为我提供某种报告。几乎60%的情况下,列名在相关表中相似,但许多表具有相同的主键列名(例如item_id)。

我需要所有那些未定义的关系,这让我的生活每天都很悲惨! :(

2 个答案:

答案 0 :(得分:2)

我认为最好的办法是使用分析器来捕获正在执行的语句,然后尝试推断出与之关系。这是一个艰难的,我没有任何简单的解决方案。

祝你好运!

答案 1 :(得分: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';

看是否有明显的匹配。

这可能有助于您掌握数据库。但这需要做很多工作。

没有外键约束,甚至可能他们已经完成了诸如“多键”之类的事情,其中​​某个列是一个或另一个表的外键,这取决于某种类型的选择器(这些是不可能的)使用外键约束) - 除了单独的连接之外,您甚至不会在分析器中看到这一点 - 所以有一次您可能会看到它连接到一个表,有时是另一个表。