最近做一个学校管理系统,当中遇到一个比较麻烦的问题“保留历史数据”,很疑惑,说出来大家讨论下,相信很多人也遇到同样的问题。
      校方提出需求如下:
      1.要保留学期留历史数据
            比如:
            ●  一年级一班2008-2009上学期有30个人,下学期有35个人,在查看上学期历史数据的时候只能显示上学期的30个人
            ●  某学生在上学期名叫“张三”,而下学期改名叫“张四”,在查看上学期历史数据的时候应显示“张三”
            ●    某教师在上学期可能任职“总务”,而下学期可能任职“主任”,在查看上学期历史数据的时候应显示教师当时的任职情况,即“总务”

2.能实现跨学期数据统计
            而在统计分析中,要能实现在不同学期间实现统计,比如,可以统计2000年-2009年,某教师的考评情况,生成图表;可以统计学生从一年级到六年级的成绩,生成图表

有考虑过以下几种方案,但每种方案都有不足之处
      1. 数据库分离
            不同学期数据库独立,在学期交替的时候将数据备份到另一个数据库,作为历史数据保留,对现有数据的修改不会影响历史数据,去年叫“张三”的学生,今年改名“张四”,查看历史数据的时候,还是叫“张三”
            优点:容易实现历史数据的保留,能实现不同学期数据绝对独立
            缺点:跨学期统计,则需要跨数据库访问,不方便

2. 数据表分离
            不同学期表独立,比如表 Students ,在学期交替时将数据备份至另一个表 "2008-2009 上 Students ",作为Students 2008-2009上学期历史数据保留
            优点:跟方案1一样,容易实现历史数据的保留,能实现不同学期数据绝对独立,互不影响
            缺点:随着学期的增加,数据库容量巨增;跨学期统计,需在多表之间统计,较方案1中跨数据库统计方便些,但也不方便;因为不同学期表名不同,和ORM的映射关系不容易处理。

3.在需要保留历史数据的每个表都加学期字段
            一个表包含所有学期的数据,如Students:

学期 编号 姓名 成绩
2008-2009 上 01 张三 80
2008-2009 下 01 张四 90
2008-2009 下 02 李四 85

优点:能实现不同学期数据独立,跨学期统计数据很方便,在一个表内
            缺点:每一个查询都要带上学期,一个表包含多条编号相同的记录,表之间的关系如何建立。学期增加,数据库容量巨增。

转载于:https://www.cnblogs.com/kuiyouli/archive/2009/09/14/1566140.html

求一架构 : 保留历史数据相关推荐

  1. 从AdventureWorks学习数据库建模——保留历史数据

    在业务需求中,经常需要我们在系统中能够记录历史信息,能够查看到历史变动情况,这时我们可以通过增加开始结束时间字段来记录数据的历史版本.对数据的历史记录主要分为:关系.属性历史,实体历史和变更历史. 关 ...

  2. python:累加数字求平均数(保留小数)

    n=int(input()) i=1 sum=0 while i<=n:x=int(input()) # 累加年龄sum +=x #将计数器增加1i +=1 print("%.2f&q ...

  3. 输入圆半径,求圆面积并保留两位小数

    import java.util.*; //调用util包中的所有类 public class Circle //定义一个Circle类 {public static void main(String ...

  4. DWH的保留原始历史数据的一种方法

    前几天有朋友咨询在数据仓库Stage或ODS层该如何保存历史数据, 他的这个问题其实很普遍, 所以写了点东西放在博客上. 一般数据仓库项目中, Stage或ODS层要保留几天或几个月的源表数据. 保留 ...

  5. bigdicmal除法精度设置_使用java求高精度除法,要求保留N位小数

    题目要求是高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 import java.math.BigDecimal; import java.util.Scanner; pu ...

  6. 我花600小时,调研30家银行,为你讲透银行数据架构,小白都能懂

    如果一个系统,没有数据架构,那肯定是在吹牛,今天就来讲讲银行的数据架构.这是我花了600多小时,调研了30+银行,得出来的方法论. 狭义的数据仓库数据架构用来特指数据分布,广义的数据仓库数据架构还包括 ...

  7. 大数据平台架构与原型实现-读书笔记8

    第八章 批处理与数据仓库 一.大数据与数据仓库 从大数据应用的角度看,数据仓库是大多数企业"试水"大数据的首选切入点,原因为: 数据仓库的主要编程语言以SQL为主,在大数据平台上, ...

  8. 深度分析|一文读懂银行数据架构体系

    上一篇讲了银行数据仓库的系统架构,这次给大家讲讲数据架构.如果一个系统,没有数据架构,那肯定是在吹牛. 狭义的数据仓库数据架构用来特指数据分布,广义的数据仓库数据架构还包括数据模型.数据标准和数据治理 ...

  9. 系统架构设计——秒杀系统架构设计

    摘要 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程.从架构视角来看,秒杀 ...

最新文章

  1. try-catch-finally中的4个巨坑,老程序员也搞不定!
  2. 【vue】.native给组件绑定原生事件
  3. iOS后台运行的设置方法
  4. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖
  5. 表的插入、更新、删除、合并操作_16_ 删除表中所有记录
  6. MMJ-Spring Boot(Java)获取小程序Openid
  7. EFCore批量操作,你真的清楚吗
  8. 这5种员工,千万不能重用
  9. CentOS6.0 yum php mcrypt 扩展安装问题
  10. 比 matplotlib 效率高十倍的数据可视化神器
  11. android studio for android learning (二十四 )bitmap and bitmapFactory
  12. JavaScript网页游戏开发实战视频教程
  13. 2022-2027年中国智能化设计行业发展前景及投资战略咨询报告
  14. NoSQLBooster for MongoDB的下载,安装,连接数据库,查询
  15. AMR文件时长解析——附c代码
  16. Predicting microbial interactions through computational approaches
  17. 爬虫python创意_爬虫案例:利用python爬虫关键词批量下载高清大图
  18. Techo TVP物联网开发者峰会青润的总结(带视频和完整未剪切音频版本)
  19. 使用ndp.view标注大型医学图像
  20. Project Euler in Java [001-040]

热门文章

  1. 下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...
  2. 【C/C 】浅谈C/C 中函数指针与回调函数
  3. abb智能控制系统_ABB助力国网冀北电力打造虚拟电厂
  4. 使用xshell上传本地文件到服务器
  5. 子进程 已安装 post-installation 脚本 返回错误状态 1 dpkg: 依赖关系问题使得 mysql-server 的配置工作不能继续: mysql-server 依赖于 mysq
  6. 第19次csp认证 202006-2 稀疏向量(C++)
  7. 工业交换机的日常维护保养该怎么做?
  8. PDH-SDH光端机指示灯具体含义介绍
  9. 家用、商用、工业交换机的用途与区别
  10. 光纤收发器相比其他数据交换器有哪些优势?