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

Database design 具有多种用户类型的数据库设计,database-design,Database Design,我对数据库设计相当陌生。 我正在构建一个小型asp.net mvc web应用程序,其中有各种类型的用户可以登录到该网站 所以这个表的结构是 用户表 用户ID(PK)、用户名、密码、电子邮件、角色等 员工表: Eid(PK)、用户名(FK)、名字、加入日期等 客户表: Cid(主键)、用户ID(FK)、名字、公司名称等 users-employees表之间存在一对一关系 和用户-客户表 普通用户仅在用户表中显示详细信息 这是正确的设计吗?如果用户只能是一种类型。。。 用户->用户类型 Users

我对数据库设计相当陌生。 我正在构建一个小型asp.net mvc web应用程序,其中有各种类型的用户可以登录到该网站

所以这个表的结构是

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

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

客户表: Cid(主键)、用户ID(FK)、名字、公司名称等

users-employees表之间存在一对一关系 和用户-客户表

普通用户仅在用户表中显示详细信息

这是正确的设计吗?

如果用户只能是一种类型。。。 用户->用户类型

Users表将有一个type_id,它是UserTypes表中一个字段的主键

使用者

  • 用户标识1
  • 我叫乔纳森·桑普森
  • 电子邮件foo@bar.com
  • 类型ID 1
用户类型

  • id 1
  • 类型未注册

返回:乔纳森·桑普森,foo@bar.com,1,未注册

如果用户可以是多种类型。。。 用户->用户类型->用户类型

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

用户类型

  • 用户ID
  • 类型ID
因此,如果用户同时是type1(Customer)和type2(President),则UsersToTypes中会有两条记录:

  • 用户id(Jonathan Sampson的1个id)
  • typeid(2个总统id)
  • 用户标识(1)
  • typeid(1个客户id)
额外评论。。。 我不会将公司名称放在用户/客户表中。如果您的数据库中有许多他们的代表,那么您将多次使用该名称。而是创建一个存储以下内容的Companys表:

  • 公司ID
  • 公司名称
  • 联系电话
  • 街道地址
  • 城市
  • 陈述
  • Zipcode
这样,如果一家公司经历了更改,您就不需要编辑clients表来更新其名称。在适当的表中更新其详细信息,然后全局更新


当然,如果每个公司都有多个代表,您需要创建一个代表公司表,类似于我们的UsersToTypes。

如果一个用户成为雇员或客户,或者两者都成为雇员,该怎么办?在最初的设计中,这不是一个问题,但是使用显式的用户类型id,这会造成严重破坏。实际上,角色列可以区分不同类型的用户。员工/客户应该是一个表。我已经更新了我的答案。但问题是员工和客户需要存储不同的详细信息,例如,我们的客户实际上是来自不同公司的人,所以我需要将“CompanyName”存储为客户表中的一列。不是真的。添加公司id字段并添加公司表。这样,如果您想要一份与您有业务往来的公司的列表,就不必查询用户表。
SELECT users.name, users.email, users.typeid, usertypes.type
FROM users LEFT JOIN usertypes ON (usertypes.id = users.typeid)
WHERE (users.id = 1)