在我們的庫存數據庫(SQL Server 2008的STD版)我們有一個表(稱爲股票結果),存儲結果爲每個股票項目通過股票期權,這看起來像這樣:是否正常化成績表或不
<<StockResults>>
PK StockPeriodID int
PK StockItemID int
OStockCost money
OStockQty real
DeliveriesQty real
CreditsQty real
TransfersInQty real
TransfersOutQty real
CStockQty real
OStockAmt money
DeliveriesAmt money
CreditsAmt money
TransfersInAmt money
TransfersOutAmt money
CStockAmt money
... except that it has about 40 columns
我們正在考慮規範化該表,以便我們有一個表和一個數據表。就像這樣:
create table StockResults_Fields
(FieldID int, FieldName varchar(20), FieldDataType varchar(10))
create table StockResults_Values
(StockPeriodID int, StockItemID int, FieldID int, FieldName varchar(20), FieldDataType varchar(10))
我們正在考慮這樣做的原因是爲了改善表的性能並防止死鎖(我們目前收到)。關於規範化以減少死鎖的建議來自本文:Reducing SQL Server Deadlocks。
我的擔憂是結果表(它已經很大)會變得更大。大多數報告顯示的數據結構與當前結構相似 - 新方法將會有更多的連接。
在我們開始涉及相當多的工作之前,有沒有人對我們開始之前的結果和性能優勢的這種規範化結構有任何建議?
編輯:感謝您的建議。我有一種直覺,認爲2桌方法並不是一條可行的路線,但我不確定爲什麼 - 直到現在。鎖定錯誤已經解決:我們有一個沒有聚集索引的表,但快照隔離看起來像我們可能考慮的。
@Phil和@RedSquare都有很好的建議。 1)不要移動到元數據模型。這種方式是瘋狂和cthulu。 2)考慮創建一個靜態存儲,偶爾用實際值刷新以減少爭用(即隔離層)。 – 2010-06-25 18:38:27