将以下标准化为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)
是否存在违反正常表格规则的行为?我的回答是否正确?
答案 0 :(得分:2)
你的3NF结果是正确的,但你的道路是,欧姆,没有希望。
标准化过程是分解(“分裂”)的过程。重要的是要了解的是,您从单个关系模式开始,所有您已应用于该模式的FD。同样重要的是要理解的是,在规范化过程中的任何时候,一些特定的FD集合适用于单个关系模式。因此,在将初始单个模式拆分为两个关系模式之后, ALSO 最终会得到两个不同的FD集合,每个集合都应用于之后的关系模式的一个。分裂。甚至可能是通过执行某些特定的模式拆分,您丢失表达某些适用于拆分前模式的特定FD的能力。在你做的第一次拆分中,你已经完成了FD5的操作。 FD5在表1中不可表达,因为该模式中缺少empnum,并且在表2中无法表达,因为该模式中缺少小时数。所以FD5已经变得无法形容。 (这并不总是可以避免,因此不一定是坏事,但在你的情况下它是。)
你只能继续进一步分裂,这就是你的分解过程有缺陷的原因。你不能“将[小时]移动到Table2”。
答案 1 :(得分:0)
需要有关数据含义的更多信息;一些答案看似错误,但哪些答案是不可能的。具体做法是:
hours
是项目的持续时间,则属于a
项目表,就像在2NF答案中一样;如果是员工的时间
在一个属于多对多关系表的项目上工作
项目与员工之间,如3NF答案。chrghour
和/或jobclass
值显示?