规范化:我是db规范化的新手。我不知道我的回答是否正确

时间:2015-03-23 16:50:35

标签: database database-design normalization database-normalization

将以下标准化为3NF:

projnum | projname | empnum | empname | jobclass | chrghour |小时|

    15 |Evergreen|   103   |  June    |Engineer | 84      |  23  |
    15 |Evergreen|   101   |  John    |Designer | 105     |  19  |
    15 |Evergreen|   105   |  Alie    |Designer | 105     |  35  |
    15 |Evergreen|   106   |  Dave    |Analyst  | 96      |  12  |
    15 |Evergreen|   102   |  Anne    |Clerical | 26      |  23  |

编辑:

Functional dependency 1: projnum → projname

FD2: empnum → empname

FD3: empnum, empname → jobclass

FD4: jobclass → chrghour

FD5: projnum, empnum → hours 

1NF我得到了:

Table 1(projnum[pk], projname, hours)
Table 2(projnum[pk], empnum[pk], empname, jobclass, chrghour)

2NF我得到了:

Table 1(projnum[pk], projname, hours)
Table 2(projnum[pk], empnum[pk])
Table 3(empnum[pk], empname, jobclass, chrghour)

3NF我得到:

Table 1(projnum[pk], projname) //then i put [hours] in table 2 but I DONT KNOW THE LOGIC BEHIND. Explanation is welcomed.
Table 2(Projnum[pk], empnum[pk], hours)
Table 3(empnum[pk], empname, jobclass)
Table 4(jobclass[pk], chrghour)

是否存在违反正常表格规则的行为?我的回答是否正确?

2 个答案:

答案 0 :(得分:2)

你的3NF结果是正确的,但你的道路是,欧姆,没有希望。

标准化过程是分解(“分裂”)的过程。重要的是要了解的是,您从单个关系模式开始,所有您已应用于该模式的FD。同样重要的是要理解的是,在规范化过程中的任何时候,一些特定的FD集合适用于单个关系模式。因此,在将初始单个模式拆分为两个关系模式之后, ALSO 最终会得到两个不同的FD集合,每个集合都应用于之后的关系模式的一个。分裂。甚至可能是通过执行某些特定的模式拆分,您丢失表达某些适用于拆分前模式的特定FD的能力。在你做的第一次拆分中,你已经完成了FD5的操作。 FD5在表1中不可表达,因为该模式中缺少empnum,并且在表2中无法表达,因为该模式中缺少小时数。所以FD5已经变得无法形容。 (这并不总是可以避免,因此不一定是坏事,但在你的情况下它是。)

只能继续进一步分裂,这就是你的分解过程有缺陷的原因。你不能“将[小时]移动到Table2”。

答案 1 :(得分:0)

需要有关数据含义的更多信息;一些答案看似错误,但哪些答案是不可能的。具体做法是:

  • 如果hours是项目的持续时间,则属于a 项目表,就像在2NF答案中一样;如果是员工的时间 在一个属于多对多关系表的项目上工作 项目与员工之间,如3NF答案。
  • 同一员工是否可以使用不同的chrghour和/或jobclass值显示?