我正在开展一个项目,其中有多种类型的用户(学生和教师)。目前,为了存储用户的信息,使用了两个表。 users
表存储所有用户共有的信息。 teachers
表存储只有教师使用外键将其与users
表相关联的信息。
users
表
teachers
表
在数据库的其余部分中,没有对teachers.id
的引用。需要与用户关联的所有其他表使用users.id
。由于用户在教师表中只有一个相应的条目,我是否应该将教师表中的字段移动到用户表中,并将其留空给不是教师的用户?
e.g。
users
一张桌子的字段太多了吗?这会妨碍表现吗?
答案 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。 通常,模型看起来很接近:
我的情况是,学生没有特定的字段,所以你可以省略Student
表,所以模型看起来像这样
请注意,对于继承建模,Teacher
表具有UserID
,与User
表相同;与您的示例形成鲜明对比,该示例的Id
表格为Teacher
,然后是单独的user_id
。
答案 5 :(得分:-1)
它不会真正损害性能,但如果你不重新设计它,其他程序员可能会伤害你:)(55个fielding tables ??)