如何存储/组织DDL脚本?

时间:2012-12-20 06:00:02

标签: sql ddl organization

首先,我在云端使用MySQL(Amazon RDS)。我的数据库定义脚本具有用于创建视图,触发器,存储过程,用户,向用户授予权限以及插入一些数据(例如查找表)等的语句。此脚本具有2000行SQL代码。我将此脚本保存在一个文件中并使用以下命令执行:mysql --user = myusername --password = mypassword<< my.script.sql。该文件受SVN保护。

将所有SQL代码放在一个文件中的问题是,很难看到只有一个项目的SVN历史记录(假设我想查看表任务和视图TaskView的SVN历史记录)....所以我的问题是:人们如何存储这样的脚本?专业人员是否将每个项目(表,视图,存储过程)存储在目录中的自己的文件中?如果是这样,必须制作一个脚本,在文件夹中部署所有迷你SQL脚本?人们只是创建一个脚本来查找每个.SQL文件并将其转储到数据库中吗?人们使用各种文件夹来组织这样的脚本吗?例如,一个用于视图的文件夹,一个用于表的文件夹,一个用于存储过程的文件夹?

干杯!

1 个答案:

答案 0 :(得分:1)

我们有以下文件夹结构

+ddl
....group1_ddl.sql
....group2_ddl.sql
+procedures
---level1
......single_sp.sql
......another_sp.sql
---level2
......another_uses_level1_sp.sql
---leveln
......remaining_sp.sql
+views
--level1
......group_of_views.sql

如您所见,我们有3个顶级文件夹,分别用于ddl,sps和views

<强> DDL

90%的时间我们为所有表都有一个ddl脚本 有时我们分别维护ddl脚本,这些脚本可以逻辑分离 例如:staging_ddl.sql,aggrigate_ddl.sql ddl脚本包括PK和FK constriants以及附加的indeces

存储过程

  1. 注意多个文件夹(level1,level2),因为我们的整个ETL &安培;业务是在存储过程中实现的,所以我们有很多sps (几十个)有数百行代码。既然我们写的是模块化的 编码我们有一些sps取决于其他sps。所以sps哪个 依赖于其他sps进入更高水平

    例如:在我们的场景中,main_sp.sql是一个运行整个工作流程的sp,这个sp实习生按顺序调用其余的sps,他们的实习生可能会或可能不会调用其他sps

  2. 所以main_sp.sql转到level3,child_sp.sql转到level2, grand_child_sp.sql转到level1

  3. 文件名与sp name
  4. 相同

    <强>查看:

    1. 如果您的观点不那么复杂,您认为可以轻松维护 您可以在一个脚本中管理它们。
    2. 但在我们的案例中,他们是一些近2000多行的观点 我们在每个视图中将它们保存在一个脚本中。
    3. 我们主要尝试避免在另一个视图中使用视图,以防我们这样做 然后我们维持如上所述的多级层次结构 否则我们维护每个视图的单个脚本
    4. 文件名与视图名称相同
    5. 这是我7年来成功管理脚本的方式。

      希望这有帮助