数据库的跨平台设计
来源:不详 责任编辑:栏目编辑 发表时间:2013-07-01 07:33 点击:次
开发者们应该知道,使用那些非标准的SQL命令(比如Oracle、微软和MySQL等数据库系统)存在程度相当高的危险。也就是说,从跨平台和遵守标准的角度出发,你应该尽量采用ANSI SQL,它是一种和平台无关的数据库语言。不管你在使用哪种数据库系统,如果它完全支持SQL那么它就应该支持ANSI SQL-92标准。可是,“应该支持”和“确实支持”完全是两码事。在进行DBMS跨平台编程的时候,并不是所有的系统都完全支持ANSI SQL标准。这篇文章主旨就是提出使用非标准SQL时所存在的风险及其相关的建议。
别使用存储过程
在某些编程环境下,出于效率和安全等方面的原因,存储过程成为程序员开发数据库应用程序的唯一方法。Visual Basic、C和Java程序员都并不需要了解SQL。然而,在其他某些编程环境下,存储过程又是完全禁用的。MySQL通常和Apache Web服务器组合使用,这是因为这两种软件不仅免费、可靠而且功能强大,但是,恰恰是MySQL不支持存储过程。
--------------------------------------------------------------------------------
存储过程的定义
所谓存储过程就是组成一个逻辑单元而且执行特别任务的一组SQL语句。存储过程用来封装针对数据库服务器的一整套操作或查询。
--------------------------------------------------------------------------------
Oracle和SQL服务器两者都包括了“内建”的存储过程,其使用也是很方便的。可是,如果明智的话千万别指望它们,你无法保证数据库管理员是否锁定、删除或修改了这些存储过程。如果你发现可用的某些存储过程正是你需要的,你这才可以在自己的代码中使用它们的功能。
通常,你能在Oracle或SQL Server上使用存储过程但在MySQL上则无法利用。如果你确实用到了它们,那么你得保证自己没有用到同特定平台相关的命令(以后讨论)。
别使用连接
连接是Oracle和SQL Server 这两种DBMS上令人头痛的一个问题,因为这两种系统在连接的概念上有根本的不同。基本上,各个DBMS的连接工作原理不总是一样的,而且你最终可能会得到意外的结果集合。在我们谈论各个系统有关连接的概念差别以及如何解决这些问题之前,你应该理解基本的连接子句:
连接
Join(连接)是从多个数据源获取数据的SQL数据表创建命令。
等连接
Equi-Join从两个独立的数据源获取数据并把它们组合成一个大表。
内/外连接
内连接(Inner Join)把两个表的内部列连接起来。外连接把两个表的外部列连接起来。
左/右连接
左连接(Left Join)连接两个表左边的列。右连接则连接两个表右边的列。
复合/复杂连接
其他各种连接—左/内、左/外、右/内和右/外等。
反正你得记清楚了,如果你想要自己的应用程序能在各种数据库服务器上都能工作那么就别使用连接。
ANSI SQL:CREATE, DROP, ADD, UPDATE, DELETE, INSERT, SELECT
总之,你应当用到的唯一命令如下:
数据定义语言(DDL)下的CREATE 和DROP。
数据操作语言(DML)下的ADD、UPDATE、DELETE和INSERT 。
获取数据的SELECT。
如果你在这些命令中使用了区分大小写的表格或字段名,或者这些名字包含了空格或其它特殊字符,那么你最好用方括号把名字围起来。这样做有助于防止非标准字符引发DBMS的不正常反应。
引用的完整性:键和数据类型
使用关系数据库的决定性原因就是明确数据之间的关系而且维持那些关系的完整性。这样才能让开发者以最小的冗余性、最高效的方式存储数据。键定义了关系。数据类型定义了存储和操作数据的规则。这些就是一个数据库的基本方面,但是具体的语法却可能因为数据库的不同而不同。
数据类型
只有很少部分的数据类型得到所有数据库服务器的支持。每一种DBMS都有它自己的数据类型以及为什么要这样使用它们的原因。某些专有数据类型(比如Microsoft Access的AUTONUMBER)用起来确实相当方便。
以下是ANSI数据类型:
BIT, CHARACTER, DATE, DECIMAL, DOUBLE PRECISION, FLOAT, INTEGER, INTERVAL, NUMERIC, REAL, SMALLINT, TIMESTAMP, TIME, VARBIT, VARCHAR, CHAR
以下是Oracle/Access/SQL不支持的“标准”数据类型:
INTERVAL, TIME, VARBIT
只有Oracle才支持DATE,但是以下的“标准”数据类型不被Oracle支持:
BIT, DECIMAL, NUMERIC, TIMESTAMP
以下的“标准”数据类型不被Access支持:
BIT, CHARACTER, DATE, NUMERIC, SMALLINT, TIMESTAMP
这样,只有以下的数据类型可以保证在各类数据库上都能使用:
DOUBLE PRECISION, FLOAT, INTEGER, NUMERIC, REAL,&nb
别使用存储过程
在某些编程环境下,出于效率和安全等方面的原因,存储过程成为程序员开发数据库应用程序的唯一方法。Visual Basic、C和Java程序员都并不需要了解SQL。然而,在其他某些编程环境下,存储过程又是完全禁用的。MySQL通常和Apache Web服务器组合使用,这是因为这两种软件不仅免费、可靠而且功能强大,但是,恰恰是MySQL不支持存储过程。
--------------------------------------------------------------------------------
存储过程的定义
所谓存储过程就是组成一个逻辑单元而且执行特别任务的一组SQL语句。存储过程用来封装针对数据库服务器的一整套操作或查询。
--------------------------------------------------------------------------------
Oracle和SQL服务器两者都包括了“内建”的存储过程,其使用也是很方便的。可是,如果明智的话千万别指望它们,你无法保证数据库管理员是否锁定、删除或修改了这些存储过程。如果你发现可用的某些存储过程正是你需要的,你这才可以在自己的代码中使用它们的功能。
通常,你能在Oracle或SQL Server上使用存储过程但在MySQL上则无法利用。如果你确实用到了它们,那么你得保证自己没有用到同特定平台相关的命令(以后讨论)。
别使用连接
连接是Oracle和SQL Server 这两种DBMS上令人头痛的一个问题,因为这两种系统在连接的概念上有根本的不同。基本上,各个DBMS的连接工作原理不总是一样的,而且你最终可能会得到意外的结果集合。在我们谈论各个系统有关连接的概念差别以及如何解决这些问题之前,你应该理解基本的连接子句:
连接
Join(连接)是从多个数据源获取数据的SQL数据表创建命令。
等连接
Equi-Join从两个独立的数据源获取数据并把它们组合成一个大表。
内/外连接
内连接(Inner Join)把两个表的内部列连接起来。外连接把两个表的外部列连接起来。
左/右连接
左连接(Left Join)连接两个表左边的列。右连接则连接两个表右边的列。
复合/复杂连接
其他各种连接—左/内、左/外、右/内和右/外等。
反正你得记清楚了,如果你想要自己的应用程序能在各种数据库服务器上都能工作那么就别使用连接。
ANSI SQL:CREATE, DROP, ADD, UPDATE, DELETE, INSERT, SELECT
总之,你应当用到的唯一命令如下:
数据定义语言(DDL)下的CREATE 和DROP。
数据操作语言(DML)下的ADD、UPDATE、DELETE和INSERT 。
获取数据的SELECT。
如果你在这些命令中使用了区分大小写的表格或字段名,或者这些名字包含了空格或其它特殊字符,那么你最好用方括号把名字围起来。这样做有助于防止非标准字符引发DBMS的不正常反应。
引用的完整性:键和数据类型
使用关系数据库的决定性原因就是明确数据之间的关系而且维持那些关系的完整性。这样才能让开发者以最小的冗余性、最高效的方式存储数据。键定义了关系。数据类型定义了存储和操作数据的规则。这些就是一个数据库的基本方面,但是具体的语法却可能因为数据库的不同而不同。
数据类型
只有很少部分的数据类型得到所有数据库服务器的支持。每一种DBMS都有它自己的数据类型以及为什么要这样使用它们的原因。某些专有数据类型(比如Microsoft Access的AUTONUMBER)用起来确实相当方便。
以下是ANSI数据类型:
BIT, CHARACTER, DATE, DECIMAL, DOUBLE PRECISION, FLOAT, INTEGER, INTERVAL, NUMERIC, REAL, SMALLINT, TIMESTAMP, TIME, VARBIT, VARCHAR, CHAR
以下是Oracle/Access/SQL不支持的“标准”数据类型:
INTERVAL, TIME, VARBIT
只有Oracle才支持DATE,但是以下的“标准”数据类型不被Oracle支持:
BIT, DECIMAL, NUMERIC, TIMESTAMP
以下的“标准”数据类型不被Access支持:
BIT, CHARACTER, DATE, NUMERIC, SMALLINT, TIMESTAMP
这样,只有以下的数据类型可以保证在各类数据库上都能使用:
DOUBLE PRECISION, FLOAT, INTEGER, NUMERIC, REAL,&nb
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>