従業員がポジション (役割) を持っている場合、ここに機能冗長性の属性/プロパティがあります。この冗長性が従業員の現在の位置 (役割) です。分解(分解)すると、従業員と 1 対 N の関係を持つ別のエンティティになります。
従業員間に自己関係 (再帰的関係) を作成すると、どの従業員が別の従業員の下で働いているかがわかりますが、どの役割が何を管理しているかはわかりません。
一方、どのポジション (ロール) が相互に機能するかを定義して永続化する必要がある場合は、ロール エンティティを作成し、その再帰的な関係を作成して、どちらが他のロールを支配するかを表現する必要があります。それが完了したら、従業員を役割 (後で、Role テーブルの行/レジスタ) に関連付けて、どの従業員がどの役割を持つかの関係を定義します。
そして、下位階層のすべての役割は、上位階層の役割のために機能します。
ユーザーの役職 (役割) と、ユーザーの間に作成された階層 (役割) に基づいて、どの従業員がどの従業員のために働いているかを知ることができます。これは、たとえば、単純な SQL 結合を使用して実行されます。
これはあなたの場合だと思います。人/従業員間の階層ではなく、位置/役割間の階層が必要です。あることが別のことにつながります。このアプローチでは、ここで課されたカーディナリティに応じて、1 つ以上の役割が管理されているか、または他の役割によって管理されているかを示すことさえできます。これにより、将来のメンテナンスが容易になります。
疑問や質問があれば、コメントしてください。お答えします。