2010-08-18 126 views
6

在我的web应用程序中,我将有三种类型的帐户。3个不同表格中的用户,客户,管理帐户?

  • 用户:使用Web应用程序的免费
  • 客户:广告和获取公司徽标
  • 管理:用于编辑和删除的东西

如果所有这三个是独立的或者在名为“account_type”的列中,我可以将其标记为User,Customer或Admin?

两者有什么优点和缺点?对此有最佳做法吗?

感谢

+0

我认为它会留在用例如何与其他的东西在你的数据模型是有用的。即用户和管理员之间的连接是什么? – Nix 2010-08-18 12:05:48

+0

我会说一个表,但是如果每个角色都有很多不同的属性,那么应该考虑不同的表。您可以用id/enum标记用户,我们称之为角色。角色= 1将是一个用户,角色= 2将是一个客户,角色= 3将是一个管理员。所以你可以很容易地用一个外键构造扩展你的角色(比如David Stratton说的)。 – hering 2010-08-18 12:10:21

回答

9

在一般情况下,一个person可以是用户,客户和管理员 - 因此,我将与Person表列开始,IsUserIsAdmin。稍后(为了快速搜索),您可能决定将单独的表格Admin,Customers,Users与FK添加到Person表格中。

编辑:

一个典型的例子可以是:

  • 5百万的用户
  • 1000客户
  • 10管理员

通常,具有为客户单独的表,并管理员应该加快任何管理员/客户相关的查询。

+0

有时,用户和客户具有不同的属性,因此您需要将其分成2个表格,而不是将可选列放在同一个表格中。 – brunocascio 2017-05-31 23:22:39

7

如果一个用户只能是一个类型,你会用一个表和IsAdministrator位域等

更好,如果使用者可以超过一个帐户类型,你应该再有一个不同的表的外键,

样本结构(数据sypes是SQL Server和只是建议)

用户表

  • 用户名 - 诠释
  • 用户名 - VARCHAR(25)
  • 密码 - VARCHAR(25)
  • 名字 - VARCHAR(50)等等...

角色表

  • RoleId - int
  • 角色描述 - VARCHAR(25)

User_Roles表

  • 用户ID - INT(带foregin关键用户表)
  • 角色ID INT(外键角色表)
+0

我想我会帮你。一个帐户表由他们共享的基本信息全部,然后3个不同的表为他们每个具有特定信息,然后我链接到他们与foreign_key在基本表右? – 2010-08-18 12:10:11

+0

是的,你已经知道了, – David 2010-08-18 12:11:16

+0

我在想你的意思是为管理员提供一张桌子,而另一张桌子则为所有重复信息的客人。我读错了,不是吗? – David 2010-08-18 12:12:01

0

优缺点取决于系统的大小和复杂程度。

我将其拆分成用户,角色,UserResources

用户(将定义基本信息)

用户角色

  • FK->角色类型

Role_Type(用户,管理员,客户,可能的权限,或者你可以进一步解决这个问题)。

UserResources(媒体)

  • FK->用户