用不同数量的列创建一个SQL表

问题描述:

我有两张表,比如说老师和学生。我想建立一个名为class的第三个表。用不同数量的列创建一个SQL表

班级表将为班级的老师提供一列,但我想看看他们是否是代表学生的优雅方式。我的第一个想法是说30列..学生1,学生2,并为每个这些绑定回学生表中的一行。

但我要求看看是否有更优选的解决方案。上述解决方案似乎笨重。

+0

您是否在询问如何存储每个班级的学生,或者如何选择这些学生,以便您将在每个班级中看到每个学生的专栏类?表格的结构不一定与您希望查询结果的外观相对应。 – 2010-09-21 18:06:45

+1

如果你曾经有一个SQL表格设计,你有一个除了附加递增数字(如你的学生1,学生2 ...)相同的名称列,你有一个糟糕的设计!这就是为什么他们发明了短语“只说不” – 2010-09-21 18:43:20

+1

+1,用于检测多列的“数据库异味”,当它们应该是行时。 – ErikE 2010-09-21 19:15:21

如果是我,我会有第四张表名为与会者或类似的学生,因为它是一个多对多的类关系。其中至少包含班级ID和学生证号码。

+1

+1 ...通过一切方式是...我会为老师做同样的事情,因为每个班级只有1名老师,只有1名老师?例如ClassDetail(ClassID,PersonID,Role) – MikeD 2010-09-21 18:18:10

+0

选择此答案,因为它是最直接的。我需要看看PIVOT解决方案,但是现在这种解决方案仍然有效。 – Maestro1024 2010-09-21 18:43:02

+0

@ Maestro1024看看我的StudentClass表,就是这样。 – 2010-09-21 18:52:17

类“表”不是表格,而是运行带有数据透视的存储过程的结果。

和数据结构如下:

Student: Id, ... 
Teacher: Id, ... 
StudentClass: StudentId, ClassId, ... 
Class: Id, TeacherId, ... 
+0

或者这种方式可以工作:-) – 2010-09-21 17:59:36

这是非常笨重。

有三个表:

  1. 教师
  2. 学生
  3. TeacherStudent,这是一个多对多的表连接两个。

是否在另一个答案中表达了pivot方法。它更有意义。

+0

感谢upvotes,但我认为他在'PIVOT'关键字之后。 – 2010-09-21 18:01:53

SQL Server有这个东西叫sparse columns但是我会反对它的建议。对数据进行标准化,然后PIVOT/crosstab结果,当你想并排显示