我是否违反了我的数据库设计中的任何NF规则?

时间:2011-06-02 13:34:42

标签: database-schema

美好的一天!

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

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

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

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

5 个答案:

答案 0 :(得分:4)

整体看起来不错。需要考虑的几个小问题:

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

编辑: 鉴于结果为PASS或FAIL,只需将该字段声明为布尔值并将其命名为“传递”。快得多。

答案 1 :(得分:3)

我可以看到潜在问题的一个领域是访谈员被整合到访谈中。此外,我想指出申请人的源渠道,这可能会被淹没(取决于你将在那里存储的内容)。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

年龄和性别通常是非常难以接受的问题,所以你可能不想记录这些事情。您可能需要一个单独的面试官表。您还可能需要一个单独的表来存储资格,以便您可以在下一次开放时搜索您使用C#知识的人。我可能会做一些资格表,即查询要添加到申请人资格表中的资产。然后,您需要申请人资格表中的资格ID,applicantId,年份,技能等级。

我注意到结果是varchar 4字段,我假设您计划将Pass / fail放入其中。我也会考虑使用数字分数。得到80%问题的人正确地通过了,但是那些100%正确的人可能是更好的候选人。事实上,对于采访,我可能会有面试问题和结果表。然后你可以记录每个问题的分数和评论,这有助于以后评估很多候选人。当我们采访几百人时(我们当时有超过一百个开口,这在个人计算机之前),我们在纸质电子表格中手动完成了这一操作,并且发现能够比较问题的答案是最有帮助的。很难记住你采访过的200个人以及谁说了什么。如果你有一个新的职位空缺,可能会有所帮助,以便找到那些在与新工作最相关的问题上表现出色的人,这些人在面试时可能没有找到工作(例如,5名优秀候选人,1份工作)。

我可能还会考虑一个字段来标记候选人是否由于某种原因而无法接受招聘。比如他犯了重罪,或者他在简历上撒了谎,你抓住了他,或者他在采访中完全无能为力。这可以很容易地防止这个人被重复考虑。

答案 4 :(得分: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 

另一种情况是,未来您的雇主将希望切换到电子考试系统。在这种情况下,只考虑你需要的是:

  • 创建将存储问题定义的表格(一个问题可用于考试,屏幕或面试)
  • 将存储问题答案的Crate表。
  • 创建将存储有关测试问题的信息的表。
  • 创建表格,用于存储申请人提供的每个问题的答案。
  • 将更新测试的所有分数的触发器。