我应该在同一平台内为不同的Web产品创建单独的用户表吗?

Tri*_*tan 4 database-design relational-database database-schema

我们为年轻专业人士提供了一个网络产品,使他们可以创建自己的页面来展示自己的专业身份.因此,该表users包含有关用户的信息(电子邮件,密码,名称),包括其凭据和有关其页面的信息(优质与否,页面地址,主题)

现在,我们希望为招聘人员提供注册我们平台以浏览候选人的可能性.招聘人员也可以是具有页面但不必具有页面的用户.

现在我们的两种方法:

A /创建一个recruiters包含招聘人员姓名和凭据的表,以及一个列user_id,如果他们创建了一个站点,则ID与该表连接users.

  • 优点:该产品可以由两个不同的团队单独开发.
  • 不方便:如果招聘人员也是用户,则重复姓名和凭证.我们需要在更新一个凭证时更新这两个凭证,或者让他们有两个不同的电子邮件/密码组合,一个用于他们的用户帐户,一个用于他们的招聘帐户.

数据库结构:

users
ID name email password group_id premium theme page_address

recruiters
ID name email password company_id user_id
Run Code Online (Sandbox Code Playgroud)

B /将招聘人员添加到users不同的表中,group_id并在另一个表中移动有关用户页面的所有信息(优质与否,页面地址,主题).我们还将为招聘人员提供第三个表格,其中包含特定于他们的任何信息.

  • 好处:一张包含所有凭据的表.
  • 不方便:如果我们接触到数百万用户,那么招聘人员中的任何查询都必须在一个巨大的表中占据一小部分.另外:大量加入以获取每个用户的站点信息.

数据库结构:

users
ID name email password group_id

pages
user_id premium theme page_address

recruiters
user_id company_id
Run Code Online (Sandbox Code Playgroud)

C /任何其他解决方案?

感谢您的投入!

特里斯坦

Kad*_*Kad 5

关系数据库体系结构不是一门精确的科学,但您可以根据一些通用指南来做出正确的决策.在您提供的第一个选项中,可以很容易地识别出存在列重复的情况.从概念的角度来看,很少有列具有完全相同的含义.password无论您是否是招聘人员,该列都用于登录您的网站.这并不总是被认为是一个问题,但它是一个很好的暗示,应该有一个更好的关系模式来设计您的数据模式.

解决此类问题的一个好方法是建立对象之间的概念关系.例如 :

  • Users是或不是Recruiters会是一个0..1 <-> 1 关系或可选的 一对一
  • Pages属于Users一种1 <-> 1关系或一对一
  • Recruiters可能有一个Pages将是一个0..1 <-> 1关系或可选的 一对一

本练习可帮助您了解如何列出实体和组织外键.这是一个很好的第一步,在你的情况,给了我们三个表:Users,RecruitersPages.请注意如何键国外一对一的关系被安置在强制1 基数表.

在此输入图像描述

现在要确定数据列的放置位置以及是否应该有新表:一个简单的技巧是通过定位您拥有的最衍生实体来编写非规范化实体所具有的所有内容.

在此输入图像描述

这个例子非常明显,但我仍然认为它正在回答你的问题以及你对组实体和列重复的怀疑.

在此输入图像描述

在这一点上,我意识到我忘了包括Companies将被声明的实体:

  • Companies可以有多个Recruiters1..* <-> 1关系,也可以是一对多

在此输入图像描述

再一次,请记住,人们可能并不总是同意这种方法,但考虑到这个小的背景; 这是一个简单的思路.您一直在寻找的答案是:列的含义重复是一个提示,您应该以不同的方式处理您的数据模式.这是一个小提琴.

如果您有任何疑问或感觉这是错误的,请随时发表评论!