数据库设计保持变化的历史?

时间:2013-09-12 11:31:13

标签: mysql database database-design relational-database

我有一个数据库表,可以存储学校的学生和他们的运动表现。 因此,每个孩子都将具有竞争状态(青年,U15和公开赛)以及他们对某些赛事(跳远,跳高和100米)的记录。

我想为特定的孩子提供一份报告,显示孩子的时间表,来自青年的运动 - > U15开放。以及学生在学校期间的各种记录(个人最佳)。

然而,数据库表存储了孩子的当前状态以及他们当前的个人最佳状态。

我们如何构建数据库以便记录孩子的历史记录?

2 个答案:

答案 0 :(得分:1)

我会添加两列,START_DATEEND_DATE。最新记录的结束日期为无限“31-Dec-9999”(或者无论mysql中的最大日期是什么)。尽管如此,插入新行确实有点涉及:

  • 如果此人没有行,请在START_DATE为当前日期的位置插入新记录,END_DATE为无穷大。
  • 如果某行已存在,请通过将END_DATE设置为当前日期来“结束”当前记录,并在START_DATE为当前日期的位置插入新记录,并{{1}是无限。

所以你可能有:

END_DATE

迈克2011年全年都在U15,截至2012年1月正在公开赛。

您对“当前”信息的查询将查找当前日期介于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 START_DATE之间的行,您可以查询给定人员的完整日期以查看时间轴。< / p>

答案 1 :(得分:0)

您还可以为表格添加触发器。 更新之前的触发器。