说说框架的数据库迁移功能

简介:

laravel中有个数据库迁移功能,migration。基本用法就是在database/migrations/的文件夹下面创建迁移数据库的类,在这个类中实现两个方法:

up()down()

up表示运行这个数据库迁移你要做些什么,down表示你回滚这次数据库迁移你要做些什么。

这样你就可以使用 php artisan migrate 就可以进行数据库迁移, php artisan migrate:rollback 就可以进行迁移回滚。

我一直在想,这个东西到底是鸡肋还是银弹呢?

这个功能发明出来的大致功能是为了让各个环境更好同步数据库。比如一个人A开发一个评论模块,需要做两个动作,那么A就创建一个migrate类,在里面用创造一个评论表,然后可能在文章表那里增加一个评论数的字段。当A把代码同步到主干分支的时候,B这个时候获取到了代码,那么就很简单实用php artisan migrate就能使用代码增加评论表和修改文章表字段。甚至于,在测试环境修改后到线上环境运行就可以同步表修改了。

但是总是觉得这里有几个问题:

首先是这个功能在项目上线之后很难使用。他至多只能同步各个人的开发环境,而不能同步线上环境。因为你想啊,我们平时线上修改是先改表还是先上代码?一般是先改表的。才上代码的。那么这样,我们就不大会选择在线上直接运行php artisan migrate的行为。一旦不会选择在上线后使用这个功能,就代表这个功能的使用场景大打折扣了。

其次是,这个行为安全性得不到保障。migrate的行为说到底是使用代码来控制数据库,和php里面执行alter table命令一样。一般来说,改表行为是一个非常危险的行为,越危险行为做的安全路子就是让链条变短。我们使用了php来执行一个改表命令,万一,数据量大的时候,改表非常慢,锁表,甚至于触发到php的命令耗时上限等行为?具体这个改表行为会有何后续行为?你如何回滚?这个时候,你就会懵了...用代码来管理数据库,我的结论就是一个,不纯正!!什么东西都有其专业的领域,用最专业的工具来做最专业的事情。

还有就是,migrate的rollback简直就是一个定时炸弹。我们一般往migrate的down里面写的是droptable的操作。一旦,万一,这种命令在线上被执行了。那么,就相当于是一个rm -rf的命令啊。把所有数据都给删除了。所以,安全起见,还是离这个rollback操作远一点好。

下面来说说开发阶段,在开发阶段我们会频繁修改数据库,那么这个时候,如果你想要维护一个很完善的migrate列表,你会很痛苦地发现你的migrate下的文件何其多啊。但最后,我们真的关注数据库是如何变化的么?其实,不关注。这些migrate的命令到最后确实没有多大用处。笔者的实践经历,到了一个项目准备上线的时候,我都恨不得把这些migrate的文件汇聚成一个migrate文件呢。。所以呢,在开发阶段,维护一个migrate列表,我感觉倒不如维护一个db.sql,外加laravel的初始化数据工具。每次有数据表改动,让大家source表,再初始化数据更好。

所以,综上所诉,结论是:框架的数据库迁移是个鸡肋。


本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/6513328.html,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL 开发框架 JavaScript
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
45 3
|
3月前
|
SQL 关系型数据库 MySQL
Python 数据库访问与ORM框架——打造高效开发利器
Python 作为一门广泛使用的编程语言,其在数据库访问方面也有着较为成熟的解决方案,其中ORM框架更是成为了开发者们的首选。本文将介绍 Python 中数据库访问和 ORM 框架的基本概念,以及如何使用 SQLAlchemy 这一优秀的 ORM 框架进行开发。
|
3月前
|
SQL 数据管理 数据库
Python数据库访问与ORM框架:探索高效数据管理的奥秘
在当今信息爆炸的时代,高效地管理和处理海量数据成为了企业和开发者的迫切需求。本文将介绍Python中的数据库访问技术以及ORM框架(如SQLAlchemy),探索其在数据管理方面的重要作用。通过使用Python数据库访问和ORM框架,开发者可以更轻松地操作数据库、提高代码可读性和维护性,并实现高效的数据持久化和查询。
|
3月前
|
关系型数据库 API 数据库
Python数据库访问与ORM框架:加速开发、提升效率
在现代软件开发中,数据库是不可或缺的组成部分。本文介绍了Python中数据库访问的重要性,并探讨了ORM框架(例如SQLAlchemy)如何帮助程序员加速开发、提升效率。通过使用ORM框架,开发人员可以轻松地将Python对象映射到数据库表,并且可以通过简洁的API进行数据库操作。此外,本文还讨论了ORM框架在处理复杂查询、维护数据一致性和实现数据库迁移方面的优势。
|
23天前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
56 0
|
3月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
34 0
|
3月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
66 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
3月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
78 7
|
23天前
|
SQL 存储 安全
【软件设计师备考 专题 】数据库管理系统的功能和特征
【软件设计师备考 专题 】数据库管理系统的功能和特征
72 0
|
26天前
|
存储 SQL 数据挖掘
视图、触发器和存储过程:提升数据库功能
视图、触发器和存储过程:提升数据库功能
19 1