为什么是好的做法 "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。
我们做的一个练习是:
-创建我们需要的新table。
create table Mytable
(Column1 date,
Column2 varchar(8));
-新建视图table(完全一样)
create view Myview as select * from dummy
alter view Myview (
Column1
,Column2
) as
select
Column1
column2
from Mytable
-从该视图读取
这是一个使用 Myview 而不是 Mytable 的过程。
为什么?
我当然理解视图的功能,可以降低保存查询的复杂性,或者它们可以很好地保护某些最终用户的 table。
但我不明白为什么从视图读取而不是直接从 Table 读取是一个好习惯。
我的意思当然是视图与 Table 完全相同的情况。
感谢您的回答,恩里克
这个问题离征求意见很危险。
但是,通常建议将视图用于此类系统,因为它们将用户与底层数据结构隔离开来。换句话说,您可以维护数据而不必更改用户应用程序中的查询。
此外,视图是添加计算列的便捷方式。计算列通常包含业务规则。将逻辑放在一个地方可以防止业务逻辑的扩散——以及随着时间的推移可能出现的错误和不一致。
Views are Precompiled Query...所以性能会比每次写select查询和运行更好...因为每次你点击相同的select查询,它将被编译并提供结果。但是,当您将相同的查询写入视图并点击它时,它只会编译一次,并且从下次编译时,它会立即提供结果...
这是我的..
我目前在 DWH 工作。我工作的很大一部分是将数据从一些 OLTP 数据库移动到 DWH。
我们做的一个练习是:
-创建我们需要的新table。
create table Mytable (Column1 date, Column2 varchar(8));
-新建视图table(完全一样)
create view Myview as select * from dummy alter view Myview ( Column1 ,Column2 ) as select Column1 column2 from Mytable
-从该视图读取
这是一个使用 Myview 而不是 Mytable 的过程。 为什么?
我当然理解视图的功能,可以降低保存查询的复杂性,或者它们可以很好地保护某些最终用户的 table。
但我不明白为什么从视图读取而不是直接从 Table 读取是一个好习惯。
我的意思当然是视图与 Table 完全相同的情况。
感谢您的回答,恩里克
这个问题离征求意见很危险。
但是,通常建议将视图用于此类系统,因为它们将用户与底层数据结构隔离开来。换句话说,您可以维护数据而不必更改用户应用程序中的查询。
此外,视图是添加计算列的便捷方式。计算列通常包含业务规则。将逻辑放在一个地方可以防止业务逻辑的扩散——以及随着时间的推移可能出现的错误和不一致。
Views are Precompiled Query...所以性能会比每次写select查询和运行更好...因为每次你点击相同的select查询,它将被编译并提供结果。但是,当您将相同的查询写入视图并点击它时,它只会编译一次,并且从下次编译时,它会立即提供结果...
这是我的..