【发布时间】:2022-01-19 22:10:44
【问题描述】:
我正在尝试创建一个简单的数据库来存储各种工作列表。就这个问题而言,假设我有 5 个不同的工作机会:
╔══════════════════╦═════════════════╦═════════════════════════╗
║ title ║ level ║ skills ║
╠══════════════════╬═════════════════╬═════════════════════════╣
║ Python Developer ║ Trainee, Junior ║ Python, SQL, Django ║
║ Python Developer ║ Trainee, Junior ║ Python, REST API, Flask ║
║ Python Developer ║ Senior ║ Python, REST API, Flask ║
║ QA Engineer ║ Mid ║ React, AWS ║
║ QA Engineer ║ Senior, Expert ║ Java, AWS, SQL ║
╚══════════════════╩═════════════════╩═════════════════════════╝
如您所见,每份工作机会都包含三项内容:职称(只是工作头衔)、级别(雇主要求的经验水平)和技能(特定工作职位所需的技能)。现在,因为我想将所有内容都放入关系数据库模型中,所以我不能让它保持原样,我需要重新组织它,以便一切正常(换句话说,我需要满足范式标准)。所以我决定我需要基于列创建 3 个新表:title、level 和 skills + 2 个桥(链接)表:title_level 和 title_skills,因为存在多对多关系.创建这 5 个表并在每个表中插入适当的数据后,一切看起来像这样:
加入后的结果是这样的:
这还不错,但我有疑问。 我的主要问题是:这种情况是否适合这种表架构?我主要关心的是每个职位发布的独特性。如果您查看title 表,您会注意到我决定将每个职位名称视为一个单独的值,以便每个职位都有唯一的 id(这很合乎逻辑:5 个职位和 5 个 id)。但我很好奇是否有权以这种方式做事,因为这种方法导致我遇到title 表中的标题列重复的情况。所以也许我应该去掉重复项,让这个表只剩下两行:Python Developer 和QA Engineer?但是,如果我这样做,那么我如何区分工作机会呢?我的意思是除非我将 id 列放在某个表中(我不知道在哪里),否则不会有唯一性。
【问题讨论】:
-
在您的模型中,您缺少“工作职位”表。这个应该和“Position_Level”和“Position_Skill”有关。职称可以只是职位的一个属性;或者你可以单独建模(我认为这里没有必要)。
-
技能不是跟等级有关,而不是标题吗?
-
@The Impaler 我需要进一步解释你的想法。这个“职位”表的目的是什么?它需要哪些新列?
-
@Gilbert Le Blanc 你的意思是在“技能”表和“级别”表之间创建一个链接表吗?里面会有哪些列?
-
@beginsql 您的 ER 模型缺少实体“工作机会”,我认为这是一个主要实体。该实体应与“title”具有 N:1 关系,M:N 与“level”以及 M:N 与“skill”。
标签: database database-design database-schema identity junction-table