SQL 服务器视图不是可移植的吗?
Aren't SQL Server Views portable?
在应用程序架构审查会议期间,我的一位同事说,如果我们要使我们的模式可移植(即从 SQL 服务器到 Oracle/MySQL/Any 其他关系数据库),我们只必须坚持 "Tables" 而不是创造 "Views";因为它们不便携。
我不相信这个答案,因为我看不出视图不可移植的原因。
有人可以放一些光吗?我无法通过搜索引擎找到正确的方向。
包含 SELECT
查询的基本 CREATE VIEW
语法是标准 SQL1 并且已经使用了很长时间。但是,某些选项和功能,例如架构绑定和索引视图是产品特定的。
拥有视图和表,并使它们在很大程度上可以互换是基于原始关系模型。 Codd's rules包括
Rule 6:- The view updating rule:
All views that are theoretically updatable are also updatable by the system.
此外,当然,拥有一个可移植的模式是听起来很明智但在实践中几乎永远行不通的事情之一。实际产品与标准的实际偏差太多。如果您将自己限制在可移植子集上,那么您几乎肯定会遇到一个损坏的数据库,其中一半的约束不应强制执行。
1最终发布的各种 SQL 标准不可自由分发。但是,this draft of the ANSI-92 standard(以其标准化年份命名)在很大程度上反映了标准中的内容并包含:
11.19 <view definition>
Function
Define a viewed table.
Format
<view definition> ::=
CREATE VIEW <table name> [ <left paren> <view column list>
<right paren> ]
AS <query expression>
[ WITH [ <levels clause> ] CHECK OPTION ]
<levels clause> ::=
CASCADED | LOCAL
<view column list> ::= <column name list>
在应用程序架构审查会议期间,我的一位同事说,如果我们要使我们的模式可移植(即从 SQL 服务器到 Oracle/MySQL/Any 其他关系数据库),我们只必须坚持 "Tables" 而不是创造 "Views";因为它们不便携。
我不相信这个答案,因为我看不出视图不可移植的原因。
有人可以放一些光吗?我无法通过搜索引擎找到正确的方向。
包含 SELECT
查询的基本 CREATE VIEW
语法是标准 SQL1 并且已经使用了很长时间。但是,某些选项和功能,例如架构绑定和索引视图是产品特定的。
拥有视图和表,并使它们在很大程度上可以互换是基于原始关系模型。 Codd's rules包括
Rule 6:- The view updating rule:
All views that are theoretically updatable are also updatable by the system.
此外,当然,拥有一个可移植的模式是听起来很明智但在实践中几乎永远行不通的事情之一。实际产品与标准的实际偏差太多。如果您将自己限制在可移植子集上,那么您几乎肯定会遇到一个损坏的数据库,其中一半的约束不应强制执行。
1最终发布的各种 SQL 标准不可自由分发。但是,this draft of the ANSI-92 standard(以其标准化年份命名)在很大程度上反映了标准中的内容并包含:
11.19 <view definition> Function Define a viewed table. Format <view definition> ::= CREATE VIEW <table name> [ <left paren> <view column list> <right paren> ] AS <query expression> [ WITH [ <levels clause> ] CHECK OPTION ] <levels clause> ::= CASCADED | LOCAL <view column list> ::= <column name list>