91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

萬能數據庫設計方法探索

發布時間: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

舞钢市| 马关县| 锡林浩特市| 繁峙县| 三明市| 广饶县| 昌邑市| 谷城县| 金山区| 宁晋县| 荥阳市| 阿克苏市| 博白县| 老河口市| 西贡区| 奉化市| 砀山县| 祥云县| 德令哈市| 龙泉市| 闽清县| 庐江县| 商河县| 定兴县| 博客| 贵州省| 沁阳市| 木兰县| 石楼县| 皮山县| 鄂温| 洞口县| 鞍山市| 康乐县| 常宁市| 红桥区| 利川市| 龙口市| 临高县| 大洼县| 舒城县|