0

在数据库中创建更多列或行是否更好。我正在出勤表中输入学生出勤信息。

条件 1:我应该包括 1 周列和 3 讲座列,但这会增加每个学生的行数,因为有 16 周,每周有 3 次讲座。??

条件2:或者我应该添加48个讲座栏,分别存储每个学生的出勤情况。???

我看到了很多答案,但我无法得到它可以有人帮助我吗?先感谢您

4

3 回答 3

1

都不做。你最好有一张桌子放你的学生,一张用来上课,还有一张交叉表来组合这些。

于 2012-05-19T10:32:24.940 回答
0

不做更多的列和不做更多的行,只是为了在你的数据库设计中遵循关系代数,为了更高的性能和 oop 你必须遵循标准规则,为了打破性能规则你应该有经验和已知的原因。您的要求应该有 1 个并且只有一个基于关系代数的表设计。——萨梅·法库阿

于 2012-05-19T14:56:21.867 回答
0

如果一个条目(每个条目是数据库表中的一个“行”)的“项目”(讲座、部件、小部件、颜色)的数量是已知且固定的,那么没有理由不为每个条目设置一列“项目”。它可能变得非常难以使用,因为每一行都可能变得非常大——在你的例子中是 48 个讲座——但是所有的“项目”都可以通过查询你的行(在这种情况下是一个学生)来轻松定位通缉。

通常,您将拥有不同的数据库布局,其中您想要的主要实体是“学生”,并且对于每个“学生”实体,都会有许多与该“学生”相关联的附加实体。这些将是“讲座”,每个“讲座”实体将与“学生”和日期相关联。在这种情况下,您将在数据库中查询“学生”,然后使用称为“连接”的关系数据库操作通过连接与“讲座”表关联的“学生”标识符来从“讲座”表中定位学生的出勤情况用“学生”的名字记录。

这种方法的优点是您可以创建额外的实体——上交的家庭作业、考试或考试成绩等——然后也可以以相同的方式定位并“加入”学生。当您添加这些不同的实体时,您无需修改​​原始表(学生姓名加上 48 个讲座),而是创建新表(“作业”、“测试”、“考试”),然后这些表将学生姓名作为一个字段,以及日期和等级作为其他字段。

这种方法的一个缺点是不必要的复杂性。你真的需要一张额外的桌子来保存不能改变的东西——课程的周数是由日历和课程安排确定的吗?您必须做出决定——如果“学生出勤”数据库必须应用于其他课程,以及其他时间表,您别无选择,只能增加这种复杂性。如果这只是一门课程的一次性任务,那么复杂性在以后不会给你带来任何好处。

正如 Kyser 所说,研究关系数据库理论。

于 2012-05-19T10:38:13.040 回答