gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:06:06 25 4
gpt4 key购买 nike

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

所以表结构是,

用户表
userid(PK), username , password , email , role 等

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

客户表:
Cid(PK)、userid(FK)、名字、公司名称等

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

一般用户,只有用户表中存在的详细信息。

这是一个正确的设计吗?

最佳答案

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

用户 -> 用户类型

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

用户

  • 用户 ID 1
  • 姓名乔纳森·桑普森
  • 电子邮件 foo@bar.com
  • 类型 ID 1

  • 用户类型
  • 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)

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

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

    用户 -> 用户类型 -> 用户类型

    如果用户需要拥有不止一种类型的能力,你将引入第三种类型:

    用户类型
  • 用户 ID
  • typeid

  • 因此,如果用户同时是 type1(客户)和 type2(总裁),您将在 UsersToTypes 中有两条记录:
  • 用户 ID(乔纳森·桑普森的 1 个 ID)
  • typeid(总统的 2 id)
  • 用户 ID (1)
  • typeid(客户的 1 个 ID)

  • 额外的评论...

    我不会将公司名称放在用户/客户表中。如果您的数据库中有许多他们的代表,那么您最终会多次出现该名称。相反,创建一个 Companies 表来存储以下内容:
  • 公司ID
  • 公司名称
  • 联系电话
  • 街道地址
  • 城市
  • 国家
  • zip

  • 这样,如果公司经历过变更,您就无需编辑客户表来更新其名称。您在适当的表中更新其详细信息,然后全局更新它们。

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

    关于database-design - 具有多种类型用户的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071254/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com