View应该何时实际用于实际的表?我应该期望得到什么收益呢?
总体而言,在表格上使用视图有什么好处?我不应该以视图首先看起来的方式设计表格吗?
答案 0 :(得分:71)
哦,你需要考虑很多不同之处
供选择的观点:
插入/更新的视图:
<强>缺点强>
答案 1 :(得分:40)
观点可以:
并且您不应该设计表格以匹配视图。您的基础模型应该关注数据的高效存储和检索。视图部分是一种工具,通过允许您抽象出复杂性来减轻高效的标准化模型所带来的复杂性。
另外,询问“在桌子上使用视图有什么好处?”并不是一个很好的比较。你不能没有桌子,但你可以不用看法。它们各自存在的原因完全不同。表是具体的模型,视图是抽象的,好的,视图。
答案 2 :(得分:31)
当您需要确保每次都遵循复杂逻辑时,视图是可以接受的。例如,我们有一个视图,可以创建所有财务报告所需的原始数据。通过让所有报告都使用此视图,每个人都使用相同的数据集,而不是使用一组联接的一个报告,另一个忘记使用一个提供不同结果的报告。
如果要将用户限制为特定的数据子集,则可以接受视图。例如,如果您不删除记录但仅将当前版本标记为活动而旧版本标记为非活动,则您希望视图用于仅选择活动记录。这可以防止人们忘记将where子句放在查询中并获得错误的结果。
视图可用于确保用户只能访问一组记录 - 例如,特定客户端的表视图以及表上没有安全权限可能意味着该客户端的用户只能访问查看该客户端的数据。
重构数据库时,视图非常有用。
使用视图调用视图时,视图是不可接受的,这会导致可怕的性能(至少在SQL Server中)。我们几乎失去了一个价值数百万美元的客户端,因为有人选择以这种方式抽象数据库并且性能非常糟糕且超时频繁。我们也必须支付修复费用,而不是客户,因为性能问题完全是我们的错。当视图调用视图时,它们必须完全生成基础视图。我已经看到了这个视图称为视图的视图,该视图调用视图并生成了数百万条记录,以便查看最终需要的三个用户。我记得其中一个视图用了8分钟来完成记录的简单计数(*)。调用视图的观点是一个非常糟糕的主意。
用于更新记录通常是一个坏主意,因为通常只能更新同一个表中的字段(同样这是SQL Server,其他数据库可能会有所不同)。如果是这种情况,那么直接更新表格更有意义,以便您知道哪些字段可用。
答案 3 :(得分:7)
当您需要从多个表中进行选择或仅获取表的子集时,视图很方便。
您应该以这样的方式设计表格,使数据库标准化(最小重复)。这可能会使查询变得有些困难。
视图有点分离,允许您以不同的方式查看表中的数据。
答案 4 :(得分:7)
通常的做法是在视图中隐藏连接以向用户呈现更加非规范化的数据模型。其他用途涉及安全性(例如通过隐藏某些列和/或行)或性能(在物化视图的情况下)
答案 5 :(得分:6)
你应该在不考虑观点的情况下设计你的桌子 除了保存连接和条件之外,Views还具有性能优势:SQL Server可以在视图中计算并保存其执行计划,因此比“即时”SQL语句更快。 View还可以简化您在现场级别的用户访问工作。
答案 6 :(得分:5)
首先,顾名思义,视图是不可变的。这是因为视图只是从DB中存储的查询创建的虚拟表。 因此,您有一些观点特征:
所以有很多用例比表更适合视图,只考虑只在网站上显示活跃用户。视图会更好,因为您只对数据库中实际存在的数据子集(活动和非活动用户)进行操作
查看此article
希望这有帮助..
答案 7 :(得分:2)
根据Wikipedia ,
视图可以将基础表的暴露程度限制到外部世界:给定用户可能有权查询视图,而拒绝访问基表的其余部分
视图可以将多个表连接并简化为一个虚拟表。
视图可以充当聚合表,其中数据库引擎聚合数据(总和,平均值等),并将计算结果显示为数据的一部分。
< / LI>视图可以隐藏数据的复杂性。例如,视图可能显示为Sales2000或Sales2001,透明地对实际基础表进行分区。
视图占用的空间非常小;数据库仅包含视图的定义,而不包含它所呈现的所有数据的副本。
视图可以提供额外的安全性,具体取决于所使用的SQL引擎。