3

役割表

RoleID Desc
1      primary
2      secondary
3      alternate

ユーザー

UserID  Name
1       ann
2       saylor
3       jim
4       ken
5       kathy

ルートテーブル

RouteID   Name
1          x
2          y

RouteRoleUserテーブル

RouteID   RoleID      UserID
1         primary      ann
1         secondary    saylor
1         alternate    jim
1         alternate    ken
1         alternate    kathy

私は次のことを示すグリッドを持っています:

Route | Primary Pumper | Secondary Pumper | Alternate Pumpers (comma separated)
x        ann                saylor           jim, ken, kathy

私の要件は次のとおりです。

  • どのルートにも、プライマリユーザーを1人だけ含めることができます
  • どのルートにも0人または1人のセカンダリユーザーを含めることができます
  • どのルートにも0人以上の代替ユーザーを含めることができます
  • ルートのすべてのユーザーは一意です

RouteRoleUserテーブルのデータベース設計の観点から要件を制限するにはどうすればよいですか?現在、ルート、ロール、およびユーザーを候補キーとして作成しても、ルートに2人のプライマリユーザーを追加することは誰にも止められません。

もっと良い方法はありますか?

4

1 に答える 1

1

「任意のルートにN個の(タイプ)ユーザーを含めることができる」ルールの場合、INSTEAD OF INSERT トリガーを使用して挿入を防止することで、これを検証できます。私は個人的に、アプリケーションまたはストアド プロシージャ レベルでこの種のロジックを処理します。

「ルートのすべてのユーザーは一意」の場合、RouteID、UserID の UNIQUE 制約を使用してこれを強制できます。

于 2013-01-17T20:26:49.187 に答える