在数据库中创建更多列或行是否更好?

时间:2012-05-19 10:26:24

标签: sql sql-server sql-server-2008

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

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

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

我看到很多答案,但我无法得到它可以帮助我吗? 提前谢谢你

3 个答案:

答案 0 :(得分:1)

不要。你应该最好有一张桌子可以容纳你的学生,一个用于讲座,还有一个交叉表用于组合这些。

答案 1 :(得分:0)

如果条目的“项目”(讲座,部件,小部件,颜色)的数量(每个条目是数据库表中的“行”)是已知并已修复的,则没有理由不为每个“项目”。它可能变得非常难以处理,因为每一行都可以变得非常大 - 在你的例子中有48个讲座 - 但是通过查询行(学生,在这种情况下)你可以很容易找到所有“项目”想要的。

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

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

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

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

答案 2 :(得分:0)

不要制作更多的列而不是制作更多的行,只是为了遵循数据库设计中的关系代数,为了获得更高的性能和oop,你必须遵循标准规则,打破你应该有经验的性能规则,已知原因。您的要求应该是1,并且只有一个表基于关系代数设计。 - Sameh Fakoua