0

リレーショナル データベースには、明らかに外部キー関係のために互いに依存しているテーブルがたくさんあります。依存関係ツリーを構築し、それをトラバースして、INSERT SQL ステートメントを出力したいと考えています。親テーブルは外部キー識別子テーブルの値に依存するため、最初に依存関係ツリー内の外部キー テーブルの SQL を出力する必要があります。

ポストオーダーでたどる二分木は、このタスクに適しているように見えますか?

4

2 に答える 2

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)

...
于 2009-06-11T09:45:25.483 に答える
1

テーブルが 3 つ以上のテーブルに依存する可能性がある場合、バイナリ ツリーでは不十分です。テーブル A がテーブル B、C、および D に依存しているとします。次に、最初に B、C、および D に挿入する必要があります。つまり、A はツリーに 3 つの子ノードを持つ必要があります。

任意の数の子ノードを許可する、より一般的なツリー構造を使用する必要があると思います。あなたが提案したように、このツリー構造をポストオーダーでトラバースすると、望ましい結果が得られるはずです。

ディペンデンシー グラフにサイクルが含まれていて、制約チェックを延期する必要がある場合、事態は混乱し始めます;)

于 2009-06-09T23:15:23.813 に答える