在性能方面最有效的方法是在数据库中设置用户权限?

时间:2014-07-31 17:52:05

标签: sql database-design relational-database

在这两种不同的方法中,哪一种在SQL Server数据库中查询时应该表现得更好?第一种方法似乎更具关系性和“正确性”,可以通过接口进行管理,以便可以通过编程方式添加新权限。我们将SQL Server与实体框架6一起使用,但这可能并不重要。

USER TABLE
----------
UserID
FirstName
LastName
etc...


PERM TABLE
---------
PermID
PermName
etc...


USERPERM TABLE
----------
UserPermID
UserID
PermID

或者这会是一种更有效的方法吗?如果引入了新的权限,则必须手动管理,但如果查询的效率更高,那么让管理层头疼的话可能是值得的,因为这些表必须不断被打击。

USER TABLE
----------
UserID
FirstName
LastName
etc...


USERPERM TABLE
----------
UserPermID
UserID
HasManageUserPerm
HasManageGroupPerm
HasManageDocumentPerm
HasManageEmailTemplatePerm
HasManageBrandingPerm
HasManageProcessPerm
HasManageWebFormPerm
etc.

1 个答案:

答案 0 :(得分:0)

两个架构之间存在一些差异。但是,这些差异可以忽略不计,并且不会以任何方式“制造或破坏”您的数据库或应用程序。因此,使用哪个并不重要。

架构1

<强>优点:

  • 由于权限被分解到他们自己的表中,因此可以认为更加规范化。因此,非常清楚权限是什么以及它们如何适合整个数据库模式。
  • USERPERM上的查询仅返回所需的行。

<强>缺点:

  • 很难快速查看用户拥有的权限,因为每个权限都由数据库中自己的记录表示。
  • 大多数查询至少需要一个JOIN语句。

架构2

<强>优点:

  • 轻松查看用户拥有的权限。
  • 不需要JOIN语句来查看权限数据。

<强>缺点:

  • 对USERPERM表的查询将返回所有权限列,这是要加载和查看的更多数据。
  • 重命名或删除权限将需要编辑或删除整个列。

如果对您来说意味着什么,就关系数据库模式而言,您的第一个模式更“传统”。希望这会有所帮助。