2009-06-09 49 views
0

我有一堆關係數據庫中的表,顯然,由於外鍵關係而相互依賴。我想構建一個依賴關係樹,遍歷它並輸出INSERT SQL語句。我需要首先在依賴關係樹中爲外鍵表輸出SQL,因爲父表將依賴於其外鍵標識表中的值。我應該用什麼數據結構來跟蹤依賴關係?

在後序遍歷的二叉樹看起來適合這個任務嗎?

回答

1

如果一個表可能依賴於兩個以上的表,則二叉樹將不夠用。 讓表A依賴於表B,C和D.然後你必須首先插入B,C和D,即A應該在你的樹中有三個子節點。

我想你需要使用更一般的樹結構,它允許任意數量的子節點。正如你所建議的那樣,在後序中遍歷這個樹結構應該會產生所需的結果。

事情開始變得混亂,當你依賴圖包含循環,你需要推遲約束檢查;)

+0

在n叉樹良好的漁獲物。 – 2009-06-11 17:43:48

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) 

... 
+0

啊,那很好。太糟糕了,我正在使用PHP,太糟糕了,我的數據庫缺少外鍵約束。我最終只使用遞歸方法。 – 2009-06-11 17:45:35

相關問題