eie*_*fai 45
就在几分钟前,我正在检查这个:一个应该存在于所有带有数据库的项目中的表,看起来很简单,可以付诸实践,检查一下:
它被称为 schema_version(或迁移,或任何适合您的),其目的是跟踪数据库的结构或数据更改。一个可能的结构(在 MySQL 中的例子)是:
Run Code Online (Sandbox Code Playgroud)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 脚本来更改数据库结构或执行数据迁移时,您还应该在该表中添加一行。并通过在该脚本(已提交到项目的代码存储库)的开头或结尾处的插入语句来执行此操作。
…
小智 23
我认为最好的方法是在构建过程中生成数据库。将所有脚本与其余代码保持在源代码控制中,每个人都对自己的环境负责。
如果做不到这一点,RedGate 有一个工具可以将源代码控制集成到 SSMS 中,而SQL 比较对于比较/同步 MS SQL Server 架构非常有用。Visual Studio 数据库版还有一个内置的架构比较工具。
另一个SO 问题将我引向Migrator Dot Net,我将在我大量的空闲时间开始对其进行调查。这看起来是一个很好的方法,但它可能比您愿意做的更多的时间/开销投资。
TML*_*TML 12
eiefai 已经提到了一个应该存在于所有带有数据库的项目中的表。这是一篇很棒的博客文章,但 IMO 它只是数据库修订控制工作解决方案的一部分。我认为任何在现实世界中“回答”这个问题的尝试都需要考虑一些关于 VCS 和数据库的其他信息:
我认为有几个不同的角度来解决这个问题。我相信,“工具至上”的角度会因平台和个人喜好而异。举个例子:我在 MS Visual Studio 中使用了一个数据库项目,但我不确定这是否是 MySQL 的一个很好的解决方案。我也认识一些人,他们非常喜欢 Redgate、Erwin、Embarcadero 等公司的工具。
这个问题还有一个“过程优先”的角度,(希望)在本网站的后续问题中重新讨论。此过程中的关键是让您的架构处于源代码控制之下并管理更改,以便您几乎可以按需应用从版本“x”到版本“y”的架构更改。
这个主题的最终答案最终看起来像一本书,所以它可能值得从参考开始:Redgate 最近出版了一本免费的电子书,名为“基于 SQL Server 团队开发的红门指南”,虽然有有很多值得辩论的地方,这是一个开始辩论的好地方,IMO。与名称相反,本书中的大部分材料都足以适用于任何数据库(不仅仅是 SQL Server)和任何工具集(不仅仅是 Redgate)。如果你还没有看过这个,至少值得一读。
最后,可能值得链接stackoverflow 的“遗留答案”。
小智 5
SchemaCrawler是我的工具,用于生成包含所有数据库架构对象的文本文件。我将此文本输出设计为人类可读的,并且可以与来自另一台服务器的类似输出进行比较。
在实践中,我发现输出数据库模式的文本文件是有用的,当作为构建的一部分完成时。通过这种方式,您可以将文本文件签入源代码控制系统,并获得关于您的架构如何随时间演变的版本历史记录。SchemaCrawler 也旨在从命令行自动执行此操作。
| 归档时间: |
|
| 查看次数: |
11292 次 |
| 最近记录: |