Answers:
哦,您需要考虑很多差异
供选择的视图:
插入/更新的视图:
缺点
视图可以:
而且您不应该设计表格以匹配视图。您的基本模型应与数据的有效存储和检索有关。视图在某种程度上是一种工具,可通过允许您抽象出复杂性来减轻由有效的标准化模型引起的复杂性。
同样,问“在表上使用视图有什么好处?”并不是一个很好的比较。您不能没有表,但不能没有视图。它们各自存在的原因非常不同。表是具体的模型,视图是抽象的视图。
当您需要确保每次都遵循复杂的逻辑时,可以接受视图。例如,我们有一个视图可以创建所有财务报告所需的原始数据。通过使所有报表都使用此视图,每个人都可以使用相同的数据集,而不是一个报表使用一组联接,而另一个报表却忘记使用提供不同结果的报表。
当您想限制用户使用特定的数据子集时,可以接受视图。例如,如果您不删除记录,而仅将当前记录标记为活动记录,而将较旧的版本标记为非活动记录,则希望视图用于仅选择活动记录。这样可以防止人们忘记将where子句放在查询中并得到不好的结果。
视图可用于确保用户只能访问一组记录-例如,特定客户端的表视图,并且表上没有安全权限,这意味着该客户端的用户只能看到数据为那个客户。
重构数据库时,视图非常有帮助。
当您使用视图调用视图可能导致糟糕的性能时(至少在SQL Server中),视图是不可接受的。我们几乎失去了一个价值数百万美元的客户,因为有人选择以这种方式抽象数据库,并且性能令人恐惧,而且超时频繁。由于性能问题完全是我们的错,因此我们也必须为修复付出代价,而不是由客户支付。当视图调用视图时,它们必须完全生成基础视图。我已经看到了,视图称为视图,视图称为视图,并且生成了数百万条记录以查看用户最终需要的三个记录。我记得这些视图之一花了8分钟来对记录进行简单的计数(*)。视图调用视图是一个非常糟糕的主意。
使用视图来更新记录通常不是一个好主意,因为通常只能更新同一表中的字段(同样,这是SQL Server,其他数据库可能会有所不同)。在这种情况下,无论如何直接更新表更有意义,这样您就知道哪些字段可用。
根据维基百科,
视图可以限制基础表对外界的暴露程度:给定的用户可能有权查询该视图,而拒绝访问其余的基表。
视图可以将多个表合并并简化为一个虚拟表。
视图可以充当汇总表,数据库引擎在其中汇总数据(总和,平均值等),并将计算结果作为数据的一部分呈现。
视图可以隐藏数据的复杂性。例如,一个视图可能显示为Sales2000或Sales2001,从而透明地划分了实际的基础表。
视图只占用很小的空间;数据库仅包含视图的定义,而不包含视图提供的所有数据的副本。
视图可以提供额外的安全性,具体取决于所使用的SQL引擎。