`
isiqi
  • 浏览: 16710995 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

数据库的跨平台设计

阅读更多
开发者们应该知道,使用那些非标准的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, SMALLINT, VARCHAR, CHAR



主/外键

假设某个表内有两个字段,创建这个表的语法如下:
CREATE TABLE [MyTable] ([FieldA] VARCHAR, [FieldB] VARCHAR);

为了添加主键以便表内的每一条记录都唯一标识你可以采用PRIMARY KEY 表达式:
CREATE TABLE [MyTableA] ([RecordID] VARCHAR PRIMARY KEY, [FieldA] VARCHAR, [FieldB] VARCHAR);

在创建另一个表,其中一个字段索引第1个表,你可以把该字段定义为同第1个表的字段具有关系的外键:

CREATE TABLE [MyTableB] ([RecordID] VARCHAR PRIMARY KEY, [FieldA] VARCHAR, [FieldB] VARCHAR, [FieldC] VARCHAR REFERENCES [MyTableA]([FieldA]))

在以上例子中,所有的字段都是VARCHAR类型;但是你得记住,某一数据类型字段只能索引同一数据类型的字段。


ODBC 和 JDBC
如果你在编写的应用程序要用到SQL数据库连接,那么你可以用ODBC完成该功能。如果它是一个Java应用程序则可以用JDBC(简而言之就是ODBC的Java接口)。

因为你希望自己的应用程序最好不要引起管理员的注意,所以你应该为你用户的DBMS包括所有必要的ODBC驱动程序。这样,如果用户从一个平台转移到另一个平台,它们所需要的驱动程序却已经事先拥有了。

你的应用程序应该通过编程的方式决定当前用到的ODBC驱动程序对应何种DBMS。这样你才能用上那些数据库服务器上强大的、同特定平台相关的命令。

另类浏览器之战
最流行的浏览器当然是微软的Internet Explorer和Netscape的Navigator了。但是,不管你手头用的是哪一种,它能保证支持现有的所有网站吗?错!很多花哨的东西,比如DHTML、框架以及多媒体等等都各自受到两类浏览器中非标准的HTML标签的支持。

因为程序在这两种国际标准的岔路口无所适从,所以你必须为两种浏览器编写代码或者编写最具普遍性的功能代码而放弃大量的动态内容。

数据库服务器也面临同样的问题。ANSI SQL-92是人人赞同的标准。然而,Oracle、微软以及其他数据库厂商还自作主张加入了很多破坏SQL代码的特性。因此,你不仅得编写遵从基本规范(SQL-92)的代码,而且的代码还得根据具体用到的产品实现不同的特性。

在你自己的应用程序内,你必须正确地决定应用程序将使用什么类型的数据库,而且数据库应该定位在哪里。你还得老练地处理应用程序或用户产生的任何错误。你当然不希望仅仅因为文件被删除或者网线连接松弛就导致程序崩溃(或服务器崩溃)。在经过精心设计的网络上,数据库服务器通常同工作站和Web服务器、应用服务器在物理上相分离,因此断开连接是很常见的。

小结
作为Web开发者,你需要对应用程序使用非标准SQL命令的危险保持高度的小心。这篇文章的中心思想是建议用ANSI SQL编写跨平台的应用程序。利用ANSI SQL减少商业数据库系统的非标准方言所带来的头疼问题。
分享到:
评论

相关推荐

    cpp-基于C开发的异种数据库跨平台连接中间件

    标题 "cpp-基于C开发的异种数据库跨平台连接中间件" 暗示我们讨论的是一个用C++编写的软件组件,它充当了不同数据库系统之间的桥梁,允许在多种数据库之间进行数据交互和操作。这个中间件的目标是提供一种跨平台的...

    基于C++开发的异种数据库跨平台连接中间件..zip

    标题中的“基于C++开发的异种数据库跨平台连接中间件”是指一个使用C++编程语言编写的软件组件,它的主要功能是实现不同类型的数据库之间的互连和通信。这种中间件通常扮演着桥梁的角色,允许应用程序在不关心底层...

    基于Java语言的跨平台Realm数据库设计源码

    该跨平台项目为基于Java语言的Realm数据库设计源码,涵盖1419个文件,其中包含660个Java源文件、200个Kotlin源文件、146个XML配置文件、87个PNG图片文件、61个C/C++源文件、55个JSON配置文件、38个Gradle构建脚本、...

    基于Mars实时物联数据库的跨平台物联网设备采集平台设计源码

    该项目是一款基于Mars实时物联数据库的跨平台物联网设备采集平台设计源码,包含1979个文件,涵盖1576个C#源代码文件、116个XAML界面文件、85个csproj项目文件、74个resx资源文件、45个PNG图片文件、21个xshd样式文件...

    Pgsql跨网络数据库增量同步

    1、 跨网络进行增量同步数据,即隔着网闸,网络不能直连,使用dblink、主从库等方案解决不了; 2、 源表跟目标表字段名称可以不一致,但表名称要一致(表名称不一致也可以实现); 3、 自定义增量的控制字段,可以是...

    湖科大2020数据库系统课程设计.zip

    这些驱动可能包括JDBC(Java Database Connectivity)驱动、ODBC(Open Database Connectivity)驱动等,它们使得应用程序可以通过标准接口与数据库交互,实现了数据的跨平台访问。 在本次课程设计中,SQL语言是...

    数据库跨云架构设计.pptx

    数据库跨云架构设计是当前IT领域的一个重要议题,特别是在企业寻求更高的灵活性、容灾能力和成本效益的背景下。本文将深入探讨这一主题,包括历史背景、现状及未来趋势,并重点介绍MySQL Utilities和配置中心VKDS在...

    sqlite 跨平台嵌入式数据库 包含源代码、DLL、图形化界面软件、DOS界面软件

    SQLite是一款开源、轻量级的嵌入式数据库引擎,它...总之,SQLite因其轻量级、易用性和跨平台特性,成为了众多开发者首选的嵌入式数据库解决方案。无论是在桌面应用、移动应用还是嵌入式系统中,都能看到SQLite的身影。

    基于高性能开源引擎的跨平台数据库防火墙hisql设计源码

    该项目是一款基于高性能开源引擎构建的跨平台数据库防火墙hiSQL,设计源码包含83个文件,涵盖31个头文件(h)、26个C源文件(c)、3个Markdown文件(md)、2个Python脚本(py)、1个Git忽略文件(gitignore)、1个...

    用ANSI SQL编写跨平台的数据库应用程序

    标题中的核心知识点是使用ANSI SQL编写跨平台的数据库应用程序,这意味着在开发过程中,应遵循ANSI SQL-92标准,以确保代码能在不同的数据库管理系统(DBMS)上运行。描述中提到,虽然理论上大多数数据库系统都应该...

    PHP技术支持的基因数据库Web平台设计及构建.pdf

    "PHP技术支持的基因数据库Web平台设计及构建" PHP技术支持的基因数据库Web平台设计及构建是生物信息学领域的重要研究方向。近年来,生物学研究已经从基因的组成和排列分析开始,已经建成的基因数据库数量和类别繁多...

    DelphiXE控制跨平台数据库SQLite

    在IT行业中,数据库管理系统是应用程序的核心组成部分,而SQLite作为一个轻量级、开源的嵌入式数据库,因其高效、稳定和跨平台的特性,受到了广大开发者的喜爱。在Delphi XE这个强大的RAD(快速应用开发)环境中,...

    ASP.NET数据库网站设计教程

    ASP.NET Core是跨平台的框架,支持.NET Core运行时,优化了性能和可移植性。 在实际项目中,数据库的设计是至关重要的。良好的数据库设计能够提高系统的性能和可扩展性。课程可能涵盖了ER(实体关系)模型、范式...

    数据库课程设计中的跨平台支持:实现策略与技术实践

    实现数据库的跨平台支持需要在数据库选择、架构设计、数据访问层实现、测试策略以及部署和维护等方面进行全面考虑。通过采用跨平台的数据库系统、设计灵活的架构、实现抽象的数据访问层、执行全面的测试以及提供详细...

    Web数据库设计 Web数据库设计

    例如,对于需要跨平台兼容性的项目,ODBC和JDBC可能是更好的选择,而如果在Windows环境中并且需要高性能,ADO可能更为适用。此外,随着技术的发展,ASP.NET、PHP、Python等现代Web开发框架也提供了更高级别的抽象和...

    数据库课程设计-大三期末

    * 本系统基于 B/S 架构的管理信息系统,实现跨操作系统、跨平台运作 * 使用 Spring 的 MVC 框架,具有开发效率高、设计灵活、代码重用性高等特点 三、数据库实现 * 使用 Nutz 的持久化和 MySql 数据库进行无缝连接...

    基于PHP技术的基因数据库Web平台设计.pdf

    【基于PHP技术的基因数据库Web平台设计】 基因数据库在现代生物科学研究中扮演着至关重要的角色,其中包含了大量关于DNA序列和基因信息的数据。然而,由于数据来源多样、格式不一,使得基因数据库的管理和使用变得...

Global site tag (gtag.js) - Google Analytics