乐趣区

简直了顶级架构师分享心得如何在项目中兼容多种数据库

前段时间,在和一个做了十年的顶级叫故事聊天,他说,在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的举措。他开发的项目或者框架,采用了微软企业库 Enterprise Library 的模块,倾向于支持多种数据库,也为我们开发不同类型的项目提供非常方便、快速、统一的处理方式。一般常规的数据库包括 MS Server、Oracle、MySQL、PostgreSQL、SQLite、DB2、国产达梦等数据库

本篇随笔主要介绍如何实现从 MS SQLServer 到 Mysql 数据库,并为不同数据库类型添加实现底层的解决思路。 文末附上 MySQL 数据库学习视频

1、SQLServer 数据库导出到 MySQL

如果我们已经基于 SQL Server 进行了开发,并且具有很多基础的数据库数据了,那么我们可以利用 SQL Server 导出到 MySQL 数据库中,这种是我们常见的一种开发方式,毕竟基于 SQLServer 数据库开发起来会比较快速一些。

SQL Server 数据库的管理工具是 SQL Server Management Studio;而 Mysql 数据库的管理工具则推荐使用 Navicat,这是一款非常强大好用的管理工具。

首先我们使用 Navicat 建立自己一个空白的 Mysql 数据库,用来承载 SQL Server 的数据导出需要。

例如我们创建一个和 SQL Server 数据库同名的 MVCWebMisTest 数据库,并且设置它的字符集为默认或者 UTF8 的编码方式,如下所示。

然后利用 SQL Server Management Studio 进行数据的直接导出,选择【任务】【导出数据】,如下所示。

然后在弹出的数据库里面选择导入的数据源和目标,选择导入的数据源界面如下所示。

然后在目标里面选择 Mysql 的驱动,填入相应的信息,如下界面所示。

然后在下一步选择需要导出的表信息。

很不幸,这种方式操作数据库的导出操作没有办法成功。

2、从 Navicat 中导入 MS SQLServer 数据库数据

既然通过 SQL Server Management Studio 无法导入数据到 Mysql 数据库中,那么我们尝试下 Mysql 的数据库管理工具 Navicat,它也有数据传输(导入导出)的功能。

我们在刚才建好的数据库上面右键调出对应的【数据传输】功能,然后设置好数据的源和目标,如下所示。

执行数据传输操作,顺利完成,非常强大和方便,而且没有任何错误。如下界面所示。

检查数据库导入的数据表和数据,没有问题。

3、Mysql 数据库之间的传递

那么如果我们需要部署到服务器,就需要把当前的 Mysql 数据库传递(或者还原)到服务器的 MySQL 数据库中,一般来讲,我们利用 Mysql 的 Navicat 管理工具就可以实现数据导出的 sql 文件里面,然后在服务器里面使用反向操作即可还原数据库成功的了。

转储 SQL 文件成功如下界面所示。

而在服务器的上面,我们可以利用 Navicat 的运行 SQL 文件即可还原 Mysql 数据库了。

运行的结果如下所示。

当然有时候也会发现存在一些表依赖引用的情况发生,不知道是不是 Navicat 版本出来的问题,不过如果有这个问题,只要不是编码的问题,都好解决,打开 sql 文件把创建表的顺序调整一下就可以了,我就碰到过这种极端的情况,把一些依赖表调整到前面来就可以顺利导入数据了。

4、底层的 Mysql 数据库支持

底层支持多种数据库,对我们开发不同类型的项目有着非常重要的支撑作用,我们不知道客户具体环境会选择那种数据库,如果我们扩展不同的数据库非常方便和迅速,无疑会给我们提供很好的控制力和信心。

采用了微软企业库 Enterprise Library 作为我们底层的数据库访问模块后,对于多种数据库的访问操作,就会统一采用这个企业库的数据库访问对象,操作起来非常一致,为了对不同数据库的常规增删改查等一些操作进行进一步的封装,已达到简化代码的目的,因此我们可以为每个不同的数据库定义一个数据访问操作基类,以便实现一些不同数据库差异性的处理,但是它们还是有一个共同的数据访问基类。

采用不同的数据库,我们需要为不同数据库的访问层进行生成处理,如为 SQLServer 数据的表生成相关的数据访问层 DALSQL,里面放置各个表对象的内容,不过由于采用了相关的继承类处理和基于数据库的代码生成,需要调整的代码很少。

我们为了不同的数据库准备了不同的数据库实现,不过也仅仅是特殊的接口调用而已,一般常规的增删改查以及分页等普通接口,全部交由基类接口实现即可。

如对于权限管理系统这个常规框架基础模块,多数据库的支持就非常必要的,它的数据库访问层如下所示。

不同的数据库访问层实现也是相差无几的,一般可以利用代码生成工具进行快速生成后,增加自定义接口实现即可。

而对于不同数据库的支持,直接复制过去,改动一下数据库实现层的命名空间和访问层的基类就可以了,如果有自定义 SQL 脚本上的差异,可以适当的修改即可。一般从一种数据库支持扩展到另外一种数据库支持,无非就是复制过去,进行调整一下即可,非常方便快速,这个就是整体框架支持的魅力和效率所在。

这样整合多种数据库支持的底层后,整个数据访问的架构设计如下所示。

有了这些底层支持,我们在配置文件选择不同的数据库的时候,选择性的保留其中一种数据库配置信息即可。下面是各种数据库支持的配置信息参考,一般保留一种即可。

最近整理了了几套 Mysql 数据库的资料,分享给大家

麻烦帮忙转发一下这篇文章 + 关注我,然后添加小助手 VX:xuanwo008 二字即可领取啦

【数  据 库】4 套 Mysql,从小白到大神,数据库查询优化,大型分布式集群,数据库运维视频课程

【数据库】Mysql 从小白到大神

【数据库】MySQL 高级大型分布式集群,主从复制,负载均衡,数据库中间件视频课程

【数据库】MySQL 数据库查询优化

麻烦帮忙转发一下这篇文章 + 关注我,添加小助手 VX:xuanwo008 二字即可领取啦

退出移动版