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