私は現在、従業員、マネージャーのエンティティを持つプロジェクトに取り組んでいます。最初は、マネージャーは会社の従業員でなければならないことを当然のことと思っていたので、給与システムで同じ EmployeeID を持つ同一人物です。この仮定に基づいて、Manager クラスに Employee クラスを拡張させます。
後で、私のクライアントは、一部のマネージャーが会社の従業員ではない場合もありますが、それでも従業員が彼らに報告しており、これらのマネージャーもシステムに参加する必要があると言いました。従業員とマネージャーの間の継承関係が壊れており、データベースに 2 つのテーブル (TAB_EMPLOYEE と TAB_MANAGER) を持つ 2 つの独立したクラスがあります。
マネージャーと従業員の両方が、ユーザー名とパスワードを使用してシステムにアクセスできます。User という名前のクラスがあり、システムはマネージャーと従業員のユーザー アカウントを作成する機能を提供する必要があります。前の状況では、マネージャーが従業員を拡張します。マネージャー用のユーザー アカウントを作成し、2 つのロール (ROLE_EMPLOYEE、ROLE_MANAGER) をユーザーに割り当てることができます。しかし、従業員のユーザー アカウントが既に作成されている場合 (この従業員はマネージャーでもあるため、TAB_EMPLOYEE のレコードの他に、TAB_MANAGER にもレコードがあります)、マネージャーとして彼のユーザー アカウントを作成するにはどうすればよいでしょうか? ROLE_MANAGER を既存のユーザーに割り当てることができることはわかっていますが (そのため、ユーザーは ROLE_EMPLOYEE、ROLE_MANAGER の 2 つのロールを持つようになります)、ユーザーがログインした後、ユーザー名またはユーザー ID を使用して、参照されたオブジェクト (従業員および/またはマネージャー)。
オプション 1: TAB_EMPLOYEE 表と TAB_MANAGER 表の両方に userid 列を追加します。オプション 2: 2 つの列 ObjectType、ObjectId を TAB_USER に追加します。ObjectType には EMPLOYEE または MANAGER が含まれ、ObjectId には関連 ID が含まれます。
どちらのオプションが優れているかわかりませんが、これを行うための他のオプションはありますか?