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

时间:2009-06-09 22:35:39

标签: sql database data-structures binary-tree dependencies

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

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

2 个答案:

答案 0 :(得分:3)

看看以下内容:

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)

...

答案 1 :(得分:1)

如果表可以依赖于两个以上的表,则二叉树将不足。 让表A依赖于表B,C和D.然后你必须首先插入B,C和D,即A应该在你的树中有三个子节点。

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

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