【问题标题】:The purpose of Visual Studio Database projectVisual Studio 数据库项目的目的
【发布时间】:2020-03-03 16:05:21
【问题描述】:

我有几个关于工作流程的问题。 最近我进入了一个涉及很多数据库活动的新项目。我们的存储库之一是 Visual Studio 数据库项目,其中包含所有存储过程、函数等。我们不会将它用于 CI,比如 Azure。据我了解,我们手动发布所有内容。 问题是:

1) Visual Studio 数据库项目的目的到底是什么?你能给我一些关于它的观点吗?

2) 在开发过程中,我应该在 SSMS 或 Visual Studio db 项目中调试和运行所有 sql 代码吗?

3) 其中“发布”和“构建”功能的目的是什么?他们是否能够破坏现有数据库中的某些内容?如何、为什么以及何时安全使用它们?

非常感谢您提供与此主题相关的任何教程、视频和最佳实践。

【问题讨论】:

    标签: sql-server visual-studio visual-studio-2019


    【解决方案1】:

    我喜欢❤这个项目类型。

    数据库项目为您提供了几样东西:

    1. 它将您的架构置于源代码控制中
    2. 它允许您验证您的架构
    3. 它提供跨对象的语义重命名
    4. 它与 Azure DevOps 管道集成
    5. 它允许您部署增量更新
    6. 它允许您编写前/后操作脚本
    7. 它可以轻松部署您的数据库的开发/阶段版本

    使用它是个好主意吗?

    是的。我认为它应该是每个 SQL Server 项目的一部分。

    我遇到的问题:

    1. VS for Mac 不支持它

    我在 Visual Studio 2019 中使用它。

    【讨论】:

    【解决方案2】:

    这是 SQL Server 数据工具 (SSDT)。如果您在谷歌上搜索该短语,您会发现数十个网站详细讨论了它。我没有首选的网站——当我试图弄清楚一些事情时,我阅读了几个网站以获得对事物的“综合”视图。

    关键是,SSDT 提供的是一种基于状态的部署方法,而不是更熟悉的基于迁移的方法。 “基于状态与基于迁移”对 Google 来说是另一个好词——所有这些网站都比我在这里做得更好。

    Build 大致类似于“将代码编译”,例如语法是否良好,或者您是否引用了不存在的表、列、过程。由于它在 Visual Studio 中进行管理,因此跟踪和修复这些错误非常容易。好吧,至少要追踪他们。

    Publish 本质上是“获取本项目代码中定义的数据库,将其与目标数据库进行比较,并使该数据库看起来像我们在代码中所拥有的那样”。您输入(表、过程等)定义,SSDT 将为您编写所有必要的 CREATE、ALTER 和 DROP 语句。是的,如果有数据,就会有很多问题,有各种变通方法来处理它,但您不必确保以正确的顺序处理您五年的脚本。

    【讨论】:

      【解决方案3】:

      1) Visual Studio 数据库项目的目的到底是什么?你能给我 关于它的一些观点?

      在当前状态下,它有利于跟踪数据库并查看更改。它缺少很多在较大场景中正确生成增量脚本的功能(redgate 有一个基于此构建的产品)。我们使用它来记录数据库状态 - 这可以方便地查看某些数据库与特定分支中记录的状态的不同程度。

      我们使用另一种机制来生成更改脚本。

      2) 我应该在 SSMS 或 Visual Studio db 项目中调试和运行所有 sql 代码吗? 开发过程?

      啊,我们有一个非常广泛的集成测试套件,它来自 API 并执行大量后端 SQL - 为我们涵盖了它。无需花费数天时间在每次部署中测试所有 SQL。

      3) 其中“发布”和“构建”功能的目的是什么?

      如果你发现了告诉我。我发现它们的实现是半生不熟的。但是我们有时会做复杂的大型数据库——这不仅仅是改变数据库结构,而是以一种特定的方式来转换数据,然后将其插入到改变的数据库中。

      我有时发现数据库项目可以部署一个包含静态数据的新数据库 - 但是,无论如何,我们经常使用我们的更改脚本来做到这一点。

      恕我直言,这确实是一个深思熟虑的尝试,特别是与 https://www.red-gate.com/products/sql-development/sql-change-automation/ 相比,缺少多步更改等使其对我们的用例没有真正的用处。

      MS 定期执行此操作 - 即您在 EntityFramework 中也有数据库迁移(我们也不使用)。不同产品的多种方法。

      【讨论】:

      • 所以最好问问我的队友?我只是想知道这听起来是否像愚蠢的问题。
      • 不,这更像是 Visual Studio 中使用最少的部分。在管理数据库模式的所有替代方法和它的内部限制之间,我还必须看到有人实际使用它而不是文档(即,将 db 模式签入源代码控制)。看看你在这里得到了多少答案;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多