2011-06-02 87 views
3

美好的一天!我是否违反了我的数据库设计中的任何NF规则?

我是创建数据库的新手......我需要为我的招聘网站应用程序创建一个数据库。

我的数据库架构如下: enter image description here

注:我包含在其他表applicant_id ...例如考试,面试,考试类型。

我违反任何规范化规则吗?如果我这样做,你有什么建议来改进我的设计?谢谢

+0

如果申请人真的是你的执政实体,那看起来不错。 – Till 2011-06-02 13:43:36

回答

4

整体看起来不错。需要考虑的几点:

  • 访问者也是一个人。您将需要使用程序逻辑来防止不同/拼写错误。
  • 我见过的最长真人邮箱地址是62个字符。
  • 在考试使用保留字date为列名
  • (主观)我会重新命名applicant_date到applied_at
  • 我没有看到一个邮递/邮政编码为申请人
  • 所有result列VARCHAR(4)。如果他们使用相同的值,他们是否可以正常化?
  • 出生日期是更好地存储年龄。你不想安排某人面试他们的出生日期(或者如果你本性残忍,你确实需要:))。年龄可以从中推导出来,并且在任何时候都是正确的。

编辑: 鉴于结果是通过或失败,只需声明该字段布尔值并命名为“通过”。快得多。

+0

我看过更长的电子邮件。 – HLGEM 2011-06-02 13:56:35

3

我可以看到一个潜在问题的一个领域是面试官被整合到面试中。此外,我想指出申请人的来源渠道,可能会导致发生泡沫(取决于您将要在那里存储的内容)。

+1

好点。面试官应该是一个独立的实体。 – Till 2011-06-02 13:52:03

1

乍一看,您似乎没有违反任何规范化规则。但是,从架构设计中不清楚,applicant_id是引用申请人表格。确保在实际实施scehma时将其声明为引用申请表的外键。

不对数据做出任何假设,但筛选的结果可以存储在4个字符中吗?

+0

筛选结果==合格或不合格。是的,我已经宣布它是一个外键。谢谢。 – newbie 2011-06-02 13:52:58

1

年龄和性别通常是非法的问题,在面试中要问,所以你可能不想记录这样的事情。你可能需要一个单独的面试官表。您还可能需要一个存储资格的单独表格,以便您可以在下一次出现问题时搜索已接受C#知识访谈的人员。我可能会做一些类似于资格表的工作,即查询您想要添加到申请人的资格表中。然后,您需要申请人资格表中的资格编号,申请人编号,年数,技能等级。

我注意到结果是一个varchar 4字段,我假设你打算把通过/失败。我会考虑有一个数字分数。那个得到80%问题的人通过了,但那些得到100%正确答案的人可能是更好的候选人。事实上,面试时我可能会面试问题和结果表。然后,您可以记录分数以及有关每个问题的任何评论,以便以后评估很多考生。当我们访问数百人时(我们当时有超过一百个开口,这是个人电脑的前景),我们在纸电子表格中手动完成了这项工作,并发现它能够比较问题的答案。很难记得你采访过的200人,以及谁说了些什么。当你有新的开放时间时,可能会有所帮助,以找到那些在面试时可能没有找到工作的最适合新工作的问题的人(例如5个优秀的候选人,1个工作岗位)。

我可能还会考虑一个字段来标记候选人由于某种原因是否永远不能雇用。比如他犯了重罪,或者他在简历上撒谎,而你在他面试时抓到了他,或者他完全无能为力。这可以很容易地防止这个人被重复考虑。

1

我认为你的数据库结构对未来的使用有很多限制。例如,你甚至可以有一个考试的描述,因为这个稳定的商店的分数和考试日期。这可能是因为这种信息已经存储在另一个系统中,你只能设计结果容器。但即使如此,考试,屏幕和面试只是一种测试形式,为什么有关信息应该存储在一张表中,并通过某种类型的ID进行区分。如果您决定这种方法,你必须创建另一个表来存储有关结果

的信息所以该定义应该看起来更像是这样的:

TEST 
TEST_ID 
TEST_TYPE_ID ref TEST_TYPE - Table that define the test type 
TEST_REQUIRED_SCORE - The value of the score that need to be reach to pass the exam. 
... - Many others properties of TEST like duration, expire date, active inactive etc. 

APPLICANT_RESULTS 
APPLICANT_ID ref APPLICANT 
TEST_ID = ref TEST 
TESTS_DATE - The day of exam 
TEST_START - The time when the test has started 
TEST_FINISH - The time when the test has ended 
APPLICANT_RESULT - The applicant result of taken test. 

这种结构更灵活,给简单的方法来指定表测试的要求,这样

TEST_REQUIREMENTS - Table that specify the test hierarchy and limitation 
TEST_ID ref TEST 
REQUIRED_TEST ref TEST 
ORDER - the order of exams 

另一种情况是,在未来的雇主将要切换到电子考试系统。在这种情况下,只有想你会需要的是什么:

  • 创建表,将存储的问题定义
  • 将存储问题的答案木箱表(一个问题,可以在考试,屏幕或面试中使用)。
  • 创建将存储关于测试问题的信息的表。
  • 创建表格以存储申请人给出的每个问题的答案。
  • 触发器将更新测试的所有分数。
相关问题