0

SQL Serverではグループ内のユーザのためのリソース割り当てを実装します。各グループにはリソース割り当てがあります。次のようには、ユーザーがの一部にすることができ、多くのユーザー、多くのグループがあり、2008

テーブルは以下のとおりです。もちろん

User: UserId, LastName, FirstName, ... 
Group: GroupId, GroupName, ... 
UserGroup: GroupId, UserId (Users are in Groups) 
Resource: ResourceId, ResourceName, ... 
GroupResource: GroupId, ResourceId, Quota (Users in Groups can access certain Resources specified Quota times) 
UserResourceAccess: UserId, ResourceId, InsertDate, ... 

を、そこに毎日、毎月のクォータがあるが、それはこの質問の目的のために重要ではありません。

したがって、ユーザー#1(リソースクォータ2とリソースクォータ1のグループ#1、#2)は、リソース#1にアクセスすると、そのリソースの合計クォータは1になります。(1 + 2) - 1 = 2(アクセスするために残された時間)。

しかし、その後、グループ#2のメンバーだと、彼は、リソース#1にアクセスしようとする他のユーザ#2があります...

はここで興味深い部分は、ユーザ#1はすでにそのリソースと彼の合計にアクセスしていますクォータは1回減らされました(現在は2になります)。しかし、どのグループクォータが削減されたのかわかりません。

SQL Server 2005/2008でこのロジックを実装する方法でもデナリ:)?

どのように我々は、ユーザ#2は実際には1つは、時間と力ユーザ#1のアクションを残り、そのリソースにアクセスできることを知ることができるが、1としませグループ#2' で彼のグループ#1のクォータを減らしますか?

、それはまだあなたにどんな意味がある場合は、この問題を解決してください。 :)私は今かなりの時間それについて考えてきた。

ちょうどそれを明確にするために、私は、ユーザ#1は、そのリソースにアクセスした直後に、#2のクォータは、今あるものユーザーを私に言うだろう単一のSELECT文を持っていると思います。 (ヒント:それはまだ1ではなく0にしてください)

更新

ユーザ#1は、リソース#1のための彼のクォータ= 2 + 1であるため、彼は中だすべてのグループの集計クォータを持っています3;ユーザー#2のリソース#1のクォータは、グループ#2(クォータが1)の唯一のメンバーであるため、1です。あなたのグループの誰か(リソースにアクセスするリソースのクォータを持つ)がリソースにアクセスすると、それに応じて(そのリソースがアクセスされた回数だけ)そのリソースの総クォータが削減されます。次のように

アップデート2

クォータ削減ルールがある:最も左側クォータのグループは、それぞれのアクセスに使用されるべきです。したがって、最初の例では、ユーザー#1がリソースにアクセスするとき、グループ#1にはクォータが2(1より大きい)なので、グループ#1を選択します。次回は、ユーザー#2がリソースにアクセスするときに、1つのアクセス権の割り当てが残っているため、グループを選択します。それが失われたビジネスルールです。

答えて

0

私はあなたが何を求めているのか理解していると信じていますが、あなたのロジックに欠陥があると信じています。グループの利用可能な使用量を減らす方法を尋ねていますが、実際には、ユーザーのグループから利用可能なリソースの可用性を計算し、グループではなくユーザーのために減らしています。

この場合、グループリソースの可用性を集計し、ユーザーのリソースアクセス数を差し引きます。あなたの最後のコメントに基づいて

UPDATE

、私たちは同じページに取得していると信じています。グループのクォータは、グループ内のすべてのユーザに対して固定されています。ユーザ#3とユーザ#4がグループ#3、クォータが2、ユーザ#3が2回、ユーザ#4が2回、それぞれ1回アクセスできます。

これを考えると、複数のグループのユーザーがリソースにアクセスするときに使用するグループのクォータを計算しようとしています。

未解決のビジネスルールの技術的な解決策を決定しようとしていますが、ユーザーはどのグループの割り当てを引き出すのですか?最初にシステムの外部に定義する必要があり、それを実装するのは簡単です。どのグループからユーザーを引き出す必要がありますか?グループ内のユーザー数に基づいていますか?グループに優先順位はありますか?ユーザーは優先グループを持っていますか?

あなたがビジネスルールを知っている限り、あなたが置いた解決策はテストできません。あなたはそれを比較することはありません。

+0

あなたが1つのグループに所属している場合、その質問は簡単ですが、異なるクォータを持つ複数のグループに所属している場合、特定のリソースアクセスにどのグループクォータが使用されたかは分かりません。 –

+0

例では、ユーザー#1のクォータは3(2 + 1)、クォータの値は2、クォータの値は1ですか。つまり、グループ1のユーザーがリソースに2回アクセスした場合、グループ#2のクォータがまだ使用可能なためだけです。 –

+0

ユーザー#1には、彼が所属するすべてのグループの集計割当てがあるため、リソース#1の割当量は2 + 1 = 3です。ユーザー#2のリソース#1のクォータは、グループ#2(クォータが1)の唯一のメンバーであるため、1です。あなたのグループの誰かがリソースにアクセスすると、それに応じて総量が減ります。 –

関連する問題