为了帮助您理解,请考虑一下,我正在制作一些电子邮件系统,其中电子邮件保存在Db中,可以是也可以不是草稿。
问题:
我有2个表格,结构如下
tblUsers
=========
Id - PK
Fname
tblMails
=========
Id - PK
UserId - F.K. tblUsers.Id
isDraft - Bit(boolean) field, default = 0
我需要在'tblMails'中搜索特定UserId的所有邮件和草稿。要做到这一点,我有两种方式:
我可以创建2个View - 'showMails'和'showDraft',根据'isDraft'字段从'tblMails'中选择所有记录。此后,我可以在视图上应用'WHERE'条件以获取特定用户的详细信息。
我不是在编写View,而是在代码中的任何地方应用'isDraft = 1'或'isDraft = 0'。
考虑到获取记录所需的计算周期,哪一项应该更合适?
答案 0 :(得分:2)
选择草稿和常规电子邮件的逻辑非常简单。我认为将它包含在代码中的任何地方都没有问题。另一方面,视图是封装逻辑的好方法,特别是当底层数据结构可能发生变化时。
这里的表现问题很微妙。如果您在事务系统中使用它来进行必须非常快速运行的小查询,那么我认为该视图略有优势。在首次使用时,视图往往会被编译一次,然后再次使用查询计划。其他查询将缓存其计划,但视图不太可能需要重新编译。
另一方面,这也是一个缺点。如果底层数据发生变化,那么视图可能会有一个糟糕的执行计划 - 伤害所有内容。
要真正确定正确的方法(还有其他方法),您需要问自己一些问题,例如:
答案 1 :(得分:0)
恕我直言创建一个名为draft的新字段并在其上设置默认值(比如= 1)。 每当它的草稿=默认值将设置值(= 1)并在 其他情况明确将草稿设置为0.检索和读取值 不会对性能产生影响。