2010-07-29 21 views
1

我對錶格設計和性能有疑問。我有許多分析機器產生不同數量的數據(這些數據已經通過運行機器的dos程序存儲在文本文件中)。我決定更新並創建一個新的數據庫來存儲所有機器的結果。我已經創建了單獨的表來存儲結果的類型,例如,從平衡機的所有查詢結果存儲在天平結果表等附加列與其他行的性能

我對每個機器是一個共同的結果表的格式如下:

ClientRequestID PK 
SampleNumber  PK 
MeasureDtTm 
Operator 
AnalyteName 
UnitOfMeasure 
Value 

一個典型的ClientRequest可能有50個樣本這就需要由各種機器進行測試。每臺機器每個樣品只記錄1行,因此每個表的apprx 50行與任何給定的ClientRequest相關聯。

這適用於除一個機器外的所有機器!它可以測量每個樣品20-30個分析物(並將它們排出一個長排),而所有其他機器,我只需要爲每個RequestID/SampleNumber測量1個分析物。 如果我堅持這種格式,這臺機器每年將產生超過百萬行,因爲每個樣本可以有多達30個測量值。 我的其他表格每年只能以3000-5000行的速度增長。

所以在這一切之後,我的問題是這樣的:

我是更好地堅持該表的通用格式,並有排鬥載荷,或者是它更好地只是添加額外的列來表示每個分析物,這樣每個樣品只會產生一行(與其他表格一樣)。該機器最多隻能測量30個分析物(每臺機器25萬美元,我贏了;在我的生命中獲得另一臺機器)。

我很擔心的是報告性能和在線編輯。在這兩種情況下,PK:RequestIDSampleNumber保持不變,所以我想這只是一個加載更快的問題。我知道從設計的角度來看,多列方法被認爲是可悲的,但是在這種情況下它會產生更好的性能嗎?

BTW數據庫是MS的Jet/Access 2010中

任何幫助將不勝感激!

+0

「BTW數據庫是MS的Jet/Access 2010中的」 這是你的問題的80%。使用幾乎任何ODBC數據庫,您就可以與性能和空間利用率更快樂。 – 2010-07-29 23:41:31

回答

0

您可以從「共同作用的結果」表解耦AnalyteName柱:

-- Table Common Results 

ClientRequestID PK SampleNumber PK MeasureDtTm Operator UnitOfMeasure Value 

-- Table Results Analyte 

ClientRequestID PK SampleNumber PK AnalyteName 

您加入的PK(請求+樣品。)這樣,你不要無謂地重複行的所有其餘可以避免在不需要使用AnalyteName的查詢中進行連接,可以支持額外的Analytes,並且總體上更加安全。除非你真的開始出現性能問題,否則這是我遵循的方法。

即使您開始出現性能問題,我也會首先轉到真正的數據庫,以查看在將列添加到結果表之前是否解決了問題。

1

如果行數很少,那麼Jet/ACE數據庫中的數百萬行並不是問題。

但是,我擔心的是如何插入這些記錄 - 這是實時數據收集嗎?如果是的話,我建議這可能是比噴氣多/ ACE能夠可靠地處理。

我是一個有經驗的開發人員訪問是誰的Jet/ACE的忠實粉絲,但是從我瞭解你的項目,如果我開始出來,我肯定會選擇從一開始走的服務器數據庫,不是因爲Jet/ACE可能現在不能處理它,而是因爲我在10年的歷程的角度思考,當這個程序可能仍然在使用(記得2000年,這主要是被設計的應用程序的問題計劃報廢,但從未取代)。