在数据库中唯一指定带有布尔标志的条目的最佳做法是什么?

What Would Be a Best Practice to Uniquely specify an Entry With a Boolean Flag in the Database?

假设我们有一个称为学生的集合(或table),在我们的系统中,我们需要保留有史以来最好的学生,这将是一个且唯一的一个在我们所有的学生中。 我首先想到的是将 IsBestStudent 属性(标志)添加到 Student class,但考虑到这一点我认为添加一个新字段说一百万学生只是为了有一个值为真。 什么是满足此要求的好做法?

一个简单的解决方案是创建另一个 table:

CREATE TABLE BestStudent (
  student_id BIGINT PRIMARY KEY,
  FOREIGN KEY (student_id) REFERENCES Student(student_id)
);

这个 table 只有一行,所以它必须只引用一个学生。你不需要在 Student table 中添加一个新列,你只需要 table 有一个主键供这个小 table 参考。

如果您真的只想保留最好的学生,那么您永远不要再插入任何行。如果新学生的表现超过了以前最好学生的表现,则更新当前行。

您可能还想使用此 table 来存储最优秀学生的历史记录,在这种情况下,您将保留多行。由你决定。但重点是,您可以使用这种技术来避免向学生 table 中的数百万行添加一列。这 table 一定会保持小规模。