0

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

为简单起见,假设有两个表,Order并且Invoice(每张发票只有 1 个订单)。

Order
-----
OrderId
InvoiceId
Description
Date
NumberOfStuffOrdered

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

对于这些表与回收站的连接,我不确定采用哪种方法。

方法一:

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

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

方法二:

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

尽管方法 1 将在数据库中占用更多的表空间,但随着系统的成熟,每个表的行数会更少,并且查询时间会更快。方法 2 合并了必须为数据库中的每个表创建一个额外的已删除表,但随着系统的成熟,大小会增长并且查询速度会变慢。

哪一个整体上会更有效,或者有更好的方法来解决这个问题?

4

1 回答 1

1

这取决于您需要保留多少,以及您将如何使用它。如果您需要记录发票和订单的所有详细信息(NumberOfStuffOrdered、Tax 等),则需要使用特定的删除表。如果您只需要记录该行曾经存在的事实(您现在拥有的:Id、type、Date[Deleted]、Reason),我们会循环回到“它取决于”。

如果没有人真的会使用这些数据,如果你只需要它存在于某天 IRS 审计的可能性很小的事实,那么单个表就足够了。(类比是 70 年前装满表格盒的仓库——这需要时间,但你最终会找到它。)但是,如果你要定期访问这些数据并运行报告,那么进行数据挖掘,或者上面的任何东西,那么你最好设计表来支持这些过程——规范化、星型模式或任何有用的东西。

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

于 2012-03-29T20:19:27.477 回答