求一架构 : 保留历史数据
生活随笔
收集整理的這篇文章主要介紹了
求一架构 : 保留历史数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近做一個學(xué)校管理系統(tǒng),當(dāng)中遇到一個比較麻煩的問題“保留歷史數(shù)據(jù)”,很疑惑,說出來大家討論下,相信很多人也遇到同樣的問題。
??????校方提出需求如下:
??????1.要保留學(xué)期留歷史數(shù)據(jù)
????????????比如:
????????????● 一年級一班2008-2009上學(xué)期有30個人,下學(xué)期有35個人,在查看上學(xué)期歷史數(shù)據(jù)的時候只能顯示上學(xué)期的30個人
????????????● 某學(xué)生在上學(xué)期名叫“張三”,而下學(xué)期改名叫“張四”,在查看上學(xué)期歷史數(shù)據(jù)的時候應(yīng)顯示“張三”
????????????●????某教師在上學(xué)期可能任職“總務(wù)”,而下學(xué)期可能任職“主任”,在查看上學(xué)期歷史數(shù)據(jù)的時候應(yīng)顯示教師當(dāng)時的任職情況,即“總務(wù)”
??????2.能實(shí)現(xiàn)跨學(xué)期數(shù)據(jù)統(tǒng)計
????????????而在統(tǒng)計分析中,要能實(shí)現(xiàn)在不同學(xué)期間實(shí)現(xiàn)統(tǒng)計,比如,可以統(tǒng)計2000年-2009年,某教師的考評情況,生成圖表;可以統(tǒng)計學(xué)生從一年級到六年級的成績,生成圖表
??????有考慮過以下幾種方案,但每種方案都有不足之處
??????1. 數(shù)據(jù)庫分離
????????????不同學(xué)期數(shù)據(jù)庫獨(dú)立,在學(xué)期交替的時候?qū)?shù)據(jù)備份到另一個數(shù)據(jù)庫,作為歷史數(shù)據(jù)保留,對現(xiàn)有數(shù)據(jù)的修改不會影響歷史數(shù)據(jù),去年叫“張三”的學(xué)生,今年改名“張四”,查看歷史數(shù)據(jù)的時候,還是叫“張三”
????????????優(yōu)點(diǎn):容易實(shí)現(xiàn)歷史數(shù)據(jù)的保留,能實(shí)現(xiàn)不同學(xué)期數(shù)據(jù)絕對獨(dú)立
????????????缺點(diǎn):跨學(xué)期統(tǒng)計,則需要跨數(shù)據(jù)庫訪問,不方便
??????2. 數(shù)據(jù)表分離
????????????不同學(xué)期表獨(dú)立,比如表 Students?,在學(xué)期交替時將數(shù)據(jù)備份至另一個表 "2008-2009?上 Students ",作為Students 2008-2009上學(xué)期歷史數(shù)據(jù)保留
????????????優(yōu)點(diǎn):跟方案1一樣,容易實(shí)現(xiàn)歷史數(shù)據(jù)的保留,能實(shí)現(xiàn)不同學(xué)期數(shù)據(jù)絕對獨(dú)立,互不影響
????????????缺點(diǎn):隨著學(xué)期的增加,數(shù)據(jù)庫容量巨增;跨學(xué)期統(tǒng)計,需在多表之間統(tǒng)計,較方案1中跨數(shù)據(jù)庫統(tǒng)計方便些,但也不方便;因?yàn)椴煌瑢W(xué)期表名不同,和ORM的映射關(guān)系不容易處理。
??????3.在需要保留歷史數(shù)據(jù)的每個表都加學(xué)期字段
????????????一個表包含所有學(xué)期的數(shù)據(jù),如Students:?
????????????優(yōu)點(diǎn):能實(shí)現(xiàn)不同學(xué)期數(shù)據(jù)獨(dú)立,跨學(xué)期統(tǒng)計數(shù)據(jù)很方便,在一個表內(nèi)
????????????缺點(diǎn):每一個查詢都要帶上學(xué)期,一個表包含多條編號相同的記錄,表之間的關(guān)系如何建立。學(xué)期增加,數(shù)據(jù)庫容量巨增。
??????校方提出需求如下:
??????1.要保留學(xué)期留歷史數(shù)據(jù)
????????????比如:
????????????● 一年級一班2008-2009上學(xué)期有30個人,下學(xué)期有35個人,在查看上學(xué)期歷史數(shù)據(jù)的時候只能顯示上學(xué)期的30個人
????????????● 某學(xué)生在上學(xué)期名叫“張三”,而下學(xué)期改名叫“張四”,在查看上學(xué)期歷史數(shù)據(jù)的時候應(yīng)顯示“張三”
????????????●????某教師在上學(xué)期可能任職“總務(wù)”,而下學(xué)期可能任職“主任”,在查看上學(xué)期歷史數(shù)據(jù)的時候應(yīng)顯示教師當(dāng)時的任職情況,即“總務(wù)”
??????2.能實(shí)現(xiàn)跨學(xué)期數(shù)據(jù)統(tǒng)計
????????????而在統(tǒng)計分析中,要能實(shí)現(xiàn)在不同學(xué)期間實(shí)現(xiàn)統(tǒng)計,比如,可以統(tǒng)計2000年-2009年,某教師的考評情況,生成圖表;可以統(tǒng)計學(xué)生從一年級到六年級的成績,生成圖表
??????有考慮過以下幾種方案,但每種方案都有不足之處
??????1. 數(shù)據(jù)庫分離
????????????不同學(xué)期數(shù)據(jù)庫獨(dú)立,在學(xué)期交替的時候?qū)?shù)據(jù)備份到另一個數(shù)據(jù)庫,作為歷史數(shù)據(jù)保留,對現(xiàn)有數(shù)據(jù)的修改不會影響歷史數(shù)據(jù),去年叫“張三”的學(xué)生,今年改名“張四”,查看歷史數(shù)據(jù)的時候,還是叫“張三”
????????????優(yōu)點(diǎn):容易實(shí)現(xiàn)歷史數(shù)據(jù)的保留,能實(shí)現(xiàn)不同學(xué)期數(shù)據(jù)絕對獨(dú)立
????????????缺點(diǎn):跨學(xué)期統(tǒng)計,則需要跨數(shù)據(jù)庫訪問,不方便
??????2. 數(shù)據(jù)表分離
????????????不同學(xué)期表獨(dú)立,比如表 Students?,在學(xué)期交替時將數(shù)據(jù)備份至另一個表 "2008-2009?上 Students ",作為Students 2008-2009上學(xué)期歷史數(shù)據(jù)保留
????????????優(yōu)點(diǎn):跟方案1一樣,容易實(shí)現(xiàn)歷史數(shù)據(jù)的保留,能實(shí)現(xiàn)不同學(xué)期數(shù)據(jù)絕對獨(dú)立,互不影響
????????????缺點(diǎn):隨著學(xué)期的增加,數(shù)據(jù)庫容量巨增;跨學(xué)期統(tǒng)計,需在多表之間統(tǒng)計,較方案1中跨數(shù)據(jù)庫統(tǒng)計方便些,但也不方便;因?yàn)椴煌瑢W(xué)期表名不同,和ORM的映射關(guān)系不容易處理。
??????3.在需要保留歷史數(shù)據(jù)的每個表都加學(xué)期字段
????????????一個表包含所有學(xué)期的數(shù)據(jù),如Students:?
| 學(xué)期 | 編號 | 姓名 | 成績 |
| 2008-2009 上 | 01 | 張三 | 80 |
| 2008-2009 下 | 01 | 張四 | 90 |
| 2008-2009 下 | 02 | 李四 | 85 |
????????????缺點(diǎn):每一個查詢都要帶上學(xué)期,一個表包含多條編號相同的記錄,表之間的關(guān)系如何建立。學(xué)期增加,數(shù)據(jù)庫容量巨增。
轉(zhuǎn)載于:https://www.cnblogs.com/kuiyouli/archive/2009/09/14/1566140.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的求一架构 : 保留历史数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。