作業表中角色的 ERD 和建模所有權
我目前正在通過我的 ERD 對我認為相對簡單的關係進行建模。我什至不確定嚴格來說這是多對多,但仍有許多員工與工作相關聯,並且有許多工作與員工相關聯。
我認為這與我假設的“真實”多對多關係不同(我的意思是需要數據庫中的連結表,例如:學生到課程),因為我真的談論兩個不同的角色。一名員工負責多項工作的授權,一名員工負責多項工作的管理(儘管可能是同一名員工)
編輯:試圖消除任何歧義,@Avarkx 讓我開始思考,我真正需要做的是通過某種“CanManage”表來控制整體權限,以允許發票、報價單、圖紙和工作的功能;而不是允許員工在逐個工作的基礎上使用某些功能(下圖中就是這種情況)
但是,我還需要能夠記錄哪個員工在 Job 中實際執行了該操作,這就是我在上面的段落中試圖傳達的內容(儘管是以迂迴的方式……對不起!)
這是我對先前建議建模的嘗試:
我想你會想要一個
EmployeeCanAuthorizeJob
表和EmployeeCanAdministrateJob
一個直接多對多表示的表(現在,我想你會發現你會用目前結構複製你的工作記錄)。這樣,您可以將許多EmployeeID
s 與JobID
s 聯繫起來,反之亦然,以完成任一管理任務。也就是說,我最終可能只會創建一個
EmployeeCanManageJob
表,以及可能的輔助查找表ManageJobType
。第二個表的目的是包括員工可以在特定工作中執行的功能。今天你有兩個,但誰知道CanDelete
以後是否需要分解?EmployeeCanManageJob ------------------------------------------------ PK | Employee_FK FOREIGN KEY Employee.EmployeeID PK | Job_FK FOREIGN KEY Job.JobID (PK | ManageJobType_FK FOREIGN KEY ManageJobType.ManageJobType_PK)
這樣,如果
ManageJobType_PK
1 是“管理”而 2 是“授權”,則員工 1 可以使用記錄管理工作 1,並使用( 1, 1, 1 )
記錄授權相同的工作( 1, 1, 2 )
。根據編輯:
至少有兩種流行的變更跟踪方法:第一種是審計表,第二種是某種形式的漸變維度。為了讓您免於悲痛,您在這里處理的不是“緩慢變化的維度”,而是“快速變化的事實”,如果您願意的話,所以我希望您會發現自己正在查看其中一個實現審計表場景的多種方法。您選擇哪種方法在很大程度上取決於您和您的團隊對所涉及技術的熟悉程度(或者更具體地說,每個選項的優缺點)。我個人一直是日誌觸發器的粉絲方法並認為它非常適合您的需求,但是如果您有可用的開箱即用功能,例如在 Sql Server 中,也許您和您的團隊會更適應這種方法。