萬能數(shù)據(jù)庫設(shè)計方法探索

近日負責公司統(tǒng)一用戶中心的數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計,在工作過程中,誕生了一些另類的想法,特分享出來,期待大家拍磚。

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出樂至免費做網(wǎng)站回饋大家。

思想的演化過程如下。

第一階段:

將企業(yè)、機構(gòu)、家庭等實體抽象為“組織”,Organization,簡稱 “O”,允許多級組織,通過parentId關(guān)聯(lián);

將部門等組織下屬分支實體抽象為“部門”,Department,簡稱“D”,允許多級部門,通過parentId關(guān)聯(lián);

將自然人實體抽象為“自然人”,Human,簡稱“H”;

抽象出“賬戶”,Account,簡稱“A”;

抽象出“角色”,Role,簡稱“R”。

每一個組織允許擁有多個部門;每一個組織允許擁有多個自然人;每一個部門允許擁有多個自然人。

每一個組織、部門、自然人,都允許擁有多個賬戶。

賬戶可以共享多個角色。

第一階段E-R關(guān)系如圖

萬能數(shù)據(jù)庫設(shè)計方法探索

這是一個非常簡單清晰的模型。

遺憾,真實世界不會如此簡單。

第二階段:

通過對產(chǎn)品業(yè)務(wù)的深入了解,需求變更為:

一個組織擁有多個部門,但同時一個部門可以從屬于多個組織。(例:兩個獨立經(jīng)營的連鎖藥店,共享同一個倉儲部門。)

一個部門擁有多個自然人,但一個自然人可以從屬于多個部門。(例:一個公司的總經(jīng)理,兼職多個重要部門的部門經(jīng)理。)

一個組織擁有多個自然人,但一個自然人可以從屬于多個組織。(例:一個醫(yī)生,可以多點執(zhí)業(yè)。)

第二階段E-R關(guān)系如圖

萬能數(shù)據(jù)庫設(shè)計方法探索

現(xiàn)在還算是正常情況。

第三階段:

新增一個簡單的功能——郵政收貨地址。

這是一個簡單功能,但此次復雜之處在于:業(yè)務(wù)上,到底是“組織擁有收貨地址?部門擁有收貨地址?自然人擁有收貨地址?還是賬戶擁有收貨地址?各實體與收貨地址,是一對一,還是一對多的關(guān)系?”這些問題,產(chǎn)品無法確定未來的功能擴展方向,只能回答“都有可能”。哈哈。。。

按照常規(guī)方法設(shè)計,為組織、部門、自然人、賬戶與收貨地址之間,兩兩添加多對多關(guān)系表。關(guān)系表的數(shù)量開始膨脹,如同一個果園里,雜草數(shù)量比果蔬的數(shù)量都要多。。。

為了減少雜草數(shù)量,設(shè)計了一種抽象雜草:

添加實體(組織、部門、自然人、賬戶)與郵政地址的關(guān)系,由實體枚舉code與實體id兩個值,決定真實實體;由郵政收貨地址Id,決定收貨地址。

例如:

實體枚舉code O, 實體id 1,郵政收貨地址id 10,表示:id為1的某個組織,擁有id為10的某個收貨地址。

實體枚舉code H, 實體id 2,郵政收貨地址id 20,表示:id為2的某個自然人,擁有id為20的某個收貨地址。

實體枚舉code A, 實體id 3,郵政收貨地址id 30,表示:id為3的某個賬戶,擁有id為30的某個收貨地址。

第三階段E-R關(guān)系如圖

萬能數(shù)據(jù)庫設(shè)計方法探索

第四階段:

此時公司高層加入需求討論,

A、要求對數(shù)據(jù)的控制顆粒度應(yīng)該達到單條數(shù)據(jù),并且可能要根據(jù)數(shù)據(jù)與周邊任意實體的關(guān)系,進行權(quán)限控制,但是具體需求不定,要求做最大彈性設(shè)計。

B、追加資質(zhì)管理、效期管理等功能,業(yè)務(wù)同樣不知道未來的擴展方向在哪里,要求做最大彈性設(shè)計。

于是,抽象雜草的數(shù)量也開始膨脹起來。

針對需求A,設(shè)計了OneId表,將所有實體的Id在表中備份,未來一旦進行數(shù)據(jù)行級權(quán)限控制,通過OneId表進行關(guān)系擴展。

而為了讓抽象雜草的數(shù)量不膨脹,設(shè)計了萬用關(guān)系表,設(shè)計如下:

萬用關(guān)系表
實體枚舉code實體Id實體枚舉code實體Id

舉例

萬用關(guān)系表
實體枚舉code實體Id實體枚舉code實體Id
O1H10
O1H11
H10A100
H10A101

上述數(shù)據(jù),描述了

“Id為1的某個組織,擁有id為10、11的兩個自然人”;

“Id為10的某個自然人,擁有id為100、101的兩個賬戶”。

任何復雜的/未定的多對多關(guān)系,都可以用此萬用關(guān)系表進行描述。

整個數(shù)據(jù)庫設(shè)計最終版變化為:

萬能數(shù)據(jù)庫設(shè)計方法探索

注意:無論未來業(yè)務(wù)如何擴展,關(guān)系如何變化,僅需要擴展新的實體即可,不用再考慮與其他實體的關(guān)系,對歷史設(shè)計不會產(chǎn)生任何沖擊。

這是一種背離了所有現(xiàn)行數(shù)據(jù)庫設(shè)計范式,簡單萬能的數(shù)據(jù)庫設(shè)計方法,Universal DB Design Method,UDDM,簡稱猶大方法吧,感覺很貼切。

對上述設(shè)計方法,我的團隊內(nèi)部已沒有足夠的能力去評判正誤,期待大家踴躍拍磚、共同探索。

本文標題:萬能數(shù)據(jù)庫設(shè)計方法探索
URL地址:http://www.muchs.cn/article14/gjggge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站改版、定制網(wǎng)站、云服務(wù)器網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)