Postgresql

我應該使用什麼樣的數據庫?

  • August 30, 2015

我正在設計一個新系統,我想知道我應該使用哪種數據庫來滿足我的需求。

我有一個節點的樹結構,其中每個節點都有歷史值。對於每個歷史值,它應該包含 2 個值:

  • 節點在那個歷史時刻的自身價值
  • 他孩子的所有價值觀的總和

除此之外,每個節點都可以定義為某些類別的一部分 - 所以我應該能夠查詢數據庫以獲取某個給定類別的所有節點(例如:給我所有節點,在類別 CAT1 下,在特定點時間)。每個節點可以是幾個類別的一部分。

此外,歷史數據在每個數據點可能有多個版本 - 所以如果我有版本 A、B、C - 對於每個數據點,我應該能夠獲取版本 A、B 或 C 的數據。

這當然可以使用傳統的 SQL 數據庫(我使用 PostgreSQL 創建)來實現——但這需要遞歸查詢來建構每個時間點(以計算所有子節點的值)。此外,儘管這些數據是關係型的——但感覺可以使用非關係型工具更好地定義它。只是一種感覺 :)

另一個想法是使用 NoSQL (MongoDB),其中每個節點都將包含其子節點 - 但是如果不遍歷其所有父節點就無法到達特定的內部節點,並且無法有效地使用包含類別的引用。不過,我可能對這些觀點有誤。

我很想听聽一些關於什麼可能是一個好的解決方案的指示。

謝謝!

如果您可以更具體地說明您正在建模的內容,那將更有幫助,因為目前很難想像,至少對我而言。

對於樹結構,在 SQL 中,任何支持遞歸公用表表達式的數據庫都是不錯的選擇(除了 MySQL 之外的任何主要數據庫)。

對於歷史數據,歷史表模式已被證明是有效的。對於 table foo,創建一個 tablefoo_history並從footo寫入時複製foo_history。一個例子

IBM 的 DB2支持 SQL:2011 Temporal,它可以讓您擁有基於時間的外鍵,並且是我所知道的唯一支持它的數據庫。

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