我有一個桌面應用程序,它具有名爲Field
的實體的概念。數據存儲格式:字節數組的替代?
-----------------------
| Id | FieldName |
-----------------------
| 1 | "Field 1" |
-----------------------
| 2 | "Field 2" |
-----------------------
Field
S通過用戶定義的,所以有可能是因爲其中許多爲用戶想要的。它們與稱爲Employee
的另一個實體相關聯。
Field
s對於每年的每一天都有一個值(由應用程序計算並存儲的16位整數)。
Field
值存儲在每個記錄保存值的一個Field
之一Employee
整整一年的表。
所述表,因此,看起來有點像這樣:
---------------------------------------------
| FieldId | EmployeeId | FieldValues | Year |
---------------------------------------------
| 1 | 4 | byte[] | 2012 |
---------------------------------------------
| 2 | 4 | byte[] | 2012 |
---------------------------------------------
| 1 | 5 | byte[] | 2013 |
---------------------------------------------
| ... | ... | ... | ... |
---------------------------------------------
FieldValues保持值作爲BLOB字段一個字節數組,然後將其轉換回16位整數數組是前向網格上的用戶顯示。
現在我們已經有了一些背景,真正的問題。
這是一個傳統的應用程序,我不是原始設計師。然而,很容易猜到,以二進制格式存儲這些數據的目標是限制每Field
每Employee
每年存儲365(或366)值所需的記錄數量。
我現在正在做的是一個「同步」應用程序,它從本地Access數據庫(不問)提取數據並通過REST API將其推送到遠程服務器上的Web應用程序。 這樣的應用程序需要有這些數據的副本,所以我必須將其存儲在其數據庫中。
以二進制格式存儲數據具有確實限制我們需要存儲的記錄數量的明顯優勢,但是存在人爲不可讀的缺點。另一方面,網絡應用程序是多租戶的,因此以任何其他方式存儲此數據將意味着存儲大量記錄:僅僅幾千個Employee
秒,而平均20個將會意味着存儲每年超過1400萬條記錄(並且Fields
不是唯一可以產生數百萬條記錄的實體)。另外,如果每一年的大部分記錄都不會成爲一個問題,比如說每兩三年我們就可以扔掉它們;但是,情況並非如此。
真正的問題是如何來存儲所述數據。我應該堅持舊格式嗎?
任何人都可以想到一個完全不同的方式去實現它嗎?
爲了完整起見,即使我認爲它不重要,目標數據庫是Postgres。
不Postgres有一個數組列類型?這會比另一張桌子更有利於他的結構嗎? – Romoku
@Romoku是的,它可以,這可能比blob更好......但是它是可控的?你可以創建一個FK或其他約束?你真的想寫這種類型的SQL嗎?請注意,Oracle和SQL服務器也有類似的類型,我有相同的異議 –
感謝您的回覆。關於數據保留:我並不是說我們永遠無法擺脫一些數據,但我們可能需要保留相當長的一段時間。我知道1400萬條記錄不是很多,但這只是一個基於存儲2000名員工數據所需的例子。他們可能更多,而這些領域的事情不是唯一的問題。不過,我同意你提出的觀點。 –