有没有办法找出表格的关系?

时间:2014-11-10 13:00:41

标签: sql database sql-server-2008 database-design database-schema

有一个非常古老的产品,有超过1500个表,并且表之间没有定义外键关系。

有什么方法可以找出表的关系吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果没有任何FK,就不可能确切地确定关系表有什么(如果有的话)。您可以在调用数据库的应用程序中确定这一点。例如,如果应用程序使用Entity Framework或Linq to SQL并使用DB,则可以在模型中定义关系,即使它们未在DB中定义。即使没有这个,也可以通过检查数据如何被重新生成以及根据这些数据创建的类来确定关系。

答案 1 :(得分:0)

如果表之间没有关系,则表之间没有关系。任何可以做的事情都会有些猜测,结果将是最平庸的,这将取决于原始开发人员如何命名表和列。

可能会帮助您入门的内容将是以下查询:

select distinct t1.name
from sys.columns s1
inner join sys.tables t1 on t1.object_id = s1.object_id
inner join sys.columns s2 on s1.name = s2.name
 and s1.object_id <> s2.object_id
inner join sys.tables t2 on t2.object_id = s2.object_id

这将为您提供一个表列表,其列的列与另一个表完全匹配。请注意,此查询会返回 lot 噪音(最有可能),但这可能会帮助您入门。