|
|
1
54
以下是对您的问题的一些回答:
|
|
|
2
5
如果可能的话,我会将SQL视为源代码 如果我能用英文写的话 然后,它通常放在我的源代码管理中的一个文件中。该文件将尽可能多地定义SPs、Table CREATE语句等。 我还包括源代码管理中测试的虚拟数据:
然后我提取出所有的SQL查询,以便为MySQL、Oracle、MSSQL或其他任何东西构建整个项目。 它们与应用程序源一样重要 并测试从完整性到触发器、过程和日志记录的所有内容。 |
|
|
3
4
我们通过TeamCity进行持续集成。在每次签入源代码管理时,数据库和所有测试数据都会从头开始重新构建,然后是代码,然后针对代码运行单元测试。如果您使用的是CodeSmith之类的代码生成工具,还可以将其放入构建过程中,以生成每个构建的新数据访问层,确保所有层“匹配”,并且不会因SP参数不匹配或缺少列而产生错误。 每个构建都有自己的SQL脚本集合,这些脚本存储在源代码管理中的$project\SQL\目录中,分配了一个数字前缀并按顺序执行。这样,我们在每次构建时都在练习部署过程。 根据查找表的不同,我们的大多数查找值也存储在脚本中,并运行以确保配置数据符合我们的预期,例如“原因代码”或“国家代码”。通过这种方式,我们可以在dev中更改查找数据,对其进行测试,然后通过QA和生产“升级”,而不是在生产中使用工具修改查找值,这可能会对正常运行时间造成危险。 我们还创建了一组“回滚”脚本,这些脚本可以撤消数据库更改,以防生产构建出错。您可以通过运行回滚脚本来测试回滚脚本,然后在部署脚本运行后,为您的构建版本下的构建版本重新运行单元测试。 |
|
|
4
4
+1为 液化 LiquiBase 好的一点是,DML更改是以语义存储的,而不仅仅是diff,这样您就可以跟踪更改的目的。 GIT 版本控制以实现更好的交互。我将配置我们的dev-prod环境来进行尝试。 你也可以用 马文,蚂蚁 构建用于从脚本生成生产代码的系统。 缺点是LiquiBase不能集成到广泛使用的SQLIDE中,您应该自己完成基本操作。 DBUnit 对于DB测试-此工具允许使用数据生成脚本使用cleanup Afterwards测试生产环境。 IMHO:
我们在计费产品数据库中遇到了所有提到的代码更改、合并和重写问题。这个主题对于发现所有这些东西都很有帮助。 |
|
|
5
3
agileDatabases 已经解决了许多这些问题,并且以我的经验来看,它是一个进行此类讨论的成熟和民间论坛。 |
|
|
6
3
我基本上同意他给出的每一个答案 van . 为了更深入地了解,我的数据库管理基线是 K. Scott Allen series (a)必须阅读,IMHO.和 Jeff's opinion 似乎也是如此)。
依我拙见 数据加载需要另一个步骤,具体取决于您的环境。开发人员希望用测试数据、垃圾数据或根本没有数据加载他们的数据库,而在另一端,生产经理希望加载生产数据。我会考虑在源代码管理中存储测试数据(例如,简化单元测试)。 数据库的第一个版本投入生产后,您不仅需要构建脚本(主要针对开发人员),还需要升级脚本(基于相同的原则):
这方面的问题有:
您希望在源代码管理下拥有什么样的数据库对象?好吧,我会说尽可能多,但不要更多;-)如果要创建具有密码的用户,请为他们获取默认密码(登录/登录,适用于单元测试目的),并将密码更改设置为手动操作。这在Oracle中经常发生,其中模式也是用户。。。 |
|
|
7
1
我们的Silverlight项目在Git版本控制中使用MSSQL数据库。最简单的方法是确保您有一个精简的数据库(内容方面),并执行以下操作: 完成 对于部署来说,这是不可能的,因为数据库太大:这是将它们放在数据库中的首要原因。 |
|
|
8
1
我坚信DB应该是源代码控制的一部分,并且在很大程度上是构建过程的一部分。如果是在源代码管理中,那么在用SQL编写存储过程时,我有与用C#编写类时相同的编码安全保护。我通过在源代码树下包含一个DB脚本目录来实现这一点。对于数据库中的一个对象,此脚本目录不一定有一个文件。那将是一件痛苦的事!我在数据库中开发,就像在代码项目中开发一样。然后,当我准备好签入时,我会在数据库的最后一个版本和我正在处理的当前版本之间进行差异。我使用SQL Compare,它会生成一个包含所有更改的脚本。然后,使用特定的命名约定将此脚本保存到my db_update目录1234_Tasks CompletedInthisIteration,其中编号是已存在的脚本集中的下一个编号,该名称描述了此签入中正在执行的操作。我这样做是因为作为构建过程的一部分,我从一个新的数据库开始,然后使用此目录中的脚本以编程方式构建该数据库。我编写了一个自定义NAnt任务,该任务遍历在裸数据库上执行其内容的每个脚本。显然,如果我需要一些数据进入数据库,那么我也有数据插入脚本。这也有很多好处。第一,我所有的东西都有版本。第二,每个构建都是一个新的构建,这意味着不会有任何偷偷摸摸的东西进入我的开发过程(比如导致系统异常的脏数据)。第三,当一个新成员加入到开发团队时,他们只需要获得最新的,并且他们的本地开发是为他们动态构建的。第四,我可以在我的数据库上运行测试用例(我没有称之为“单元测试”!),因为每次构建都会重置数据库的状态(这意味着我可以测试我的存储库,而不用担心将测试数据添加到数据库中)。 这不适合所有人。 这并非适用于所有项目。我通常在绿地项目上工作,这让我很方便! |
|
|
9
1
这里有一个在现实世界问题上对我非常有效的解决方案,而不是陷入白塔争论。 从头开始构建数据库可以概括为管理sql脚本。 数据库部署 是一种检查数据库当前状态的工具,例如,以前针对数据库运行过哪些脚本,可以运行哪些脚本,因此需要运行哪些脚本。 然后,它将整理所有需要的脚本并运行它们。然后记录已运行的脚本。 它不是最漂亮的工具,也不是最复杂的工具,但如果管理得当,它可以很好地工作。它是开源的,易于扩展。一旦脚本的运行得到了很好的处理,添加一些额外的组件(比如一个shell脚本)就很容易实现了,该脚本可以签出最新的脚本并针对特定实例运行dbdeploy。 这里有一个很好的介绍: |
|
|
10
0
你可能会发现 Liquibase 处理很多你想要的东西。 |
|
|
11
0
每个开发人员都应该有自己的本地数据库,并使用源代码控制向团队发布。我的解决方案是: http://dbsourcetools.codeplex.com/ 玩得高兴 -内森 |
|
|
Jordan · 使用git初始化GitHub存储库的版本控制 2 年前 |
|
|
Viermusketiere · 嵌入式系统开发中如何进行版本控制 2 年前 |
|
|
Luke · 如何使用subversion管理生产/测试/开发配置信息? 17 年前 |
|
|
Carson Myers · 尝试开始使用git 17 年前 |
|
|
betitall · 如何对跨项目共享的资源进行版本控制 17 年前 |