В настоящее время я работаю над проектом, в котором есть сотрудники, сотрудники и менеджеры.В самом начале я считал само собой разумеющимся, что менеджер должен быть сотрудником компании, поэтому это один и тот же человек, который имеет одинаковый EmployeeID в системе начисления заработной платы.Исходя из этого предположения, я позволил классу Manager расширить класс Employee.
Позже мой клиент сказал мне, что иногда некоторые менеджеры не являются сотрудниками компании, но у них по-прежнему есть подчиненные, и эти менеджеры также должны быть в системе.Отношения наследования между сотрудником и менеджером нарушены, и теперь у меня есть два независимых класса с двумя таблицами (TAB_EMPLOYEE & TAB_MANAGER) в базе данных.
И менеджер, и сотрудник могут получить доступ к системе с помощью имени пользователя и пароля.Существует класс с именем User, и система должна предоставлять функции для создания учетной записи пользователя для менеджеров и сотрудников.В предыдущей ситуации менеджер расширяет сотрудника, я могу создать учетную запись пользователя для менеджера и назначить две роли (ROLE_EMPLOYEE, ROLE_MANAGER) пользователю.Но теперь, если учетная запись пользователя уже была создана для сотрудника (этот сотрудник также является менеджером, поэтому помимо записи в TAB_EMPLOYEE существует запись в TAB_MANAGER), как я могу создать учетную запись пользователя для него в качестве менеджера?Я знаю, что могу просто назначить ROLE_MANAGER существующему пользователю (так, чтобы у пользователя было две роли: ROLE_EMPLOYEE, ROLE_MANAGER), но после того, как пользователь вошел в систему, я должен использовать имя пользователя или идентификатор пользователя для загрузки указанных объектов (Employee и /или менеджер).Чтобы сделать это, мне нужно:
Вариант 1: добавить столбец идентификатора пользователя в таблицы TAB_EMPLOYEE и TAB_MANAGER.Вариант 2. Добавьте два столбца ObjectType, ObjectId в TAB_USER, ObjectType содержит EMPLOYEE или MANAGER, а ObjectId содержит связанный идентификатор.
Я не уверен, какой вариант лучше, или есть другие варианты для этого?