将以下各项正常化至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)
如果我得到:
Table 1(projnum[pk], projname, hours)
Table 2(projnum[pk], empnum[pk])
Table 3(empnum[pk], empname, jobclass, chrghour)
如果我得到:
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)
有没有违反正规形式的规则?我的回答对吗?
最佳答案
你的第三个结果是正确的,但你的道路是,欧,无望的。
标准化的过程是一个分解的过程(“分裂”)。重要的是要理解的是,您从一个关系模式开始,然后应用到该模式的所有fd。同样重要的是要理解的是,在规范化过程中的任何时候,某些特定的fds集都应用于一个单一的关系模式。因此,在您将最初的单个模式拆分为两个关系模式之后,您还将得到两个不同的fd集,每个fd集在拆分后正好应用于其中一个关系模式。甚至可能是这样的情况:通过执行某些特定的模式拆分,您将失去在拆分之前表达应用于该模式的某些特定fd的所有能力。你在第一次分裂中对FD5做了同样的事。FD5在表1中不可表示,因为该架构中缺少empnum,而在表2中不可表示,因为该架构中缺少小时。所以FD5已经完全无法表达了。(这并不总是可以避免的,因此也不一定是坏事,但在你的情况下却是这样。)
事实上,你只能继续分裂越来越远,这就是为什么你的分解过程是有缺陷的。不能“将[小时]移到表2”。