sql - 编写用于部署的 SQL 脚本的最佳实践

标签 sql database database-design scripting

我想知道编写 SQL 脚本以设置用于生产和/或开发的数据库的最佳实践是什么,例如:

  • 我应该包含 CREATE DATABASE 语句吗?
  • 我应该在同一个脚本中为数据库创建用户吗?
  • 在执行脚本主体之前禁用 FK 检查是否正确?
  • 我可以在交易中包含 hole 脚本吗?
  • 为每个数据库生成 1 个脚本比为所有数据库生成一个脚本更好吗?

谢谢!

最佳答案

你的问题很难回答,因为它取决于脚本在你试图实现的目标中的使用方式。你也不要说你正在使用哪个数据库服务器,因为提供的工具可以使一些任务更容易。

按照您的观点,这里有一些建议,这些建议可能与其他人的建议大不相同:)

  • 我应该包括 CREATE DATABASE 声明?

您打算使用什么替代方案?如果您的问题是您是否应该将 CREATE DATABASE 语句放在与它所依赖的表创建相同的脚本中。开发数据库时,我使用单独的创建数据库脚本,因为我有一个脚本可以删除所有对象,因此我不需要再次创建数据库。

  • 我应该在同一个脚本中为数据库创建用户吗?

我不会,因为用户很可能会改变,但您的架构没有。不妨在较小的脚本中管理这些更改。

  • 在执行脚本主体之前禁用 FK 检查是否正确?

如果您正在导入数据以尝试恢复数据库,那么如果您正在使用自动递增 ID 并希望保持相同的值,那么您可能不得不这样做。此外,您最终可能会“乱序”导入表,并且不想执行检查。

  • 我可以在交易中包含整个脚本吗?

是的,您可以,但这同样取决于您运行的脚本类型。如果您在重建数据库后导入数据,那么整个导入应该成功或失败。但是,您的交易文件在导入过程中会很大。

  • 为每个数据库生成 1 个脚本比为所有数据库生成一个脚本更好吗?

同样,出于维护目的,最好将它们分开。

关于sql - 编写用于部署的 SQL 脚本的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717889/

相关文章:

sql - PL/SQL 存储过程是事务吗?

MySQL - 如何将此表减少到总成本?

programming-languages - 如何将 PHP 连接到 SQL Server?

sql - 将日期与 Oracle 中的 current_date 进行比较

c - 错误: Define not done before fetch or execute and fetch

ruby-on-rails - 销售点和库存数据库架构

mysql - 如何将营业时间存储在数据库中以便在打开时能够进行搜索?

mysql - SQL - 现在()+ 10 天

mysql - sql 从表中选择没有出现在第二个表中的所有内容

php - 无法从多页表单输入数据