資料模型

2004 年 2 月 12 日

我早期最喜歡的書之一是 Tsichritzis 和 Lochovsky 關於資料模型的書。該書討論了不同的資料思考模型,特別是當時討論最多的三個模型:關聯資料模型階層資料模型網路資料模型

這些天來,我沒有看到人們討論不同資料模型的優缺點。談論資料模型的人往往是資料庫人員,而大多數人似乎認為關聯模型早已贏得這場競賽。

然而,我認為這從來都不是真的,而且事情正變得越來越有趣。

毫無疑問,關聯模型在資料庫世界中佔據主導地位,我現在遇到的幾乎每個商業應用程式都使用 SQL 資料庫,而 SQL 資料庫對於 99% 的人來說都足夠接近關聯模型。但是,如果您查看記憶體中資料結構,您會看到一個不同的世界。在這裡,網路模型佔據主導地位。事實上,人們經常費盡心思將磁碟上的關聯模型轉換為記憶體中的網路模型(我認為這是 貧血領域模型 如此流行的原因之一)。

我發現這很有趣。我一次又一次地詢問人們,為什麼他們要費盡周章地將關聯轉換為記錄。我得到的答案幾乎總是歸結為同一件事 - 大多數開發人員發現網路模型比關聯模型更容易處理。當然,情況並非總是如此,但我確實認為大多數人更喜歡記錄。

這可能與以下事實有關:雖然 SQL 適用於資料庫,但我們沒有等效的記憶體中處理方式。以關聯方式思考是我發現 ADO.NET 有趣的事情之一,但我又看到許多人不想以關聯方式處理資料集。

另一個持續挑戰當前資料模型圖像的是 XML 的興起。基於 XML 的技術(例如 XPath 和 XQuery)提供了一個訪問階層資料結構的標準方式。在許多方面,XML 提供該資料的標準文字序列化格式只是擁有這種查詢和操作階層資料的標準方式的額外好處。

我認為一項基本的技術轉變將導致進一步的資料模型變動。隨著記憶體大小的增長速度與價格下降的速度一樣快,我們正越來越接近大多數資料庫可以完全保留在記憶體中的地步。將此與持久性變更機制結合起來,您便擁有一種完全不同的資料庫,它對執行所需的假設有著根本不同的假設。(請參閱 Prevayler 作為這種思維方式的範例。我不知道他們的效能數字有多有效,但它們可能相差幾個數量級,但仍然令人印象深刻。)

因此,也許是時候再次檢視關於哪些資料模型有意義的假設,並開始思考這些模型的一些基礎知識。我的感覺是,不同類型的資料適合不同的模型。關聯式模型非常適合表格資料,但如果你想儲存《暴風雨》The Tempest,那它就真的很糟糕。因此,了解不同的資料模型、使用它們的技術,以及哪些模型適合哪些類型的資料是有意義的。