在数据库中创建主表并在应用程序中使用它们的理想设计是什么

时间:2014-03-06 13:01:12

标签: c# sql-server

我正在设计一个Web应用程序,作为创建数据库的第一步。现在非常基本的表Role,需要通过数据库进行管理。该表将保留:

RoleID (Identity and Primary Key)
RoleName (Varchar)

现在在应用程序中,如果我需要检查“Admin”角色,启用其中一个按钮,否则禁用它。那么如何编写代码而不用硬编码“Admin”作为角色?

在这种情况下,将Master数据存储在数据库中并在应用程序中引用它可能是一个好的设计吗?

我之前用enum做过但似乎不太可维护,因为如果我在数据库中添加新角色,那么我还需要更改代码中的enum,例如。

public enum Role
{
  Admin=1,
  Normal=2
}

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是扩展您的表结构:

RoleID INT 
RoleName NVARCHAR
IsAdmin BIT

或者您可以使用user1795177创建分配给每个角色的特殊权限的方法。

请在SQL Server中使用NVARCHAR代替VARCHAR来支持unicode。

答案 1 :(得分:0)

创建权限表会更好。 但简单的方法就是添加一个字段'

PermissionType  int 

然后您可以为不同的角色分配权限

答案 2 :(得分:0)

您的按钮不需要检查角色,而是检查权限。 例如:如果你的页面允许查看/修改/添加/删除项目,那么你将有4个权限

public enum Permission
{
  View = 1
  Modify = 2
  Add = 4
  Delete = 5
}

在数据库中,您将拥有一个Role表,指示他们拥有哪个权限。

管理员可以查看/修改/添加/删除 普通可以查看/修改

然后根据当前角色的权限设置“添加”按钮状态。这样您就不需要关心存在多少角色。为了更进一步,每个权限可以附加到实体。

ex:Normal可以在Clients实体上添加/修改/查看,但不能在Invoice实体上添加/修改/查看。