我是一个web开发人员,希望利用我的RDBMS的更多功能。我目前正在学习数据的规范化和数据库设计。
在我正在读的那本书中,我们从一张包含学生、教师、考试、成绩等信息的表格开始,并将其分解为每个实体的不同表格。
但是,我正在查看测试表(见下图),我想知道这个表是否也违反了一些设计原则。

特别是,我认为Test列违反了“无冗余数据”原则和“不部分依赖原则”。(关于第二点,我假设该表的主键是TestID和TeacherID的复合键,在这种情况下,Test仅依赖于主键的TestID部分)。
在本例中,我要做的是进一步将测试表分解为一个Tests表,其中包含一个TestID作为主键,Name作为测试的名称,以及TotalPoints。然后,我将创建一个AdministeredTests表,其中包含一个TestId、一个TeacherId和一个Date,主键是TestId和TeacherId的组合。
我会走在正确的轨道上吗?我之所以这样问,是因为作者还显示了下表:

同样,这会受到冗余数据的影响(尽管它没有部分或传递的依赖关系)。根据我目前的理解,我认为作者还没有引入连接表,因此正常化在某一点上“停止”的原因。此外,作者还迅速指出:"...we提出了一种可能的数据库设计,以说明如何将数据规范化。事实上,设计这个数据库的可能性很大。“只是想知道我在这里提出的可能性是合理的。
发布于 2018-08-09 20:25:54
列出的测试表看起来已经规范化了。TestID 1和TestID 2是由两个名字相同的不同教师进行的两次考试。也许他们是同一个测试,也可能不是。根据您的建议,假设测试是相同的,并且可以在多个老师之间使用,那么是的,您可以在您建议的方法中进一步规范表格。我认为您还需要在TotalPoints表中添加一个AdministeredTests列,这样您就可以在所管理的每个测试中捕获点数,而测试表中的TotalPoints则是所有测试被管理期间所有点数的总和。
Formats表可以创建一个新表,该表包含一个带有TestFormatID列的TestFormat选项。然后,TestFormatID替换Formats表中的TestFormt列。
https://dba.stackexchange.com/questions/214533
复制相似问题