数据库表设计:扩展数据表,同时保持向后兼容性

时间:2013-01-18 20:41:17

标签: database oracle jsp database-design relational-database

我正在研究的项目逐年跟踪数据。用户将登录系统并指定它想要访问数据的年份。例如,用户可以指定2004年,而.jsp页面将显示2004年的数据。

我的问题是从2013年开始,一个.jsp页面的数据会有所不同,并且需要修改当前的数据库表模式,但需要保持2012年和之前几年的向后兼容性。

目前(2012年及之前),相关数据库表格显示两列,“继续学生”和由单个.jsp显示的“新开始”。对于2013年及以后,需要显示4列。最初的两个专栏分为两个子类别,分别是本科和研究生。所以我不能简单地将这些新列添加到现有表中,因为这会违反第三范式。

您认为管理这种情况的最佳方法是什么?如何显示新数据,同时仍保持向后兼容性以显示较旧年份的数据?

1 个答案:

答案 0 :(得分:1)

一些选项:

  1. 介绍字段并允许旧数据为空。我认为你拒绝了这个想法。
  2. 创建新的表结构以存储新数据。如果你不想要(1),这是一个至少是一个选择。您可以轻松地创建一个视图,从两个表中查询并显示一组统一的数据。您也可以在UI中处理此问题,并根据查询的年份调用两个单独的存储过程。
  3. 使用新属性创建一个新表,然后选择性地连接回原始表。这使旧表保持不变,新表只是旧数据的扩展。您可以编写一个存储过程,可能会占用一年,然后返回相应的数据。
  4. 要真正考虑的一件事是旧数据现在处于非活动状态。如果你不再写信,它只是可以在心理上“存档”的历史数据。在这种情况下,我认为可以冻结架构和数据,让它自己生存。

    还要考虑您的客户是否可能再次更改架构。如果是这样,那么也许(1)是最好的。