2012-03-29 73 views
0

爲了避免軟刪除,我創建了一個回收站數據庫。主數據庫將連接到它。以下是兩種可能的聯結方式的示例,我希望提供哪些更有效的輸入?在這種情況下哪種數據庫連接方法更有效?

爲簡單起見,假設有兩個表,OrderInvoice(且每個發票只有1個訂單)。

Order 
----- 
OrderId 
InvoiceId 
Description 
Date 
NumberOfStuffOrdered 

Invoice 
------- 
InvoiceId 
Description 
Price 
Tax 
Shipping 

對於這些表到回收站的連接處,我不確定採取哪種方法。

方法1:

DeletedOrder 
------------ 
DeletedOrderId 
OrderId 
RecycleBinId 
Date 
Reason 

DeletedInvoice 
-------------- 
DeletedInvoiceId 
InvoiceId 
RecycleBinId 
Date 
Reason 

方法2:

DeletedRecords 
-------------- 
DeletedRecordsId 
RecordPrimaryKeyId 
RecycleBinId 
RecordType 
Date 
Reason 

儘管方法1將採取多個表空間在數據庫中,將有每個表的行數更少,並且具有快速的查詢時間爲系統成熟。方法2合併必須爲數據庫中的每個表創建一個額外的刪除表,但是隨着系統成熟度的增長,查詢速度會變慢。

哪一個整體效率更高,還是有更好的方法來處理?

回答

1

這取決於你需要保留多少,以及你將如何使用它。如果您需要記錄發票和訂單的所有細節(NumberOfStuffOrdered,Tax等),則需要具體的刪除表。如果你只需要記錄這個行曾經存在的事實(你現在擁有:Id,type,Date [Deleted],Reason),我們循環回到「依賴」。

如果沒有人真的會使用這些數據,如果您只是需要事實上存在IRS審計的機會,那麼一張表就足夠了。 (比喻是倉庫裏充滿了70年的表格 - 這需要時間,但最終會找到它。)但是,如果您經常要訪問這些數據並運行報告,請執行數據挖掘,或者其他任何東西,那麼你最好設計表來支持這些過程 - 規範化,星型模式或其他有用的東西。

一般來說,我懷疑有一些支持頻繁查詢的索引的大表應該就足夠了,除非性能良好。

+0

謝謝你的迴應。好的表現總是至關重要的! ;)大多數情況下,我希望保留數據以確保參照完整性得到維護,而無需在記錄需要刪除時刪除外鍵關聯或級聯刪除。這也將有助於能夠恢復已刪除的記錄而不會影響性能。回收站將有一個級聯刪除功能,以便謹慎使用。 – 2012-03-29 20:27:11

相關問題