亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

萬能數據庫設計方法探索

發布時間:2020-07-22 09:11:24 來源:網絡 閱讀:312 作者:Kevin_1978 欄目:關系型數據庫

近日負責公司統一用戶中心的數據庫表結構設計,在工作過程中,誕生了一些另類的想法,特分享出來,期待大家拍磚。


思想的演化過程如下。


第一階段:

將企業、機構、家庭等實體抽象為“組織”,Organization,簡稱 “O”,允許多級組織,通過parentId關聯;

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

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

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

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

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

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

賬戶可以共享多個角色。

第一階段E-R關系如圖

萬能數據庫設計方法探索

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

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


第二階段:

通過對產品業務的深入了解,需求變更為:

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

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

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

第二階段E-R關系如圖

萬能數據庫設計方法探索

現在還算是正常情況。


第三階段:

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

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

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

為了減少雜草數量,設計了一種抽象雜草:

添加實體(組織、部門、自然人、賬戶)與郵政地址的關系,由實體枚舉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關系如圖

萬能數據庫設計方法探索

第四階段:

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

A、要求對數據的控制顆粒度應該達到單條數據,并且可能要根據數據與周邊任意實體的關系,進行權限控制,但是具體需求不定,要求做最大彈性設計。

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

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

針對需求A,設計了OneId表,將所有實體的Id在表中備份,未來一旦進行數據行級權限控制,通過OneId表進行關系擴展。

而為了讓抽象雜草的數量不膨脹,設計了萬用關系表,設計如下:

萬用關系表
實體枚舉code實體Id實體枚舉code實體Id

舉例

萬用關系表
實體枚舉code實體Id實體枚舉code實體Id
O1H10
O1H11
H10A100
H10A101

上述數據,描述了

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

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


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


整個數據庫設計最終版變化為:

萬能數據庫設計方法探索

注意:無論未來業務如何擴展,關系如何變化,僅需要擴展新的實體即可,不用再考慮與其他實體的關系,對歷史設計不會產生任何沖擊。


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


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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

始兴县| 万安县| 定西市| 南木林县| 马公市| 伊通| 都匀市| 珠海市| 舒兰市| 墨江| 长沙县| 天峨县| 永兴县| 饶阳县| 云林县| 阿城市| 荥经县| 南皮县| 建湖县| 华容县| 遵义县| 睢宁县| 广东省| 阿克| 利辛县| 镇雄县| 孟津县| 隆子县| 南乐县| 山东省| 从江县| 广宁县| 琼海市| 洮南市| 土默特右旗| 西林县| 手游| 沙洋县| 怀仁县| 潮安县| 建平县|