上下游依賴 這種er關係 在mysql 等關係型數據庫中 如何設計 存儲

問題場景: 在任務調度系統中,每個任務 既有上游 ,也有下游。如何設計 底層存儲的表結構 支撐這種存儲。


解決方法:


一. 採用圖形 數據庫 neo4j,每個節點 代表一個任務,節點之間的 邊 (帶有方向箭頭) 表示 任務之間的依賴關係。 



二. mysql等關係型數據庫。

       設計1 : 將 上下游依賴關係 作爲 任務的屬性 存儲起來。 即:  任務id(主鍵)、任務名稱、任務的上游id list、任務的下游id list。

                        優點: 這是最容易想到的方案。 但知覺告訴我不是很佳的方案,而且也顯然不滿足 3NF的設計原理。

                        缺點:


       設計2:  只存儲任務的上游依賴。  即 任務id(主鍵)、任務名稱、任務的上游id list。


       設計3:  將 任務之間的 依賴關係 單獨 作爲一個記錄表 保存。依賴關係記錄表的 表結構:自增主鍵id、上游任務id、下游任務id。同時 將 第二列、第三列都增加索引。

                       推薦設 計3.

                               優點: 因爲依賴關係是 相對的,如果A和B有依賴關係,顯然上游任務id就是A,下游任務id就是B。作爲一條記錄 insert 記錄表。

                        如何查詢 A的所有下游,則 select  下游任務id  from 表 where 上游任務id=‘A’。 如果記錄條數爲0,則說明A無下游。

                        如何查詢A的所有上游, 則  select  上游任務id  from 表 where 下游任務id=‘A’。

                               而且不存在冗餘。 對於任何一個依賴關係,只有一條記錄。

                       

                      


    


發佈了46 篇原創文章 · 獲贊 13 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章