将以下各项正常化至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”。

08-19 09:21