我想在(PHP)项目中提出(或找到)可重用的数据库模式版本控制系统.

有一些可用于PHP的Rails风格的迁移项目. http://code.google.com/p/mysql-php-migrations/是一个很好的例子.它使用迁移文件的时间戳,这有助于分支之间的冲突.

这种系统的一般问题:
当开发分支机构A检出并且想要检查分支机构B时,
B可能有新的迁移文件.这很好,迁移到较新的内容是直截了当的.

如果分支A具有较新的迁移文件,则需要向下迁移到最近的共享修补程序.如果分支A和B具有明显不同的代码库,则可能需要进一步迁移.这可能意味着:检查B,确定共享的修补程序号,检出A,向下移动到此修补程序.这必须从A完成,因为实际应用的补丁在B中不可用.然后,检出分支B,并迁移到最新的B补丁.从B到A再次反向过程.

拟议制度:
当向上迁移时,而不是仅仅存储补丁版本,将整个补丁序列化在数据库中以备以后使用,尽管我可能只需要使用down()方法.
更改分支时,将已运行的修补程序与目标分支中可用的修补程序进行比较.确定运行补丁的db表和目标分支中的补丁之间的最近的共享补丁(或者最大的差异,可能是ID或散列).还可以查找两个分支之间的一些共享补丁下的新的或缺少的补丁.

自动合并到最近的共享修补程序,使用db表存储down()方法,然后合并到branche的最新补丁.

我的问题是:
这个系统是否太疯狂和(或)充满后果,打扰发展?我对数据库模式版本控制的经验仅限于PHP autopatch,它是一个up() – 仅需要具有顺序ID的文件名的系统.

更新,2年后

这是一个老帖子,但我想提到,在开发过程中,我已经放弃了迁移,因为它们不必要地复杂且容易出错.

相反,我使用构建脚本来:

>清除数据库,
>创建模式,
>添加已知的应用程序数据(实际内容),和
>添加夹具数据(开发内容).

当更改分支或从其他开发人员接收更新时,您可以使用一个命令完全重新加载数据库以进入已知状态.

生产服务器仍然需要数据库修补程序,但是这些修补程序仍然需要手动创建.

嗯,我没有找到任何理由不向前推进.

这个项目就是这样的:

http://github.com/Billiam/MySQL-PHP-AutoMigrations

需要一些爱(准确的评论,单元测试,实际的错误测试),但似乎对我来说现在很好.

这是http://code.google.com/p/mysql-php-migrations/的叉子,包括上面的想法,还有一些其他的小东西.

向下迁移是通过在数据库中保存的方法完成的,以便文件更改(如在分支之间切换时)不会影响向下迁移.
增加了两个功能:

>一个魔术’自动’功能,可以处理迁移到最旧的共享迁移,然后直到迁移目录中的最新迁移.
>’提出’功能,显示自动实际做什么.

然而,仍然非常乐意听到这种方法的潜力(甚至是预期的)陷阱.

PHP – 数据库架构:版本控制,分支,迁移的更多相关文章

  1. 详解前端HTML5几种存储方式的总结

    本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

  2. PhoneGap / iOS上的SQLite数据库 – 超过5mb可能

    我误解了什么吗?Phonegap中的sqlitedbs真的有5mb的限制吗?我正在使用Phonegap1.2和iOS5.解决方法您可以使用带有phonegap插件的原生sqliteDB,您将没有任何限制.在iOS5.1中,Websql被认为是可以随时删除的临时数据…

  3. ios – 在Swift中获取Cocoa Touch Framework项目版本字符串

    有谁知道这是否是我的项目设置中的缺陷,Xcode中的一个错误,或者是否有一种方法可以将Swift中的框架版本作为String或数组获取,这样我可以提供比major.minor更精细的版本控制?

  4. ios – 领域:如何获取数据库的当前大小

    是否有RealmAPI方法使用RealmSwift作为数据存储来获取我的RealmSwift应用程序的当前数据库大小?

  5. ios – Realm – 无法使用现有主键值创建对象

    我有一个对象有许多狗的人.应用程序有单独的页面,它只显示狗和其他页面显示人的狗我的模型如下我有人存储在Realm中.人有详细页面,我们取,并显示他的狗.如果狗已经存在,我会更新该狗的最新信息并将其添加到人的狗列表中,否则创建新狗,保存并将其添加到人员列表中.这适用于coredata.在尝试用他的狗更新人时,领域会抛出异常无法使用现有主键值创建对象解决方法这里的问题是,即使你正在创建一个全新的Rea

  6. iOS故事板 – 实践经验re:多个开发者?

    故事板似乎是处理iOS中多个视图控制器以及它们之间转换的优雅方式.但是,出于对多个开发人员对同一故事板文件中的视图控制器进行更改以及可能导致的合并冲突而发生的情况的考虑,我一直避免使用它们.在中等复杂度的生产应用程序中,有没有人有这方面的实际经验?您的评估是什么–在这方面是否为“黄金时间”准备好了故事板?

  7. ios – UIWebView中的WebSQL / SQLite数据库的最大大小(phonegap)

    我知道一般来说,Web应用程序的本地存储空间有5MB的限制.本地网页浏览应用程式是否也有这个限制?

  8. ios – Firebase离线存储高级 – 手动同步和进度信息

    >我可以提供一个捆绑数据库–安装App后我可以已经离线查询了Firebase数据?然后我有另一个关于Firebase的主要问题:>JSON存储是伟大的–但是这样我们不关心一个独特的结构,我们必须注意这一点插入总是正确的数据集?我从来没有试图显示实际的进展,但是当您从firebase中检索数据时,始终会在成功检索数据时调用onDataChange方法.https://firebase.google.com/docs/database/android/retrieve-data#read_data_onceC

  9. Xcode 4.5自动更改.xib文件

    由于我升级到Xcode4.5,我发现它会自动删除我访问的每个xib文件的一部分.这是一节:我几乎可以这样生活,但是当我再次访问该文件时,我发现还有更多的“自动”更改.他们变得更加多样,难以表征,所以我不会包括例子,除非我真的需要.我不明白这里发生了什么.我正在寻找两个答案之一:>有没有办法禁用这个?>为什么会发生这种情况,有没有办法强制Xcode将这些更改应用于所有xib文件,以便我可以做到这一点?

  10. ios – 如何处理多用户数据库

    我的应用程序就像很多应用程序–它有一个用户输入用户名和密码的登录屏幕,以及登录按钮我的应用程序还使用CoreData来保存大多数用户的业务对象,当然也是用户特定的.我也有一个登出按钮来启用切换用户.这不会发生很多,但仍然是必要的).现在如果不同的用户登录,我需要获取他的具体数据.但是我该如何做呢?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部