Database-Design

樹狀結構數據庫的最佳設計

  • June 8, 2017

我正在 MS Access 中設計一個數據庫,用於跟踪批量生產的各種化學溶液的位置。

每個批次實際上可以無限期地拆分*(等分) 。*也就是說,我們可以生產 100 克的產品,將其分裝到兩個 50 克的小瓶中。一個保存在倉庫中,另一個被運送到其他地方並進一步分成 50 個 1g 小瓶。這些小瓶可隨時運輸,並可進一步分裝。

我希望能夠跟踪任何特定小瓶的歷史。它曾經在哪裡(以及何時),包括它的“父”小瓶的歷史和那個.

樹形圖

也就是說,如果我查看上圖中 #7 小瓶的歷史,我想查看 #7 小瓶的歷史(例如,按時間倒序),然後是 #6、#3 和 # 小瓶的歷史8.

我正在努力尋找記錄這些數據的最佳方式;目前我有一個主表(加上幾個查找表),每個“節點”都有一行。一個節點代表一個小瓶在一個位置;所以每一行都有一個自動編號主鍵,一個“父”(前一個節點的主鍵 - 小瓶的前一個位置,或者如果它被等分,則為父小瓶),一個“位置”欄位,批號等.

這裡已經存在冗餘,因為批次號在每個節點上,而它實際上只需要在製造後的第一個節點上(當批次被等分時它顯然不會改變)。

所以資料結構是這裡的第一個問題。

一旦我獲得了資料結構,是否有人對如何最好地顯示小瓶的歷史數據有任何想法?

非常感謝

Bill Karwin 在他的演講中很好地涵蓋了替代方案。我在此頁面上的一個類似但略有不同的關閉表上有一些註釋。

這個想法是有一個代表父關係的表,另一個代表祖先關係。祖先關係的所有變化都是父母關係變化的結果。例如,將子 c 添加到節點 n 意味著將 n 加上 n 的祖先添加為 c 的祖先。

在大多數 DBMS 中,您可以使用觸發器來實現這一點,但 AFAIK ms-access 不支持這一點。由於我不使用 Windows 和/或 MS-Access,我無法驗證它,但這個 StackOverflow 問題似乎模仿了觸發器,所以這可能是有用的。

您要求對樹狀結構進行最佳設計,但我認為沒有解決所有此類問題的最佳方法。所有方法都有其優點和缺點,所以我上面描述的只是另一種處理它們的方法。希望至少能給你一些思考的食物。

引用自:https://dba.stackexchange.com/questions/104777