溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

萬(wàn)能數(shù)據(jù)庫(kù)設(shè)計(jì)方法探索

發(fā)布時(shí)間:2020-07-22 09:11:24 來(lái)源:網(wǎng)絡(luò) 閱讀:305 作者:Kevin_1978 欄目:關(guān)系型數(shù)據(jù)庫(kù)

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


思想的演化過(guò)程如下。


第一階段:

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

將部門(mén)等組織下屬分支實(shí)體抽象為“部門(mén)”,Department,簡(jiǎn)稱(chēng)“D”,允許多級(jí)部門(mén),通過(guò)parentId關(guān)聯(lián);

將自然人實(shí)體抽象為“自然人”,Human,簡(jiǎn)稱(chēng)“H”;

抽象出“賬戶”,Account,簡(jiǎn)稱(chēng)“A”;

抽象出“角色”,Role,簡(jiǎn)稱(chēng)“R”。

每一個(gè)組織允許擁有多個(gè)部門(mén);每一個(gè)組織允許擁有多個(gè)自然人;每一個(gè)部門(mén)允許擁有多個(gè)自然人。

每一個(gè)組織、部門(mén)、自然人,都允許擁有多個(gè)賬戶。

賬戶可以共享多個(gè)角色。

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

萬(wàn)能數(shù)據(jù)庫(kù)設(shè)計(jì)方法探索

這是一個(gè)非常簡(jiǎn)單清晰的模型。

遺憾,真實(shí)世界不會(huì)如此簡(jiǎn)單。


第二階段:

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

一個(gè)組織擁有多個(gè)部門(mén),但同時(shí)一個(gè)部門(mén)可以從屬于多個(gè)組織。(例:兩個(gè)獨(dú)立經(jīng)營(yíng)的連鎖藥店,共享同一個(gè)倉(cāng)儲(chǔ)部門(mén)。)

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

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

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

萬(wàn)能數(shù)據(jù)庫(kù)設(shè)計(jì)方法探索

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


第三階段:

新增一個(gè)簡(jiǎn)單的功能——郵政收貨地址。

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

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

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

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

例如:

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

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

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

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

萬(wàn)能數(shù)據(jù)庫(kù)設(shè)計(jì)方法探索

第四階段:

此時(shí)公司高層加入需求討論,

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

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

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

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

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

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

舉例

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

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

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

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


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


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

萬(wàn)能數(shù)據(jù)庫(kù)設(shè)計(jì)方法探索

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


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


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


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI