AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 2
Accepted
Toby
Toby
Asked: 2011-01-04 12:46:32 +0800 CST2011-01-04 12:46:32 +0800 CST 2011-01-04 12:46:32 +0800 CST

组如何跟踪数据库架构更改?

  • 772

哪些版本控制方法可以帮助团队跟踪数据库架构更改?

mysql version-control
  • 5 5 个回答
  • 11653 Views

5 个回答

  • Voted
  1. Best Answer
    eiefai
    2011-01-04T12:49:46+08:002011-01-04T12:49:46+08:00

    就在几分钟前,我正在检查这个:一个应该存在于所有项目中的表,它看起来很简单,可以付诸实践,检查一下:

    它被称为 schema_version(或迁移,或任何适合您的),其目的是跟踪数据库的结构或数据更改。一个可能的结构(MySQL 中的示例)是:

    create table schema_version (
         `when` timestamp not null default CURRENT_TIMESTAMP,
         `key` varchar(256) not null,
         `extra` varchar(256),
         primary key (`key`)
    ) ENGINE=InnoDB;
    

    插入 schema_version( key, extra) 值('001', 'schema version');

    无论是在项目开始时添加此表,还是在将第一个版本部署到登台或生产服务器之后添加此表,都取决于您。

    每当您需要执行 SQL 脚本来更改数据库结构或执行数据迁移时,您也应该在该表中添加一行。并通过该脚本(提交到项目的代码存储库)的开头或结尾处的插入语句来执行此操作。

    …

    • 46
  2. Larry Smithmier
    2011-01-04T13:22:04+08:002011-01-04T13:22:04+08:00

    我认为最好的方法是将数据库作为构建过程的一部分生成。将所有脚本与其余代码一起保存在源代码控制中,每个人都对自己的环境负责。

    如果做不到这一点,RedGate 有一个工具可以将源代码控制集成到 SSMS中,而SQL Compare可用于比较/同步 MS SQL Server 模式。Visual Studio 数据库版还有一个内置的架构比较工具。

    另一个SO 问题将我引向Migrator Dot Net,我将在我丰富的空闲时间开始调查。这看起来是一个不错的方法,但它可能比你愿意做的更多的时间/开销投资。

    • 24
  3. TML
    2011-01-05T23:05:53+08:002011-01-05T23:05:53+08:00

    eiefa 已经提到了一个表,应该存在于所有项目中的数据库中。这是一篇很棒的博客文章,但在 IMO 中,它只是实现数据库修订控制工作解决方案的一部分。我认为在现实世界中“回答”这个问题的任何尝试都需要考虑有关 VCS 和数据库的其他一些信息:

    • 敏捷数据方法论
    • 《数据库重构》一书
    • Martin Fowler 关于“进化数据库设计”的文章
    • Liquibase 工具
    • Scott Ambler 的精彩视频展示了他对“敏捷数据库”的看法
    • 12
  4. D. Lambert
    2011-01-04T13:21:58+08:002011-01-04T13:21:58+08:00

    我认为有几个不同的角度来处理这个问题。我相信,“工具优先”的角度会因平台和个人喜好而异。恰当的例子:我在 MS Visual Studio 中使用了一个数据库项目,但我不确定这是否是 MySQL 的一个很好的解决方案。我还认识一些人,他们非常喜欢 Redgate、Erwin、Embarcadero 等他们最喜欢的工具。

    这个问题还有一个“流程优先”的角度,将(希望)在后续问题中在此站点上重新讨论。此过程的关键是让您的架构处于源代码控制之下并管理更改,以便您可以根据需要应用从版本“x”到版本“y”的架构更改。

    这个主题的明确答案最终看起来像一本书,所以它可能值得从参考一本书开始:Redgate 最近出版了一本名为“ The Red Gate Guide to SQL Server Team-based Development ”的免费电子书,虽然有那里有很多要辩论的地方,这是一个开始辩论的好地方,IMO。与名称相反,本书中的大部分材料都足以适用于任何数据库(不仅仅是 SQL Server)和任何工具集(不仅仅是 Redgate)。如果你还没有看过这个,至少它绝对值得一读。

    最后,可能值得在stackoverflow 的“遗留答案”中链接。

    • 8
  5. Sualeh Fatehi
    2011-02-07T17:59:52+08:002011-02-07T17:59:52+08:00

    SchemaCrawler是我用来生成包含所有数据库模式对象的文本文件的工具。我将此文本输出设计为人类可读的,并且可以与来自另一台服务器的类似输出进行比较。

    在实践中,我发现在构建过程中输出数据库模式的文本文件很有用。通过这种方式,您可以将文本文件签入源代码控制系统,并了解架构如何随时间演变的版本历史。SchemaCrawler 也被设计为从命令行自动执行此操作。

    • 5

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve