2011-06-10 90 views
0

我有下一個情況。在我的數據庫,我有2個表和它們之間的一個關係:
PK_Doc
FK_Employee
文本更新數據庫中的歷史記錄值

員工
PK_Employee
名稱

文件

所以,當我upda te(刪除)現有員工時,文檔必須具有創建時存在的員工的值。我應該怎麼做?

UPD 1:
例如: 我創建一個新的文檔(PK_Doc = 1),並在組合框員工(愛德華諾頓)選擇。然後愛德華諾頓成爲愛德華哈里森。所以,當我打開一個文檔(PK_Doc = 1)員工組合框的電流值應愛德華·諾頓

+0

問題不清楚:請提供數據示例以顯示您描述的情況的開始和結束。請注意,如果Document具有FK,則不能從員工刪除行。 – BonyT 2011-06-10 06:34:45

+0

添加更新1.是完整的場景嗎? – 2011-06-10 06:43:41

回答

1

您需要包含Employee_History表至少以下幾列

PK_Employee_History_Id EMPLOYEE_ID(不是約束) 名稱 姓 ValidFrom(日期)

論職工創建/更新/刪除場景您創建Employee_History一個新的紀錄 - 我會用一個SQL觸發此。

將文檔指向不可變的Employee_History表記錄而不是可變的Employee記錄。

+0

我認爲這是很好的工作方式。但我會盡力解決我的問題,而無需添加新的歷史記錄表。我想我可以在Employee中添加2列:Guid和RowDate。並在文件表FK Guid。所以當編輯一個員工時 - 我會用相同的Guid添加一個新行。 – 2011-06-10 07:46:18

+0

我希望這個應用程序僅供個人使用 - 我絕不會在任何商業環境中認可這種方法!你基本上有一張看起來像包含Employees的表,它包含Employee,包含EmployeeHistory記錄和一個Id,它看起來像一個Employee,實際上只是一個指向員工歷史中某個argitary點的指針,真實ID是GUID你已經添加了。非常混亂和尷尬的模式設計。 – BonyT 2011-06-10 08:32:05

+0

引用丹尼斯的鏈接我認爲你的建議可能是類型2,但你需要清楚你的名字以避免混淆。 – BonyT 2011-06-10 10:27:29

1

換句話說,您需要處理幾個slowly changing dimensions。骨子建議4型,但你有其他選擇。如果您需要精確的審計線索,另請參閱bi-temporal databases

+0

感謝一個非常有用的鏈接。我希望,我的英語能夠快速瞭解​​這個wiki頁面 – 2011-06-11 17:02:24

+0

耶!我用俄語發現了這個頁面:/ http://habrahabr.ru/blogs/sql/101544/ – 2011-06-11 17:16:57