Mysql

用於跟踪特定行中列值的“新鮮度”的數據庫佈局

  • August 10, 2019

我有一個Personname,address和的列bio。如何儲存數據以了解這些列的“新鮮度”?

例如,“對於人 Y,名稱已在 2 天前更改,位置已在 2 週前更改”

這只是一個版本控制問題嗎?

Person v1 - name: A1, address: B1, bio: C1, updated_at: 4.days.ago
Person v2 - name: A2, address: B1, bio: C1, updated_at: 3.days.ago
Person v3 - name: A2, address: B1, bio: C2, updated_at: 1.days.ago

在我查看了不同的版本之後,找到了最後一個具有不同列的版本?

還是有更好的方法來處理它?將新鮮度數據放在另一個表中?甚至是數據庫?

我通常會使用 MySQL,除非這可以通過另一個數據庫管理系統來解決。

問候。

額外細節

感謝您的評論和回答,但我忘記了一些事情:實際上,我需要知道列值何時更新,但也需要知道由誰更新。類似於*“使用者 Y 在 XX 更新”之*類的東西。

根據您所看到的,您需要創建一個審核系統,該系統將記錄有關每次插入/更新/刪除的多個數據點,以獲取您想知道的資訊。您可以對其進行設置,使其監控每一列,或者只監控使用者可以更改的列,或者您關心知道他們何時更改的列。這將提供一個額外的好處,即當只有一列或幾列更改或使用者可以更改的列不多時使用更少的儲存空間。

審計資訊

  • 更改數據的表
  • 已更改的列
  • 更改日期/時間
  • 進行更改的使用者
  • 舊值
  • 新價值

使用 MariaDB 10.3,您可以使用系統版本表

然後,您可以使用如下查詢查看特定行的所有版本:

SELECT *, ROW_START, ROW_END FROM Person WHERE id = 4 FOR SYSTEM_TIME ALL;

此外,通過AS OF語法,您可以獲得特定時間存在的行的版本:

SELECT * FROM Person WHERE id = 4 FOR SYSTEM_TIME AS OF TIMESTAMP '2019-08-08 15:10:00';

另請參閱 MariaDB 部落格中的這篇文章:MariaDB Server 10.3 中的自動數據版本控制

編輯

如果您需要知道誰進行了更改,這可能必須通過您的軟體進行控制。您可以在表中添加一個特殊last_change_by列,例如:

ALTER TABLE Person ADD last_change_by varchar(100); 

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