【问题标题】:DB Design for Admins & Customers面向管理员和客户的数据库设计
【发布时间】:2012-03-26 00:48:42
【问题描述】:

我正在创建一个网站,其用户将包括客户和不同级别的管理员。推荐的做法是什么,或者为此设置数据库表的正确方法是什么?

客户和管理员都有用户名和密码。不过,客户也将拥有 CustomerCode 和 Location,而管理员将拥有不同的级别/角色。

它们应该是单独的对象吗?如果是,我应该如何将两者联系起来?

感谢您的任何意见。

【问题讨论】:

  • 这里提出了类似的问题:stackoverflow.com/questions/3511782/… 我建议在此处和 Google 上进行一些搜索。有许多示例应该为您正在寻找的内容提供适当的解决方案。我个人会将它们分成单独的表格。任何有关 DBMS 和设计的书籍都会为您提供适当的解决方案。
  • 当您说不同级别的管理员时,您是什么意思?是否有不同的特权,例如“设置时间”,“删除星球”,...?他们的行动范围是否有限制,例如用户、部门、部门、公司、盆栽?
  • @user92546 更像后者(但将来也可能具有不同的特权)-例如:销售人员只能查看/编辑他/她的客户提交的内容,设计师可以查看/编辑所有客户的意见。
  • @Becky - 我已经完成了定义了公司层次结构的系统:部门、细分、部门、公司。然后是一个功能表:创建小部件,编辑小部件,...。可以向用户授予对功能的访问权限,并且可以将访问权限限制在公司层次结构的任意部分。 UDF 隐藏了很多脏活,因此您可以轻松地询问“用户 42 可以管理部门 16 的电子邮件吗?”不用担心继承之类的。这是一项相当多的工作。
  • @user92546 我明白您在管理权限方面所说的内容。尽管我的情况没有那么广泛,但我可能会采用类似的方法来处理诸如 Roles、AccountRoles 和 RolesPermissions 之类的表。我想我对表格设置更不确定,因为客户有其他用户没有的字段。

标签: sql-server database-design


【解决方案1】:

处理将像您这样的逻辑需求映射到数据库表的主要方法有三种 - (1) 为用户和管理员使用一个表,(2) 使用两个单独的表,以及 (3) 使用三个表,一个包含两类用户的共同数据。

第一种和第三种方式适用于有时应互换使用客户和管理员的情况;第二种方法更好,当它不是一个问题时。我更喜欢 #3,因为它是对两种用户进行建模的最规范化方式。

【讨论】:

  • 所以它类似于 Account 表(accountid、username、password)、Users(userid、accountid)、Customers(customerid、customercode、location、accountid)。然后我想我需要一个 Roles 和 AccountRoles 表(accountid、roleid)和可能的 RolesPermissions。现在我的问题是我如何知道用户是否是客户 - 我是否在帐户表中有另一个字段来确定类型,或者客户是否是另一个角色。感谢您的意见。
  • 另外,似乎有 3 个表,获取用户信息至少需要 2 个步骤 - 首先检查用户的类型(按角色或另一列),然后根据此选择桌子?
  • @Becky 你的桌子设计对了。您可以通过运行account 表与其他两个表的外连接来了解帐户的类型。如果你看到一个非空的customerid,它是一个客户;如果你看到一个非空的userid,它就是一个用户。
  • @Becky 您可以对三个表进行左连接查询,以一步获取用户信息或客户信息。
猜你喜欢
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多