[数据库] 数据库应该使用单独列存储计数吗?


问题描述

一个学校有 N 个班级,一个班级有 N 个学生。

  • 在展示学校列表的时候,需要展示该学校的班级数量、学生数量
  • 在展示班级列表的时候,需要展示该班级的学生数量

以下两种方式如何选择:


1.使用单独列

学校表使用 classesCountstudentsCount 两个列来分别存储该校班级数量、该校学生数量,在班级表中使用 studentsCount 列存储该班学生数量。

班级实体增、删时,更新学校表的 classesCount 列;在学生实体增、删时,更新班级表及学校表的 studentsCount 列。

2.使用数据库查询

班级数量和学生数量由数据库查询获得。

select * from cmapus;
select count(*) as classesCount from classes group by campus_id;
select count(*) as studentsCount from students group by campus_id;

方式一在增、删时需要做额外操作,会存在事务不能保证正确的情况吗?

方式二在数据量大的时候性能会很差吗?

额外提问

类似这种数据库设计问题,有推荐的书籍参阅吗?