Sql 我应该使用什么数据结构来跟踪依赖关系?
我在关系数据库中有一堆表,很明显,它们由于外键关系而相互依赖。我想构建一个依赖关系树,遍历它,并输出INSERT SQL语句。我需要首先在依赖关系树中输出外键表的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在树中应有三个子节点 我认为您需要使用更通用的树结构,它允许任意数量的子节点。按照您的建议,按后序遍历此树结构应该会产生所需的结果 当依赖关
按后序遍历的二叉树是否适合此任务?如果一个表可以依赖于两个以上的表,则二叉树就不够了。 让表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,糟糕的是我的数据库缺少外键约束。我最终只是使用了一种递归方法。