我有一个存储学校学生及其运动成绩的数据库表。因此,每个孩子都将拥有竞争状态(青年、U15 和公开赛)以及他们在某些项目(跳远、跳高和 100 米)的记录。
我想为特定孩子提取一份报告,显示孩子的时间表,从青年 -> U15 到开放的运动。以及学生在校期间的各种记录(个人最佳成绩)。
然而,数据库表只存储孩子的当前状态以及他们当前的个人最佳状态。
我们如何构建数据库以便记录孩子的历史?
我有一个存储学校学生及其运动成绩的数据库表。因此,每个孩子都将拥有竞争状态(青年、U15 和公开赛)以及他们在某些项目(跳远、跳高和 100 米)的记录。
我想为特定孩子提取一份报告,显示孩子的时间表,从青年 -> U15 到开放的运动。以及学生在校期间的各种记录(个人最佳成绩)。
然而,数据库表只存储孩子的当前状态以及他们当前的个人最佳状态。
我们如何构建数据库以便记录孩子的历史?
我会添加两列,START_DATE
并且END_DATE
. 最新记录的结束日期为无穷大“31-Dec-9999”(或 mysql 中的任何最大日期)。不过,插入新行确实有点麻烦:
START_DATE
是当前日期,并且END_DATE
是无穷大。END_DATE
为当前日期来“结束”当前记录,并在其中插入一条新记录,其中START_DATE
是当前日期,并且END_DATE
是无穷大。所以你可能有:
PUPIL, STATUS, LONG_JUMP, START_DATE, END_DATE
Mike, Open, 2 meters, 01-Jan-2012, 31-Dec-9999
Mike, U15, 2 meters, 01-Jan-2011, 01-Jan-2012
迈克在 2011 年全年都在 U15,截至 2012 年 1 月目前处于公开赛状态。
您对“当前”信息的查询将查找当前日期介于START_DATE
和之间的行END_DATE
,并且您可以查询给定人员的完整集以查看时间线。
您还可以向表中添加触发器。更新前触发器。