Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 我应该使用什么数据结构来跟踪依赖关系?_Sql_Database_Data Structures_Binary Tree_Dependencies - Fatal编程技术网

Sql 我应该使用什么数据结构来跟踪依赖关系?

Sql 我应该使用什么数据结构来跟踪依赖关系?,sql,database,data-structures,binary-tree,dependencies,Sql,Database,Data Structures,Binary Tree,Dependencies,我在关系数据库中有一堆表,很明显,它们由于外键关系而相互依赖。我想构建一个依赖关系树,遍历它,并输出INSERT SQL语句。我需要首先在依赖关系树中输出外键表的SQL,因为父表将依赖于它们的外键标识符表中的值 按后序遍历的二叉树是否适合此任务?如果一个表可以依赖于两个以上的表,则二叉树就不够了。 让表A依赖于表B、C和D。然后必须先插入到B、C和D中,即A在树中应有三个子节点 我认为您需要使用更通用的树结构,它允许任意数量的子节点。按照您的建议,按后序遍历此树结构应该会产生所需的结果 当依赖关

我在关系数据库中有一堆表,很明显,它们由于外键关系而相互依赖。我想构建一个依赖关系树,遍历它,并输出INSERT SQL语句。我需要首先在依赖关系树中输出外键表的SQL,因为父表将依赖于它们的外键标识符表中的值


按后序遍历的二叉树是否适合此任务?

如果一个表可以依赖于两个以上的表,则二叉树就不够了。 让表A依赖于表B、C和D。然后必须先插入到B、C和D中,即A在树中应有三个子节点

我认为您需要使用更通用的树结构,它允许任意数量的子节点。按照您的建议,按后序遍历此树结构应该会产生所需的结果


当依赖关系图包含循环时,事情将开始变得混乱,需要推迟约束检查;)

如果一个表可以依赖于两个以上的表,那么二叉树是不够的。 让表A依赖于表B、C和D。然后必须先插入到B、C和D中,即A在树中应有三个子节点

我认为您需要使用更通用的树结构,它允许任意数量的子节点。按照您的建议,按后序遍历此树结构应该会产生所需的结果


当依赖关系图包含循环时,事情将开始变得混乱,需要推迟约束检查;)

请看以下内容:

Microsoft.SqlServer.Management.Smo.Server
Microsoft.SqlServer.Management.Smo.Database
Microsoft.SqlServer.Management.Smo.Scripter

Microsoft.SqlServer.Management.Smo.DependencyTree
Microsoft.SqlServer.Management.Smo.DependencyWalker
Microsoft.SqlServer.Management.Smo.DependencyCollection
Microsoft.SqlServer.Management.Smo.DependencyCollectionNode

MSDN上有关于如何使用所有这些的示例

基本上你想要的是

Server server = new Server(SOURCESERVER);
Database database = server.Databases[SOURCEDATABASE];
Scripter sp = new Scripter(server);

...

UrnCollection col = new UrnCollection();

foreach (Table table in database.Tables)
{
    col.Add(table.Urn);
}

....

DependencyTree tree = sp.DiscoverDependencies(col, DependencyType.Parents);
DependencyWalker walker = new DependencyWalker(server);
DependencyCollection depends = walker.WalkDependencies(tree);

//Iterate over each table in DB in dependent order...
foreach (DependencyCollectionNode dcn in depends)

...

请看以下内容:

Microsoft.SqlServer.Management.Smo.Server
Microsoft.SqlServer.Management.Smo.Database
Microsoft.SqlServer.Management.Smo.Scripter

Microsoft.SqlServer.Management.Smo.DependencyTree
Microsoft.SqlServer.Management.Smo.DependencyWalker
Microsoft.SqlServer.Management.Smo.DependencyCollection
Microsoft.SqlServer.Management.Smo.DependencyCollectionNode

MSDN上有关于如何使用所有这些的示例

基本上你想要的是

Server server = new Server(SOURCESERVER);
Database database = server.Databases[SOURCEDATABASE];
Scripter sp = new Scripter(server);

...

UrnCollection col = new UrnCollection();

foreach (Table table in database.Tables)
{
    col.Add(table.Urn);
}

....

DependencyTree tree = sp.DiscoverDependencies(col, DependencyType.Parents);
DependencyWalker walker = new DependencyWalker(server);
DependencyCollection depends = walker.WalkDependencies(tree);

//Iterate over each table in DB in dependent order...
foreach (DependencyCollectionNode dcn in depends)

...

n元树上的好球。n元树上的好球。啊,太好了。糟糕的是我使用的是PHP,糟糕的是我的数据库缺少外键约束。我最后只是使用了一个递归方法。啊,太好了。糟糕的是我使用的是PHP,糟糕的是我的数据库缺少外键约束。我最终只是使用了一种递归方法。