我目前正在开发一个包含Employee,Manager实体的项目。在一开始,我理所当然地认为经理必须是公司的员工,因此他们是在薪资系统中具有相同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表中添加用户标识列。 选项2:在TAB_USER中添加两列ObjectType,ObjectId,ObjectType包含EMPLOYEE或MANAGER,ObjectId包含相关的id。
我不确定哪个选项更好或者还有其他选择吗?
答案 0 :(得分:1)
我会把表结合起来,所以只有一张员工表。然后我会添加一个一元的关系(指针回自身)来识别经理。最后,我会添加一个标志来识别内部员工(员工)。