0

为了帮助您理解,想一想,我正在开发一些电子邮件系统,其中电子邮件保存在 Db 中,并且可以或不能是草稿。

问题:

我有 2 个具有以下结构的表

tblUsers
=========
Id - PK
Fname

.

tblMails
=========
Id - PK
UserId - F.K. tblUsers.Id
isDraft - Bit(boolean) field, default = 0

我需要单独搜索“tblMails”中的所有邮件和草稿以查找特定的 UserId。为此,我有两种方法:

  1. 我可以创建 2 个视图 - 'showMails' 和 'showDraft',它们根据 'isDraft' 字段从 'tblMails' 中选择所有记录。此后,我可以在视图上应用“WHERE”条件来获取特定用户的详细信息。

  2. 我没有编写 View,而是在代码的任何地方都应用了“isDraft=1”或“isDraft=0”。

考虑到获取记录所需的计算周期,哪一个更合适?

4

2 回答 2

2

在草稿和普通电子邮件之间进行选择的逻辑非常简单。我认为将它包含在代码中任何需要的地方都没有问题。另一方面,视图是封装逻辑的好方法,尤其是在底层数据结构可能发生变化时。

性能问题在这里很微妙。如果您将它用于必须非常快速运行的事务系统中的小型查询,那么我认为该视图有一点优势。视图往往在第一次使用时编译一次,然后再次使用查询计划。其他查询将缓存其计划,但视图不太可能需要重新编译。

另一方面,这也是一个缺点。如果底层数据发生变化,视图可能有一个糟糕的执行计划——损害一切。

要真正确定正确的方法(还有其他方法),您需要问自己一些问题,例如:

  • 性能有多重要?
  • 查询是否应该具有高吞吐量,响应时间以毫秒为单位?
  • 有多少人在使用该系统?
  • “草稿”和“常规”电子邮件真的应该存储在同一个表中吗?
  • 随着时间的推移,这些表会增长到多大?
  • 底层数据结构会发生变化吗?
于 2013-08-14T10:30:41.810 回答
0

恕我直言,创建一个名为草稿的新字段并在其上设置默认值(例如 = 1)。每当它的草稿 = 默认值时,将设置值 (=1),在另一种情况下,将草稿显式设置为 0。检索和读取值不会对性能产生影响。

于 2013-08-14T10:35:56.753 回答