2010-08-09 2 views
1

Je travaille actuellement sur un projet qui a des employés, des entités de gestion. Au tout début, je tenais pour acquis qu'un manager doit être un employé de l'entreprise, donc c'est la même personne qui a le même EmployeeID dans le système de paie. Sur la base de cette hypothèse, je laisse la classe Manager étendre la classe Employee. Plus tard, mon client m'a dit que parfois certains managers ne sont pas employés dans l'entreprise, mais ils ont toujours des employés qui relèvent d'eux et ces managers devraient également être dans le système. La relation d'héritage entre l'employé et le gestionnaire est rompue et maintenant j'ai deux classes indépendantes avec deux tables (TAB_EMPLOYEE & TAB_MANAGER) dans la base de données.Besoin d'aide pour la conception de la relation Employé et Manager

Le gestionnaire et l'employé peuvent accéder au système avec un nom d'utilisateur et un mot de passe. Il existe une classe nommée User et le système doit fournir des fonctions pour créer un compte utilisateur pour les managers et les employés. Dans la situation précédente, le gestionnaire étend l'employé, je peux créer un compte d'utilisateur pour un gestionnaire et affecter deux rôles (ROLE_EMPLOYEE, ROLE_MANAGER) à l'utilisateur. Mais maintenant, si un compte utilisateur a déjà été créé pour un employé (cet employé est également un manager, donc un enregistrement dans TAB_EMPLOYEE, il y a un enregistrement dans TAB_MANAGER), comment puis-je créer un compte utilisateur pour lui en tant que manager? Je sais que je peux juste assigner un ROLE_MANAGER à l'utilisateur existant (de sorte que l'utilisateur a deux rôles: ROLE_EMPLOYEE, ROLE_MANAGER), mais après que l'utilisateur est connecté, je dois utiliser le nom d'utilisateur ou l'ID utilisateur ou Manager). Pour ce faire, j'ai des options:

Option 1: Ajoutez une colonne userid dans les tables TAB_EMPLOYEE et TAB_MANAGER. Option 2: Ajouter deux colonnes ObjectType, ObjectId dans TAB_USER, ObjectType contient EMPLOYEE ou MANAGER et ObjectId contient l'ID associé.

Je ne sais pas quelle option est la meilleure ou existe-t-il d'autres options pour le faire?

Répondre

1

Je combinerais les tables afin qu'il y ait simplement une table d'état-major. Ensuite, je voudrais ajouter une relation unaire (pointeur vers lui-même) pour identifier le gestionnaire. Enfin, je voudrais ajouter un drapeau pour identifier le personnel interne (employés).

+0

Merci pour votre réponse, N8g. Dans ce cas, je pense que je peux laisser Manager sous-classe Employee et les deux peuvent sous-classer la classe AbstractUser ou implémente une interface UserDetails si je veux utiliser Spring Security. –

Questions connexes