2009-06-22 72 views
1

MS的OneNote中使用數據層次結構本質上是一個簡單的樹,即使信息是通過一個標籤式界面,而不是一個TreeView顯示。你從「筆記本」開始,它可以有「部分」,其中有「頁面」。我試圖對此進行建模。就我而言,一個頁面將鏈接到一個RichEdit的內容。德爾福:型仿MS OneNote中的數據結構

我的問題不是我不能想出一個辦法做到這一點。我的問題是,我不確定哪幾種可能性最終最簡單。這就是我希望你能進來。

我可以,例如,使用普通[MyBase]數據庫。 Page數據集將包含其名稱的字段以及RichEdit數據。頁面將嵌套在部分中,部分嵌套在筆記本中。

如果我想了一會兒,看起來這是一種可以用簡單的stringLists建模的東西,特別是如果列表中的每個元素都包含逗號,並在層次結構中包含ID和位置的單獨值作爲筆記本/部分/頁面名稱。

但後來這也似乎喜歡的事,可能是非常適合於XML ...如果我要了解更多有關XML :-)

那你更有經驗的人認爲?

謝謝,一如既往...

回答

2

如果您將它存儲在文件系統中,爲什麼不使用....文件夾?這就是OneNote所做的。 「筆記本」和「部分組」只是常規的文件系統文件夾。唯一的其他級別是.one文件。書中有一個非常有限的層次結構(這只是網頁,其中任何一個可以被標記爲子頁面,但這些都不是真正以任何方式父鏈接。)

裏面的。一個文件您可以使用XML來表示您的頁面,但這不是OneNote所做的。 OneNote使用二進制文件格式,以便於快速編輯,對象級同步,多用戶訪問和緊湊型存儲。

如果你四處尋找關於「隨機存取文件」的信息,你可以瞭解如何做到這一點。但是,如果您認爲XML可能會變大,請儘量避免使用XML,因爲編輯會變得麻煩。您需要加載整個XML文件,在內存中進行更改,然後再將所有內容寫回。

2

我認爲這取決於你想如何保存數據。如果您使用共享訪問,速度和大量數據的數據庫:只需對數據進行規範化並創建您所建議的結構。

如果您希望用戶保存到本地文件系統上的數據,我認爲XML將是一個很好的解決方案,因爲它可以讓你的數據存儲在一個結構化的文件。

所以...你想如何存儲和使用數據?

+0

感謝您的迴應...我希望用戶在本地文件系統上保存數據。也許現在是我在Delphi中瞭解更多關於XML的時候了:-) – 2009-06-22 22:11:13

3

無論你去同一個數據庫或XML,嘗試把你的數據訪問程序的數據模塊。讓您的GUI單元調用數據模塊的公共方法,並確保這些調用不取決於數據的存儲方式。這樣,您可以從一種方法開始,並通過編輯您的數據模塊切換到另一種方法。

3

你可以嘗試的一件事就是使用結構化的存儲系統。這個概念很簡單,你使用一個數據文件就像處理磁盤和文件夾一樣......事情是文件夾和文件都在你的獨佔控制之下。唯一的問題是它不能很好地擴展到多個用戶,但是之後XML也沒有。 (在gabr的blog上有一個很好的結構化存儲庫)

對於「多用戶」系統,最好的選擇是使用表來實現。您可以很好地開始使用Microsoft Access和ADO,這很容易遷移到MS Sql Server。從你的簡要描述中,我希望你有三個表格,NOTEBOOKS,SECTIONS,PAGES。這些頁面將具有到部分的外鍵關係(細節/主部分),部分將與筆記本具有外鍵關係。

1

我認爲你的數據就像一棵樹。

node { 
    id 
    parent_id 
    content 
    type 
} 

paren_id = 0的節點是筆記本。 類型是可選的,但可能有用。 頁面和筆記本上的內容將免費給你一個頁面/筆記本描述:D

我將使用一個簡單的表上sqlite或MyBase或其他。 我覺得有點db比xml好,因爲xml強迫你加載內存中的所有數據。