在这种情况下,哪种DB Junction方法更有效?

时间:2012-03-29 20:02:03

标签: database-design archiving

为了避免软删除,我正在创建一个回收站数据库。主数据库将与它相连。以下是两种可能的连接方法的示例,我希望有哪些输入更有效?

为简单起见,我们假设有两个表,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 个答案:

答案 0 :(得分:1)

这取决于您需要保留多少,以及您将如何使用它。如果您需要记录发票和订单的所有详细信息(NumberOfStuffOrdered,Tax等),则需要特定的删除表。如果您只需要记录行曾经存在的事实(您现在拥有的内容:Id,类型,日期[已删除],原因),我们会循环回“依赖”。

如果没有人真的会使用这些数据,如果您只是需要在某一天IRS审核机会存在的事实,那么单个表就足够了。 (类比是仓库里装满了70年前的表格 - 这需要时间,但你最终会找到它。)但是,如果你经常要访问这些数据并运行报告,那就进行数据挖掘或者其他任何东西,那么你最好设计表来支持这些过程 - 规范化,星型模式或任何有用的。

一般来说,我怀疑一个支持频繁查询的少数索引的大表应该足够,除非良好的性能至关重要。

相关问题