我们有一个年轻的专业人士的网络产品,使他们有可能创建他们的网页,以显示他们的专业身份。因此,一个表users
包含关于用户的信息(电子邮件、密码、名称),包括他们的凭据和页面信息(溢价与否、页面地址、主题)。
现在,我们希望为招聘人员提供在我们的平台上注册浏览候选人的可能性。招聘人员也可以是有页面的用户,但不必这样做。
现在我们的两种方法:
A/创建一个具有招聘人员名称和凭据的表recruiters
,并创建一个列user_id
,用于与表users
的ID
连接(如果他们已经创建了站点)。
数据库结构:
users
ID name email password group_id premium theme page_address
recruiters
ID name email password company_id user_id
B/将招聘人员添加到具有不同group_id
的group_id
表中,并在另一个表中移动有关用户页面的所有信息(溢价与否、页面地址、主题)。我们还将为招聘人员提供第三张表格,其中包含与他们相关的任何信息。
数据库结构:
users
ID name email password group_id
pages
user_id premium theme page_address
recruiters
user_id company_id
C/还有其他解决办法吗?
谢谢您的投入!
特里斯坦
发布于 2013-08-22 14:10:36
关系数据库体系结构并不是一门精确的科学,但是您可以根据一些通用的指导方针来做出正确的决策。在您提出的第一个选项中,可以很容易地确定存在列重复的情况。在概念观点上,很少有列具有完全相同的含义。password
列用于登录您的网站,无论您是否是招聘人员。这并不总是被认为是一个问题,但这是一个很好的提示,即应该有一个更好的关系模式来设计数据模式。
解决这些问题的一个很好的方法是在对象之间建立概念关系。例如:
Users
是或不是Recruiters
是0..1 <-> 1
关系还是可选的一对一Pages
属于Users
将是1 <-> 1
关系或一对一Recruiters
可能有Pages
,可以是0..1 <-> 1
关系,也可以是可选的一对一。此练习帮助您了解如何列出实体和组织外键。在您的情况下,这是一个很好的第一步,它给出了三个表:Users
、Recruiters
和Pages
。注意一对一关系的外键是如何放置在强制的1
基数表中的。
现在,要确定放置数据列的位置,以及是否应该有新的表,一个简单的技巧是,通过针对您拥有的派生最多的实体,编写非正规化实体所拥有的所有内容。
这个例子很明显,但我仍然认为它回答了您的问题,也回答了您对组实体和列重复的疑问。
此时,我意识到我忘记了包含Companies
实体,该实体将这样声明:
Companies
可以有多个Recruiters
,可以是1..* <-> 1
关系或一对多
再一次,记住人们可能并不总是同意这种方法,但考虑到这个小背景,这是一个简单的思路。您可能一直在寻找的答案是:列的意思是复制,这是一个提示,您应该以不同的方式处理数据模式。这是一个小提琴。
如果你有任何问题或觉得这是错误的,请随意评论!
https://stackoverflow.com/questions/15073353
复制相似问题