具有多种类型用户的数据库设计

时间:2009-07-01 20:34:19

标签: database-design

我是数据库设计的新手。 我正在构建一个小型的asp.net mvc Web应用程序,其中有各种类型的用户可以登录该网站。

所以表结构是,

用户表 用户ID(PK),用户名,密码,电子邮件,角色等

员工表: Eid(PK),用户ID(FK),名字,加入日期等

客户表: Cid(PK),用户ID(FK),名字,公司名称等

用户 - 员工表之间存在一对一的关系 和用户 - 客户表。

一般用户,只有“用户”表中的详细信息。

这是一个正确的设计吗?

1 个答案:

答案 0 :(得分:7)

如果用户只能是一种类型......

用户 - > UserTypes

Users表将有一个type_id,它将是UserTypes表中字段的PK。

用户

  • userid 1
  • 姓名 Jonathan Sampson
  • 电子邮件 foo@bar.com
  • typeid 1

UserTypes

  • id 1
  • 输入未注册

    SELECT users.name, users.email, users.typeid, usertypes.type
    FROM users LEFT JOIN usertypes ON (usertypes.id = users.typeid)
    WHERE (users.id = 1)
    

返回: Jonathan Sampson,foo @ bar.com,1,未注册

如果用户可以是多种类型......

用户 - > UsersToTypes - > UserTypes

如果用户需要具有多种类型的容量,您将引入第三种类型:

UsersToTypes

  • 用户ID
  • typeid的

因此,如果用户同时是type1(Customer)和type2(President),那么UsersToTypes中将有两条记录:

  • userid(Jonathan Sampson的1个id)
  • typeid(总统2个身份)
  • userid(1)
  • typeid(客户名称为1)

额外评论......

我不会将公司名称放在users / clients表中。如果您的数据库中有许多代表,您最终会有多次存在该名称。而是创建一个存储以下内容的Companies表:

  • CompanyID
  • 公司名称
  • ContactNumber
  • 的StreetAddress
  • 国家
  • 邮政编码

这样,如果公司进行了更改,则无需编辑clients表来更新其名称。您可以在正确的表中更新其详细信息,然后全局更新。

当然,如果每个公司有多个销售代表,则需要创建一个类似于UsersToTypes的RepsToCompanies表。