比方说,我想有一个应用程序,可以很容易地切换DB的后端。结果 我主要想的SQL Server作为主要的后端,而是灵活地去另一个数据库引擎。火鸟和PostgreSQL似乎有(从我简短的维基百科漂移)的最常用的W / SQL服务器(加上他们都是免费的)。

如何将类似的数据库设置,访问,查询等。对于火鸟,PostgreSQL和MS SQL Server的?

有帮助吗?

解决方案

我曾经在一个项目中,这是一个绝对的要求,以支持多种数据库,其中包括至少访问,SQL Server和Oracle。

所以我知道这是可以做到。晴DML(SELECT,UPDATE,INSERT ...)是一样的,当然我们没有使它在所有的数据库的工作存在很大的问题 - 只是偶尔的烦恼。 MySQL的是当时的例外,因为它根本没有足够的能力。

我们发现,在大多数的DDL分歧,但正确的架构(我们有),这是不难解决这个问题。

这给我们造成了问题产生的唯一ID的唯一的事情 - 自动增量是非标准的。 Fortuantely在大约40表的数据库中,只有少数几个地方,唯一的ID是需要(好DB设计)。最后,我们生成代码中的唯一的ID,和处理任何冲突(在交易的所有内容)。

这的确让事情变得更容易,因为我们一直在使用自动增量的ID字段避免,这是很难想象的独特的键 - 但长远来看更好

其他提示

不幸的是,SQL跨提供商差别很大。这几乎是不可能写出所有,但最琐碎的SQL就一些RDBMS的运行 - 然后你到最小公分母的领土。远更好地使用的抽象层来处理至少到数据库的连接(增量访问,发送的查询),以及任一种ORM处理SQL本身或每个提供商SQL。

如果你想看看他们如何变化 - 很好的例子是自动递增的ID并取得最后插入记录的ID

好了,CRUD的东西应该是到处都一样,但如果你建什么复杂的,你可能会想使用触发器和存储过程而这也正是兼容性变低。写一个DBMS无关的应用程序通常意味着移动大部分业务逻辑的数据库之外,因此具有3层应用程序是,IMHO,在这样的情况下是必须的。

另外,你可以使用一些包装库,就像抽象层,但我还没有看到一个是能够在一定范围的DBMS-ES的正确做这项工作。当然,这也取决于你所使用的编程语言。

正如其他的答案中指出,DBMS差异很大,一旦你超越基本的SELECT / INSERT的东西(有时甚至有)。

我们还必须跨越几个DBMS维持compatibiliy。在我看来,最好的方法通常使用某种兼容层。我们有一个内部的数据库抽象库,但也有几个工具。

在特别的,它可能支付看看流行的ORM(休眠,NHibernate的等)。他们通常提供DB-独立作为一种副作用。至少Hibernate也有会被自动转换成SQL您正在使用的DBMS一种特殊的查询语言。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top