为什么是好的做法 "provide an abstracting layer preventing direct access to the tables"(浏览量)

Why is a good practice "provide an abstracting layer preventing direct access to the tables" (Views)

我目前在 DWH 工作。我工作的很大一部分是将数据从一些 OLTP 数据库移动到 DWH。

我们做的一个练习是:

  1. -创建我们需要的新table。

    create table Mytable
     (Column1   date, 
      Column2   varchar(8));
    
  2. -新建视图table(完全一样)

    create view Myview as select * from dummy
    alter view Myview  (
      Column1
     ,Column2
      ) as
       select
         Column1
         column2
        from Mytable
    
  3. -从该视图读取

    这是一个使用 Myview 而不是 Mytable 的过程。 为什么?

我当然理解视图的功能,可以降低保存查询的复杂性,或者它们可以很好地保护某些最终用户的 table。

但我不明白为什么从视图读取而不是直接从 Table 读取是一个好习惯。

我的意思当然是视图与 Table 完全相同的情况。

感谢您的回答,恩里克

这个问题离征求意见很危险。

但是,通常建议将视图用于此类系统,因为它们将用户与底层数据结构隔离开来。换句话说,您可以维护数据而不必更改用户应用程序中的查询。

此外,视图是添加计算列的便捷方式。计算列通常包含业务规则。将逻辑放在一个地方可以防止业务逻辑的扩散——以及随着时间的推移可能出现的错误和不一致。

Views are Precompiled Query...所以性能会比每次写select查询和运行更好...因为每次你点击相同的select查询,它将被编译并提供结果。但是,当您将相同的查询写入视图并点击它时,它只会编译一次,并且从下次编译时,它会立即提供结果...

这是我的..