在数据库表中定义角色限制的更好方法

时间:2013-01-17 18:49:24

标签: sql sql-server database-design

角色表

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

我的要求是:

  • 任何路线只能有一个主要用户
  • 任何路线都可以有0个或一个次要用户
  • 任何路线都可以有0个或更多替代用户
  • 路线的所有用户都是唯一的

如何从RouteRoleUser表中的db设计角度获取需求限制?目前,如果我将Route,Role和User作为候选键,则不会 阻止任何人为路线添加两个主要用户。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

对于“任何路由可以有 N (类型)用户”规则,您可以使用INSTEAD OF INSERT触发器进行验证并阻止插入。我个人在应用程序或存储过程级别处理这种类型的逻辑。

对于“路径的所有用户都是唯一的”,您可以在RouteID,UserID上使用UNIQUE约束来强制执行此操作。