構(gòu)建系統(tǒng)數(shù)據(jù)模型時(shí),有2共選擇,以:group->account->son account舉例
1、系統(tǒng)由多個(gè)group組成;
2、一個(gè)group有多個(gè)account;
3、一個(gè)account有多個(gè)son account.
有2種數(shù)據(jù)模型構(gòu)建方式選擇;
1、模式一的數(shù)據(jù)模型由3張表構(gòu)成:groups表,accounts表,son accounts表。是淺層數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu)型),每張表的深度是1。accounts表將有一個(gè)[group]字段關(guān)聯(lián)到groups表里面的某條記錄;son accounts表將有一個(gè)[account]字段關(guān)聯(lián)到accounts表里面的某條記錄。可以說這是一種經(jīng)典的數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)型數(shù)據(jù)庫就是由這樣深度為1的二維型數(shù)據(jù)表構(gòu)成,多張表之間的關(guān)系通過增加關(guān)聯(lián)字段來標(biāo)明;
2、模式二的數(shù)據(jù)模型中,把group視作一個(gè)整體,它是數(shù)據(jù)層的一個(gè)基本單元(unit),數(shù)據(jù)層由多個(gè)group對象組成,group對象的深度是3,是深層數(shù)據(jù)結(jié)構(gòu)(聚合型)。現(xiàn)實(shí)的模型對應(yīng)為對象型數(shù)據(jù)庫;
現(xiàn)在的問題是:模式一簡單還是模式二簡單?哪一種是更為優(yōu)越的選擇?我傾向于模式一,因?yàn)椋?/p>
1、結(jié)構(gòu)型數(shù)據(jù)建模是經(jīng)典的,目前依然是主流的,得到數(shù)據(jù)庫的廣泛支持,即使不使用數(shù)據(jù)庫,也容易序列化到存儲,并且我相信群眾,相信主流意志的正確性;
2、模式二的對象型數(shù)據(jù)建模,group是數(shù)據(jù)元,是數(shù)據(jù)操作的唯一入口,所以需要提供account,son account的操作接口,account又需要提供son account的操作接口,假設(shè)對象深度再多增加幾層,那這是一個(gè)龐大且累贅的冗余。另外一點(diǎn)是樹形的對象不容易序列化,沒有太多數(shù)據(jù)庫支持;
3、模式二的層次太深,復(fù)雜度級數(shù)上升,違反了系統(tǒng)弱化成小類模型的原則(多個(gè)類,每個(gè)類的復(fù)雜度都很低),而這里,group將是一個(gè)很大的類。
4、第一感覺:模式一的復(fù)雜度我能控制,模式二就沒有把握,所以心里更認(rèn)同模式一;
5、雖然模式二直觀的表明了數(shù)據(jù)的聚合-組合關(guān)系,與現(xiàn)實(shí)模型完全隱射,在理論上應(yīng)該是更好的選擇。但是就人的理解能力的傾向來說:我認(rèn)為理解廣度的事務(wù)比較理解深度的事務(wù)而言更有優(yōu)勢;
6、寫到這里,我突然想說一句:化深度為廣度,符合人的認(rèn)知規(guī)律,降低了復(fù)雜度。