2012-03-29 58 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

相关问题