1. 程式人生 > >淺層資料結構(結構型)vs 深層資料結構(聚合型)

淺層資料結構(結構型)vs 深層資料結構(聚合型)

構建系統資料模型時,有2共選擇,以:group->account->son account舉例

1、系統由多個group組成;

2、一個group有多個account;

3、一個account有多個son account.

有2種資料模型構建方式選擇;

image

1、模式一的資料模型由3張表構成:groups表,accounts表,son accounts表。是淺層資料結構(結構型),每張表的深度是1。accounts表將有一個[group]欄位關聯到groups表裡面的某條記錄;son accounts表將有一個[account]欄位關聯到accounts表裡面的某條記錄。可以說這是一種經典的資料結構,結構型資料庫就是由這樣深度為1的二維型資料表構成,多張表之間的關係通過增加關聯欄位來標明;

2、模式二的資料模型中,把group視作一個整體,它是資料層的一個基本單元(unit),資料層由多個group物件組成,group物件的深度是3,是深層資料結構(聚合型)。現實的模型對應為物件型資料庫;

現在的問題是:模式一簡單還是模式二簡單?哪一種是更為優越的選擇?我傾向於模式一,因為:

1、結構型資料建模是經典的,目前依然是主流的,得到資料庫的廣泛支援,即使不使用資料庫,也容易序列化到儲存,並且我相信群眾,相信主流意志的正確性;

2、模式二的物件型資料建模,group是資料元,是資料操作的唯一入口,所以需要提供account,son account的操作介面,account又需要提供son account的操作介面,假設物件深度再多增加幾層,那這是一個龐大且累贅的冗餘。另外一點是樹形的物件不容易序列化,沒有太多資料庫支援;

3、模式二的層次太深,複雜度級數上升,違反了系統弱化成小類模型的原則(多個類,每個類的複雜度都很低),而這裡,group將是一個很大的類。

4、第一感覺:模式一的複雜度我能控制,模式二就沒有把握,所以心裡更認同模式一;

5、雖然模式二直觀的表明了資料的聚合-組合關係,與現實模型完全隱射,在理論上應該是更好的選擇。但是就人的理解能力的傾向來說:我認為理解廣度的事務比較理解深度的事務而言更有優勢;

6、寫到這裡,我突然想說一句:化深度為廣度,符合人的認知規律,降低了複雜度。