0

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

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

干杯!

4

1 回答 1

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 和视图

DDL

90% 的时间我们为所有表都有一个 ddl 脚本有时我们会单独维护 ddl 脚本,这些脚本可以在逻辑上分开,例如:staging_ddl.sql、agrigate_ddl.sql ddl 脚本包括 PK 和 FK 约束以及其他指标

存储过程

  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 名称相同

意见:

  1. 如果您的视图不那么复杂并且您认为可以轻松维护,您可以在单个脚本中管理它们。
  2. 但在我们的例子中,它们是一些具有近 2000 行的视图,因此我们将它们维护在每个视图的一个脚本中。
  3. 大多数情况下,我们会尽量避免在另一个视图中使用一个视图,如果我们这样做了,那么我们会维护如上所述的多层次层次结构,否则我们会为每个视图维护一个脚本
  4. 文件名与视图名相同

这就是我 7 年多以来成功管理脚本的方式。

希望这可以帮助

于 2012-12-20T06:34:49.337 回答