首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在同一个平台内为不同的web产品创建一个单独的用户表吗?

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

Stack Overflow用户
提问于 2013-02-25 18:01:14
回答 1查看 1.9K关注 0票数 5

我们有一个年轻的专业人士的网络产品,使他们有可能创建他们的网页,以显示他们的专业身份。因此,一个表users包含关于用户的信息(电子邮件、密码、名称),包括他们的凭据和页面信息(溢价与否、页面地址、主题)。

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

现在我们的两种方法:

A/创建一个具有招聘人员名称和凭据的表recruiters,并创建一个列user_id,用于与表usersID连接(如果他们已经创建了站点)。

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

数据库结构:

代码语言:javascript
运行
复制
users
ID name email password group_id premium theme page_address

recruiters
ID name email password company_id user_id

B/将招聘人员添加到具有不同group_idgroup_id表中,并在另一个表中移动有关用户页面的所有信息(溢价与否、页面地址、主题)。我们还将为招聘人员提供第三张表格,其中包含与他们相关的任何信息。

  • 优点:一张有所有凭据的桌子。
  • 不方便:如果我们接触到数以百万计的用户,招聘人员之间的任何查询都必须从一个大表中提取一个很小的子集。还有:为每个用户提供大量的连接来获取站点信息。

数据库结构:

代码语言:javascript
运行
复制
users
ID name email password group_id

pages
user_id premium theme page_address

recruiters
user_id company_id

C/还有其他解决办法吗?

谢谢您的投入!

特里斯坦

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 14:10:36

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

解决这些问题的一个很好的方法是在对象之间建立概念关系。例如:

  • Users是或不是Recruiters0..1 <-> 1关系还是可选的一对一
  • Pages属于Users将是1 <-> 1关系或一对一
  • Recruiters可能有Pages,可以是0..1 <-> 1关系,也可以是可选的一对一

此练习帮助您了解如何列出实体和组织外键。在您的情况下,这是一个很好的第一步,它给出了三个表:UsersRecruitersPages。注意一对一关系的外键是如何放置在强制的1 基数表中的。

现在,要确定放置数据列的位置,以及是否应该有新的表,一个简单的技巧是,通过针对您拥有的派生最多的实体,编写非正规化实体所拥有的所有内容。

这个例子很明显,但我仍然认为它回答了您的问题,也回答了您对组实体和列重复的疑问。

此时,我意识到我忘记了包含Companies实体,该实体将这样声明:

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

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

如果你有任何问题或觉得这是错误的,请随意评论!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15073353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档