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つのアクセス権の割り当てが残っているため、グループを選択します。それが失われたビジネスルールです。
あなたが1つのグループに所属している場合、その質問は簡単ですが、異なるクォータを持つ複数のグループに所属している場合、特定のリソースアクセスにどのグループクォータが使用されたかは分かりません。 –
例では、ユーザー#1のクォータは3(2 + 1)、クォータの値は2、クォータの値は1ですか。つまり、グループ1のユーザーがリソースに2回アクセスした場合、グループ#2のクォータがまだ使用可能なためだけです。 –
ユーザー#1には、彼が所属するすべてのグループの集計割当てがあるため、リソース#1の割当量は2 + 1 = 3です。ユーザー#2のリソース#1のクォータは、グループ#2(クォータが1)の唯一のメンバーであるため、1です。あなたのグループの誰かがリソースにアクセスすると、それに応じて総量が減ります。 –