亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于修訂的數據庫設計?

用于修訂的數據庫設計?

慕桂英546537 2019-11-21 14:33:18
我們在項目中要求將實體的所有修訂(更改歷史記錄)存儲在數據庫中。目前,我們有2個為此設計的提案:例如,對于“雇員”實體設計1:-- Holds Employee Entity"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"-- Holds the Employee Revisions in Xml. The RevisionXML will contain-- all data of that particular EmployeeId"EmployeeHistories (EmployeeId, DateModified, RevisionXML)"設計2:-- Holds Employee Entity"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"-- In this approach we have basically duplicated all the fields on Employees -- in the EmployeeHistories and storing the revision data."EmployeeHistories (EmployeeId, RevisionId, DateModified, FirstName,       LastName, DepartmentId, .., ..)"還有其他方法可以做到這一點嗎?“設計1”的問題在于,每次需要訪問數據時,我們都必須解析XML。這將減慢該過程的速度,并增加一些限制,例如我們無法在修訂數據字段上添加聯接?!霸O計2”的問題在于,我們必須在所有實體上重復每個字段(我們要維護其大約70-80個實體的修訂版)。
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

千萬不能把它們都放在一個表與IsCurrent鑒別屬性。這僅會導致一系列問題,需要代理密鑰和各種其他問題。

設計2確實存在模式更改問題。如果更改了Employees表,則必須更改EmployeeHistories表及其所伴隨的所有相關存儲??赡苁鼓募軜嫺墓ぷ骷颖?。

設計1運作良好,如果做得好,不會對性能造成太大影響。您可以使用xml模式甚至索引來克服可能的性能問題。您對解析xml的評論是有效的,但是您可以使用xquery輕松創建視圖-您可以將其包含在查詢中并加入其中。像這樣

CREATE VIEW EmployeeHistory

AS

, FirstName, , DepartmentId


SELECT EmployeeId, RevisionXML.value('(/employee/FirstName)[1]', 'varchar(50)') AS FirstName,


  RevisionXML.value('(/employee/LastName)[1]', 'varchar(100)') AS LastName,


  RevisionXML.value('(/employee/DepartmentId)[1]', 'integer') AS DepartmentId,


FROM EmployeeHistories 


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 743 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號