0

たとえばLevel 5、組織単位の位置にいるユーザーが自動的に組織のユーザー管理構造になりますLevel 4, 3, 2, 1

スクリーンショットでわかるように。

ここに画像の説明を入力

各組織単位には独自の組織単位がIDあり、各ユーザーも同様です。そのため、各レベルのすべてのgroupId<->userIdリレーションを格納する追加のテーブルがあります。この場合、たとえばレベル 3 からすべてのユーザーを取得できます。これは、すべてのユーザーが n:n テーブルを使用して関連付けられているためです。

このようにして、ユーザーが特定の組織単位に属しているかどうかを簡単に照会できますが、この構造の一貫性を維持するのは複雑です。

例: からユーザーを削除する場合、 からLevel 3/Employeeも削除する必要がありますが、このユーザーが にいない場合に限りLevel 2ます。Level 1Level B/Employee

そこで質問です。ユーザーが組織単位をボトムアップで継承する方法を変更できないため、ユーザーが最終的な場所を一度だけ参照するようにしてこのアプローチを実装する方法または設計パターンがあります。

例: ユーザーを参照してLevel 5/employeeおり、これはデータベースに保存されていますが、 のリレーションを追加したくありませんがLevel 4 - 1、ユーザーがたとえば にいる場合でも高速にクエリを実行したいと考えていますLevel 2

詳細コードは必要ありません。ユーザー管理を再設計してエラーが発生しにくくしたいので、これはより一般的な設計上の問題です。SQL を使用してデータを高速にクエリできる場合 (MS SQL を使用した CTE クエリなど) も素晴らしいですが、通常は MVC (RoR を使用) 環境で動作するはずです。

誰かが詳細や情報を必要とする場合、私は ofc を投稿します。

4

1 に答える 1