我負責創建用於記錄生產數據的數據庫(我沒有正式的數據庫或SQL經驗)使用Microsoft SQL我可以想到2種不同的方法構建我們記錄的數據。
1:我可以記錄每種材料的累加器當前值
2:我可以記錄從最後一條記錄產生的數量。數據庫設置:記錄增量或總值
有些背景知識,我們將每分鐘記錄一次信息,以追蹤混合中使用的每種材料的產量和數量。
我們已經有報道顯示,在一定的日期內,在一段時間內,印出的材料和混合物的數量是多少。
我想我的問題歸結爲在查詢中求和值或搜索與材質/混合相關的最大值更快?
我負責創建用於記錄生產數據的數據庫(我沒有正式的數據庫或SQL經驗)使用Microsoft SQL我可以想到2種不同的方法構建我們記錄的數據。
1:我可以記錄每種材料的累加器當前值
2:我可以記錄從最後一條記錄產生的數量。數據庫設置:記錄增量或總值
有些背景知識,我們將每分鐘記錄一次信息,以追蹤混合中使用的每種材料的產量和數量。
我們已經有報道顯示,在一定的日期內,在一段時間內,印出的材料和混合物的數量是多少。
我想我的問題歸結爲在查詢中求和值或搜索與材質/混合相關的最大值更快?
如果記錄包含淨數量,那麼在任何給定時間點查找數量肯定會更快。然後,當您想要查找數量時,您只需閱讀一條記錄 - 最新記錄或相應日期和時間的記錄 - 並選取數量。如果你存儲了deltas,那麼你必須從零開始將它們總結起來。另一方面,如果存在多個獨立的變化來源和/或如果可能的變化被取消或顛倒,則存儲「當前量」成爲問題。如果交易不按順序到達,或者舊的交易被修改或刪除,會發生什麼?
這是銀行賬戶餘額的典型例子。存款和提款可能來自多個來源,無法預測時間。我們經常想要按順序發佈交易。舊的交易可能會被取消。
例如:
1月1日:帳戶以$ 1,000開啓。餘額= $ 1,000。
1月2日:存款300美元。餘額= $ 1300。
1月3日:撤回$ 200。餘額= $ 1100。
1月4日:檢查用於1月2日存款反彈。反向存款。所以1月2日的餘額變成了1000美元。但是1月3日的平衡呢?我們必須將其更新至800美元。
在現實生活中,在退回支票後可能會發生一系列長期交易。如果我們將最後的餘額存儲在每條記錄中,那麼每條記錄都必須更新。
交易的生效日期通常與進入系統的日期不同。因此,我們會定期發現在現有交易之前必須按順序插入交易,然後必須更新所有後續交易。
現在,也許你的檸檬水攤是一種不同的過程。如果我們給一個碗加水,我們可能會說,「加足夠的水使其達到」滿「標記,而不是」加4升「。如果是這種情況 - 如果在大多數情況下用戶知道並將輸入到計算機中的是新的總量而不是三角洲 - 那麼有意義的是,您輸入的是總量,如果您關心三角洲,你計算它。但是,如果用戶知道的是三角洲,那麼他們應該輸入三角洲,你應該攜帶三角洲,並計算數量。
是的,如果您存儲的所有數據都是變化量,那麼計算淨數量需要從第零天起累計所有記錄。如果記錄數量適中,這可能是完全可以接受的。如果不是這樣,我有時候做的事情就是在某個日期保持「總記錄」與總運行總數。然後爲了獲得當前數量,我找到最新的總記錄,然後添加該日期以來的交易金額。編寫代碼非常痛苦,但卻顯着提高了性能。
您的詢問對我來說不是很清楚,您能否詳細說明 – TheGameiswar
除非您解釋數據的完整業務環境,否則像「累加器」,「混合」和「材料」等詞語並不意味着什麼。 –
對不起,好吧,讓我們假設我正在做檸檬水,我有3種成分,水糖,檸檬汁。我的組合將是檸檬水。我想知道跟蹤哪些成分和使用量的最佳方法。但我必須假設檸檬水每天可以多次使用,而且不需要背靠背。和水可能在超過1混合。我所說的「累計器」總計了混合過程中使用的材料數量,並且當混合改變或機器停止時復位。所以我不一定會尋找最高的總用水量,因爲總數將在一天中多次重置 – Neal