[英]SQL history table design of hierarchical data
我有一些特定的項目數據,其中包括來自與外鍵鏈接的不同表的多個子項目。 為了向客戶顯示所有相關子項目的項目歷史記錄,我需要將數據更改存儲在數據庫中,並且有幾個選項可供選擇。
使用所有表的觸發器創建 _hist 表,以在任何表發生更改時存儲數據。 所有更改都已存儲,但很難從所有表中獲取項目的數據,因為 _hist 表之間沒有連接
使用所有表中的所有列創建一個歷史表。 由於項目存在層次結構,因此無法僅使用一行存儲更改。
由於以上都沒有按預期工作,因此最終創建了一個歷史表,其中包含 Id、時間戳等列和一個用於存儲更改的附加列。
每當有變化時,我們檢索所有表,將數據轉換為 JSON 格式,並保存在歷史表中。 轉換后的 JSON 數據與下圖類似。
{
"ItemId": 1,
"ItemStatus": 100,
"SubItmems": [
{
"SubItemId": 1,
"ItemId": 1,
"SubItemStatus": 200,
"SubChildItems": [
{
"SubChildItem": 1,
"SubItemId": 1,
"SubChildItemStatus": 300,
},
{
"SubChildItem": 2,
"SubItemId": 1,
"SubChildItemStatus": 400,
},
],
}
],
"ItemTags": [
{
"TagId": 1,
"TagStatus": "OK",
},
],
}
但是,檢索和轉換部分需要時間,並且我們遇到了一些性能問題。
我需要改進當前的結構,但還沒有找到一個有效的結構。
如果您有任何想法,請分享。
謝謝!
一些想法(不知道是否適用但分享):
一個僅包含 customerID、日期和序列化 JSON 的歷史記錄表。 觸發器可以調用將執行此工作的 SP。(推薦的解決方案)
具有 TableName、DateTime、ID、Field、OldValue、NewValue 的歷史記錄表。 同樣的方式,添加記錄的觸發器。
如果您想擁有干凈可靠的歷史記錄,則必須使用觸發器。 這一切都取決於您需要使用此歷史記錄的方式(只是閱讀或使用它。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.