たとえばLevel 5
、組織単位の位置にいるユーザーが自動的に組織のユーザー管理構造になりますLevel 4, 3, 2, 1
。
スクリーンショットでわかるように。
各組織単位には独自の組織単位がID
あり、各ユーザーも同様です。そのため、各レベルのすべてのgroupId<->userId
リレーションを格納する追加のテーブルがあります。この場合、たとえばレベル 3 からすべてのユーザーを取得できます。これは、すべてのユーザーが n:n テーブルを使用して関連付けられているためです。
このようにして、ユーザーが特定の組織単位に属しているかどうかを簡単に照会できますが、この構造の一貫性を維持するのは複雑です。
例: からユーザーを削除する場合、 からLevel 3/Employee
も削除する必要がありますが、このユーザーが にいない場合に限りLevel 2
ます。Level 1
Level B/Employee
そこで質問です。ユーザーが組織単位をボトムアップで継承する方法を変更できないため、ユーザーが最終的な場所を一度だけ参照するようにしてこのアプローチを実装する方法または設計パターンがあります。
例: ユーザーを参照してLevel 5/employee
おり、これはデータベースに保存されていますが、 のリレーションを追加したくありませんがLevel 4 - 1
、ユーザーがたとえば にいる場合でも高速にクエリを実行したいと考えていますLevel 2
。
詳細コードは必要ありません。ユーザー管理を再設計してエラーが発生しにくくしたいので、これはより一般的な設計上の問題です。SQL を使用してデータを高速にクエリできる場合 (MS SQL を使用した CTE クエリなど) も素晴らしいですが、通常は MVC (RoR を使用) 環境で動作するはずです。
誰かが詳細や情報を必要とする場合、私は ofc を投稿します。