2011-07-08 26 views
2

迄今爲止,我已經與一些數據庫以及哲學體系的不同之處。它讓我想知道,在商業應用中具有歷史意義的數據

業務應用中複製歷史用途的表是一個好主意嗎?

通過提供商家申請我的意思是: 使用由企業來管理他的所有數據

的通過「複製表」我的意思是軟件(如發票,客戶,股票[如果適用]等): 什麼時候讓我們說你的發票過時了(比如一年後,發票和付款後),你可以將它們存儲到「歷史性」表格中,這使得它們可以進行諮詢,但是可以修改。同樣的事情多年來,客戶端一直處於非活動狀態

優點:

使用歷史表可以加快研究低谷實際使用數據,因爲它讓你實際使用的表小。在不影響數據庫的歷史數據和實際數據

更容易從數據庫中刪除數據,將其存儲在硬盤介質的

較好的分離,(更可預測的東陽數據並沒有因爲它是在被使用的機會歷史表)。這經常發生在10年後,當你有未使用的數據。

缺點:

讓你的數據庫有高達2倍以上表格。

使數據庫更復雜

讓你的程序的報告更復雜,因爲你有時不得不導入表的兩倍。

回答

1

歸檔是企業應用程序的一個關鍵方面,但總的來說,除非您確實需要,否則我會建議您不要這樣做。

歸檔意味着你要麼接受,你可以在歷史數據的特定日期之前沒有得到,或者您創建用於管理「當前」和「歷史」數據的一些方案;你的解決方案(歸檔表)是解決這個問題的方法之一。

無論解決方案是所有尼斯 - 存檔表意味着大量的重複代碼/數據,複雜的備案手續(尤指外鍵關係),大量的錯誤的機會。

相信「時間」的概念應被烤成大多數商業應用領域和數據模型,具有可變性一起 - 你不應該能夠更改訂單一旦它被證實,但你應該能夠將產品添加到新訂單中。

至於你的優點:

一般情況下,我不認爲你會發現對性能的影響,除非你是在談論非常,非常大的規模企業。我不認爲 - 在現代SQL服務器解決方案中,您會注意到查詢10.000個客戶記錄或1.000.000個客戶記錄之間的速度差異。

的「歷史性」其實是相當棘手的定義 - 大多數企業要保持周圍歷史的監管和稅收的目的,往往多年;他們可能希望能夠分析數年來的趨勢等。如果企業想看到「我們在過去5年每月銷售多少小部件」,這意味着您必須保持5年的數據以某種方式(「原始」或預先彙總)。

是,分離出的數據會更容易些。構建功能今天 - 你必須保持你每次修改應用程序時 - 在10年放似乎是一個糟糕的投資,我...

0

我只會有一個「重複」類型的表來存儲每條記錄的歷史版本,比如更改日誌。即使更改日​​志也不是重複的,因爲它必須具有更改時間等信息。作爲一般慣例,我不建議將行從活動表遷移到歷史表。你必須管理不同版本的查詢才能在兩個地方找到數據!使用狀態來控制數據是否可以更改。如果特定應用程序存在某些情況,我可以看到它可能會被執行。一旦開始添加外鍵,就很難刪除數據。如果您有一個真正的企業業務應用程序,並且您試圖刪除發票,那麼您在FK與其他表格,應付/應收賬款,原材料成本,銷售利潤,運輸信息等方面存在各種問題。

+0

// @ KM,好了,我alredy工作的地方,他們用在歷史表格放置2年以上的發票。我們必須特別節目看論文發票和我們didint要管理什麼都特別的論文發票,因爲他們在那裏alredy開具發票,支付,我們沒有更多的fical工作要做他們。我們也使用任何種類的ForeignKey。這是一個ThoroughBred Basic應用程序 – Gab

+0

@Gab,任何不使用外鍵的數據庫應用程序都會嚇到我。如果應用程序非常小(10桌),只需少數幾個即可。然而,在具有數百張或更多表的大型企業應用程序中,FK是必需的。我個人絕不會設計並將表添加到數據庫應用程序中,而不用完全讚揚FK來強制執行所有已定義的關係。 –