2010-08-09 77 views
1

我目前正在開發一個具有員工,經理實體的項目。在一開始,我認爲管理者必須是公司的員工,因此他們是同一個在工資系統中具有相同EmployeeID的人。基於這個假設,我讓Manager類擴展了Employee類。需要關於員工和經理關係設計的幫助

後來,我的客戶告訴我有時候有些經理不是公司的員工,但他們仍然有員工向他們報告,這些經理也應該在系統中。員工和經理之間的繼承關係被破壞,現在我有兩個獨立的類,其中有兩個表(TAB_EMPLOYEE & TAB_MANAGER)在數據庫中。

經理和員工都可以使用用戶名和密碼訪問系統。有一個名爲User的類,系統應該提供爲經理和員工創建用戶帳戶的功能。在之前的情況下,經理擴展了員工,我可以爲經理創建一個用戶賬戶,併爲用戶分配兩個角色(ROLE_EMPLOYEE,ROLE_MANAGER)。但現在,如果已經爲員工創建了用戶帳戶(該員工也是經理,那麼除了TAB_EMPLOYEE中的記錄,TAB_MANAGER中還有記錄),我如何才能爲他創建一個用戶帳戶作爲經理?我知道我可以將ROLE_MANAGER分配給現有用戶(這樣用戶有兩個角色:ROLE_EMPLOYEE,ROLE_MANAGER),但是在用戶登錄後,我必須使用用戶名或用戶ID來加載引用的對象(Employee和/或經理)。爲了做到這一點,我必須選擇:

選項1:在TAB_EMPLOYEE和TAB_MANAGER表中添加一個userid列。 選項2:在TAB_USER中添加兩列ObjectType,ObjectId,ObjectType包含EMPLOYEE或MANAGER,而ObjectId包含相關的ID。

我不確定哪個選項更好或者是否有其他選項可以做到這一點?

回答

1

我會結合表,所以只有一張工作人員表。然後我會添加一個一元關係(指向自己的指針)來標識經理。最後,我會添加一個標誌來標識內部員工(員工)。

+0

感謝您的回覆,N8g。 在這種情況下,我想我可以讓Manager子類Employee,並且如果我想使用Spring Security,它們都可以繼承AbstractUser類或實現UserDetails接口。 – 2010-08-09 12:17:50