2010-04-27 45 views
0

目前,我正在研究標題行中提到的遷移。問題是保存在註冊表中的應用程序配置有一個樹狀結構,例如:從Windows註冊表遷移到SQLite的應用程序配置

X 
|->Y 
    |->Z 
     |->SomeKey someValue 
W 
|->AnotherKey anotherValue 

等等。

如何在SQLite(或任何其他數據庫)中建模該結構?如果您有類似問題的經驗,請發郵件。提前致謝。

+0

你用SQLite去的任何特定原因? – R0MANARMY 2010-04-27 15:01:59

+0

我已經對SQLite進行了基準測試並對其進行了審查,並在此應用程序的另一部分中使用它,並使用了自定義和相對較快的C++包裝器。 – 2010-04-27 15:12:44

+0

雖然它可能不是這個特定任務的正確工具。我無法想象性能問題是您轉移到SQLite的原因。 – R0MANARMY 2010-04-27 16:29:43

回答

1

Baris,這個結構類似於一個目錄/文件結構。 您可以使用一個簡單的父親<>子關係對目錄和鍵值對進行建模。

喜歡的東西

Directory: 
id integer auto_increment; 
name string not null; 
parent_id integer not null default 0; 

Property: 
id integer auto_increment; 
key string; 
value string; 
directory_id integer not null; 

有了這個,你可以通過查看WHERE PARENT_ID = someid和尋找directory_id = someid對性能解決根目錄下搜索與PARENT_ID = 0,子目錄的目錄。

希望這有助於:)如果你想存儲的層次結構由以前的海報提到

0

在關係數據庫中表示層次結構非常簡單。你只是使用自引用。例如,您有一個類別表,其中有一個名爲ParentCategoryId的字段,該字段爲null(對於葉子類別)或父類別的ID。你甚至可以設置外鍵來執行有效的關係。這種結構很容易在代碼中遍歷,通常是通過遞歸,但是在編寫sql查詢時很痛苦。

註冊表克隆的一種解決方法是使用註冊表鍵值路徑作爲鍵。也就是說,Path中有一個條目是「X/Y/Z/SomeKey」,值是「someValue」。這將更容易查詢,但可能無法按照您喜歡的方式表示層次結構。也就是說,你只有價值而不是層次結構的整體結構。

底線是你必須妥協,將具有未知數量級別的層次結構映射到關係數據庫結構上。

0

自引用的表都不錯,他們成爲當你開始選擇樹的葉子的吸引力。

  1. 您能說明從配置中檢索數據的用例嗎?

  2. 您打算一次加載整個配置還是單獨檢索每個參數?

  3. 葉節點的深度會有多大?

相關問題