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

San*_*San 6 database-design

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

表结构是,

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

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

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

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

一般用户只有Users表中的详细信息.

这是一个正确的设计吗?

Sam*_*son 7

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

用户 - > UserTypes

Users表将具有type_id,它将是UserTypes表中字段的PK.

用户

  • 用户标识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)
    
    Run Code Online (Sandbox Code Playgroud)

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

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

用户 - > UsersToTypes - > UserTypes

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

UsersToTypes

  • 用户身份
  • typeid的

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

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

额外评论......

我不会将company-name放在users/clients表中.如果你的数据库中有很多代表,你最终会有多次出现这个名字.而是创建一个存储以下内容的Companies表:

  • CompanyID
  • 公司名
  • 联系电话
  • 街道地址
  • 邮政编码

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

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