SQL Server 2005.實體修訂架構設計
在我們的應用程序中,我們有一個包含父表以及多個子表的實體。我們希望跟蹤對此實體進行的修改。來回之後,我們將其縮小爲兩種可供選擇的方法。
有一個實體歷史表。在sproc更新表之前,從父表和所有子表中檢索整個實體的當前狀態。將其XML化並將其作爲XML數據類型粘貼到歷史記錄表中。包含一些要查詢的列,以及修訂號/創建日期。
對於每個表,使用相同的列創建匹配歷史記錄表。還有一個修訂號/創建日期。在sproc更新單個表之前,檢索該表的記錄的現有狀態,並將其複製到歷史記錄表中。所以,它有點像SVN。如果我想在修訂版Y中獲取實體,我需要在每個表中獲取最大版本號不大於Y的歷史記錄。一個實體可能在一個表中有50個修訂記錄,但只有3個修訂記錄一個子表,等等。我可能想堅持整個實體的修訂計數器。
這兩種方法似乎都令他們頭疼,但我仍然更喜歡解決方案#2解決方案#1。這是一個已經很龐大的數據庫,並且已經遭遇性能問題。在每個修訂版中使用XML Blob來擴展它(並且會有很多)似乎是一種可怕的方式。爲所有事情創建歷史記錄表是我願意吃的成本,只要沒有更好的方法來做到這一點。
有什麼建議嗎?
感謝, Tedderz
從頭開始。你爲什麼需要歷史?這僅僅是爲了審計,還是你期望對此做些什麼?歷史將如何使用?不知道這些提供1對2建議的事情是個人偏好。如果動態設計可以在表發生變化時自動調節,則#1具有優勢。 #2需要重新編碼,除非在本質上也是動態的(但是動態變化的結構永遠不會漂浮在我身邊)所以我的觀點是。不僅將如何使用它;但是父母/實體/孩子結構的變化性質是什麼?頻繁?靜態的? – xQbert
最終用戶將能夠查看歷史記錄,並且它也將與一些業務邏輯一起發揮作用。它不會被超重使用,但它會在這裏和那裏使用。並且結構會經常發生變化。 – Tedderz