Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用FKs查找数据库中两列之间的最短路径_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql server 使用FKs查找数据库中两列之间的最短路径

Sql server 使用FKs查找数据库中两列之间的最短路径,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,我目前正在从事一个项目,其中的数据图非常混乱。例如,如果您希望查找将应用合同的区域,而不是仅查找 如果在合同表中有区域的FK,则只有负责监控合同的机构的FK,然后从该表链接到 负责与该机构打交道的公司部门,然后从该部门转到业务部门ID,然后从业务部门表转到业务部门ID 你最终会找到你感兴趣的地区的FK 这是一个真正的痛苦,因为除此之外,业务逻辑是在数据库中实现的,这是一个相当复杂的行业。 因此,在开发时,我们要处理两个复杂问题:查找数据和理解业务逻辑 理解数据图实际上需要对领域有很好的理解。我知

我目前正在从事一个项目,其中的数据图非常混乱。例如,如果您希望查找将应用合同的区域,而不是仅查找 如果在合同表中有区域的FK,则只有负责监控合同的机构的FK,然后从该表链接到 负责与该机构打交道的公司部门,然后从该部门转到业务部门ID,然后从业务部门表转到业务部门ID 你最终会找到你感兴趣的地区的FK

这是一个真正的痛苦,因为除此之外,业务逻辑是在数据库中实现的,这是一个相当复杂的行业。 因此,在开发时,我们要处理两个复杂问题:查找数据和理解业务逻辑

理解数据图实际上需要对领域有很好的理解。我知道,我也同意,每个开发人员都应该了解他工作的领域, 但这是一项非常艰巨的任务。我们谈论的是一个受监管的行业,有很多具体的规则

通过我给出的例子,你可以看到,即使你在工作 在合同创建模块中,您不能只说:好吧,我将继续深入研究该部分的域,因为当涉及到查找区域时,您最终需要知道您将在数据图的另一部分找到它。 这仅仅是一个例子,真实的实体远没有那么直观

我昨天有个主意。由于在SQL Server中,我们可以访问所有数据库的模式,因此我想编写一个包含两个参数的脚本:

-表StartPoint的名称 -还有我们要找的列名

它将返回一个所有可能访问它的路径的“图”


这是一项容易的任务吗?你会怎么做?(我不是SQL Server专家)

写出来对我来说是一个相当大的任务,但是如果您使用sys.foreign\u键和sys.foreign\u键列创建一个递归CTE,您就可以完成这个任务。我认为这篇文章或这篇文章与我所描绘的很接近,然后只是应用了WHERE过滤器。

如果不提供您正在使用的所有数据,您就无法找到有效的答案,而您不能也不会这样做。您可能会发现为数据库的全部或部分创建
数据库图表
s很有用(假设它被正确约束-FK关系将自动为您绘制-并且您可以访问SQL Management Studio或等效工具)。BOL、Google或YouTube将是您的朋友谢谢,我将查看此信息