规范化问题

时间:2015-12-30 20:11:45

标签: database database-design normalization database-normalization

我正在对包含RollNumber,TotalMarks和Status列的Grades表进行规范化。

RollNumber是学生表中的外键。

“状态”列取决于TotalMark,就好像具有大于或等于33%标记的学生将具有“通过”状态。不到33%的人会分配状态'失败'。

因此,要删除此传递依赖项(因为Status依赖于TotalMarks),我必须使用TotalMarks和Status创建新表。

问题是RollNumber 1到10000被分配到第9类,总分为500.因此,在这种情况下,通过条件将大于或等于165标记。

对于RollNumber,10000到100000被分配到第10类,总分为1000.因此,在这种情况下的通过标记将是330.

因此,在这个新创建的表中,如果我只创建两列TotalMarks和Status,则会出现差异,因为对于大约165个TotalMarka,一个学生将通过,而对于其他165个TotalMark,学生将会失败。 />

因此,为了解决这个问题,我必须创建自己的新ID,它将是唯一的,并为每个RollNumber分配这个新的唯一ID并将其链接到这个新创建的表,但由于数据重复,这会占用大量内存。

那么如何有效地解决这种情况呢?

注意:此标记分布为500和1000标记是虚拟的,我的DB中有超过8个类具有不同的传递和失败标准。

1 个答案:

答案 0 :(得分:1)

TotalMarks不是Status的决定因素,因为Status也依赖于RollNumber。在这种情况下,函数依赖是{RollNumber,TotalMarks}→{Status},它不是传递依赖。因此,{RollNumber,TotalMarks}必须是一个超级密钥,因此您的Grades表满足第五范式。这里似乎没有需要创建新表的规范化问题。

正如回答上一个问题所述,规范化从不需要创建新属性。