添加新字段与创建单独的表

时间:2010-07-03 18:21:17

标签: sql database-design foreign-keys foreign-key-relationship

我正在开展一个项目,其中有多种类型的用户(学生和教师)。目前,为了存储用户的信息,使用了两个表。 users表存储所有用户共有的信息。 teachers表存储只有教师使用外键将其与users表相关联的信息。

users

  • ID
  • 名称
  • 电子邮件
  • 其他34个领域

teachers

  • ID
  • USER_ID
  • 受试者
  • 其他17个领域

在数据库的其余部分中,没有对teachers.id的引用。需要与用户关联的所有其他表使用users.id。由于用户在教师表中只有一个相应的条目,我是否应该将教师表中的字段移动到用户表中,并将其留空给不是教师的用户?

e.g。

users

  • ID
  • 名称
  • 电子邮件
  • 受试者
  • 其他51个字段

一张桌子的字段太多了吗?这会妨碍表现吗?

6 个答案:

答案 0 :(得分:2)

我认为这种设计很好,假设大部分时间您只需要user数据,并且您知道何时需要显示teacher特定字段。

此外,您只需通过JOIN来获得教师,这可能会派上用场。

明天你可能有另一种不是老师的用户,你会对分离感到高兴。

编辑添加:是的,这是一种继承模式,但由于他没有说出他使用的是哪种语言,我不想浑水......

答案 1 :(得分:0)

  

在数据库的其余部分,没有对teachers.id的引用。需要与用户相关的所有其他表   使用users.id。

我希望与课程/部分的teacher_id相关...

  

由于用户在教师表中只有一个相应的条目,我是否应该将教师表中的字段移到用户表中,并将其留空给不是教师的用户?

您是在为高中或大专院校建立系统吗?我问的原因是因为在大专以上,用户既可以是教师,也可以是学生......在众多科目中。

答案 2 :(得分:0)

我认为没有你或任何其他人屈服于将'空'列重复用于其他目的的诱惑。

我的意思是,在你的新表中会有仅为教师填充的列。有人可能会认为他们需要为非教师存储另一个值,并使用教师专栏之一来保存它,因为毕竟这对非教师来说永远不需要,这样我们就不会需要更改表格,很快您的代码就会填满测试行类型以查找每个列所包含的内容。

我已经在几个系统上看到过这种情况(例如,在借阅图书馆书籍时,如果贷款是长期贷款,截止日期是预计该书预计的日期。但如果这是一笔短期贷款到期日保持预期的时间,并且任何不知道这一点的人都会感到悲伤。

答案 3 :(得分:0)

一张桌子的字段不是太多(尽管没有任何细节,但它似乎有点可疑)。在这个阶段担心绩效还为时过早。

您可能只处理很少的行和非常少量的数据。您应该关注1)完成工作2)正确设计3)性能,按顺序。

这真的不是那么大的交易(在这个阶段/规模)。

答案 4 :(得分:0)

我不会在一个表中填充所有字段。学生与教师的比例很高,因此对于100名教师来说,这17个领域可能有10000名学生有NULL。 通常,模型看起来很接近:

teacher_model_01

我的情况是,学生没有特定的字段,所以你可以省略Student表,所以模型看起来像这样

teacher_model_02

请注意,对于继承建模,Teacher表具有UserID,与User表相同;与您的示例形成鲜明对比,该示例的Id表格为Teacher,然后是单独的user_id

答案 5 :(得分:-1)

它不会真正损害性能,但如果你不重新设计它,其他程序员可能会伤害你:)(55个fielding tables ??)