首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这种情况下,哪种DB Junction方法更有效?

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

Stack Overflow用户
提问于 2012-03-30 04:02:03
回答 1查看 48关注 0票数 0

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

为简单起见,假设有两个表,OrderInvoice (每个发票只有一个订单)。

代码语言:javascript
复制
Order
-----
OrderId
InvoiceId
Description
Date
NumberOfStuffOrdered

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

对于这些表格与回收站的交叉点,我不确定该采取哪种方法。

方法1:

代码语言:javascript
复制
DeletedOrder
------------
DeletedOrderId
OrderId
RecycleBinId
Date
Reason

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

方法2:

代码语言:javascript
复制
DeletedRecords
--------------
DeletedRecordsId
RecordPrimaryKeyId
RecycleBinId
RecordType
Date
Reason

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-30 04:19:27

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

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

通常,我怀疑一个包含一些支持频繁查询的索引的大表应该就足够了,除非良好的性能非常重要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9932622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档