14

我目前正在为我们的数据库创建一个主 ddl。从历史上看,我们使用备份/恢复来对我们的数据库进行版本控制,并且没有维护任何 ddl 脚本。架构非常大。

我目前的想法:

  • 将脚本分成几部分(可能在单独的脚本中):

    1. 表创建
    2. 添加索引
    3. 添加触发器
    4. 添加约束
  • 每个脚本都会被主脚本调用。

  • 我可能需要一个脚本来临时删除约束以进行测试
  • 架构中可能存在孤立表,我计划识别可疑表。

还有什么建议吗?

编辑:另外,如果有人知道自动化部分过程的好工具,我们正在使用 MS SQL 2000(旧的,我知道)。

4

7 回答 7

5

我认为基本的想法是好的。

首先构建所有表然后构建所有约束的好处是可以按任何顺序创建表。完成此操作后,每个表都有一个文件,我将其放入名为“Tables”的目录中,然后是执行该目录中所有文件的脚本。同样,我有一个用于约束脚本的文件夹(其中也包含外键和索引),这些脚本在构建表后执行。

我会将触发器和存储过程的构建分开,然后最后运行它们。关于这些的要点是它们可以在数据库上运行和重新运行而不会影响数据。这意味着您可以像对待普通代码一样对待它们。您应该在每个触发器和过程脚本的开头包含“if exists...drop”语句,以使它们可重新运行。

所以顺序是

  1. 表创建
  2. 添加索引
  3. 添加约束

然后

  1. 添加触发器
  2. 添加存储过程

在我当前的项目中,我们使用 MSBuild 来运行脚本。您可以获得一些扩展目标,允许您调用 sql 脚本。过去我使用过 perl,这也很好(还有批处理文件……我不推荐 - 太有限了)。

于 2008-09-11T17:13:21.030 回答
1

你那里的东西似乎很不错。对于足够大的数据库,我的公司有时会将其进一步细分,可能会细分到单个对象级别。这样每个表/索引/...都有自己的文件。可能有用,也可能矫枉过正。真的取决于你如何使用它。

@贾斯汀

按领域通常就足够了。我同意这样做有一些复杂性需要处理,但这应该很容易处理。

我认为这种方法提供了更多的分离(在大型数据库中你会喜欢它),同时仍然使自己非常易于管理。我们还编写了对这些 DDL 文件进行大量处理的 Perl 脚本,因此这可能是一种很好的处理方式。

于 2008-08-07T17:24:49.280 回答
1

there is a neat tools that will iterate through the entire sql server and extract all the table, view, stored proceedures and UDF defintions to the local file system as SQL scripts (Text Files). I have used this with 2005 and 2008, not sure how it wil work with 2000 though. Check out http://www.antipodeansoftware.com/Home/Products

于 2010-08-29T06:50:55.410 回答
1

如果您正在寻找自动化工具,我经常使用 EMS SQLManager,它允许您从数据库自动生成 ddl 脚本。

在将数据库上线之前,可能必须在引用表中插入数据。这甚至可以被视为 ddl 脚本的一部分。EMS 还可以为现有数据库中的数据插入生成脚本。

在 ddl 阶段可能无法正确估计对索引的需求。您只需要为主键/外键声明它们。定义视图和查询后,应稍后创建其他索引

于 2008-09-16T19:48:30.367 回答
1

花时间编写一个通用的“删除所有约束”脚本,这样您就不必维护它。

将光标悬停在以下语句上就可以了。

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints
于 2008-08-07T17:25:28.590 回答
1

@亚当

或者仅按域如何——在同一个文件中对相关表进行有用的分组,但与其他表分开?

唯一的问题是某些域(在这个有些遗留系统中)是否紧密耦合。另外,您必须维护不同子脚本之间的依赖关系。

于 2008-08-07T17:31:00.953 回答
0

我之前将我的 DDL 代码组织为每个实体一个文件,并制作了一个将其组合成单个 DDL 脚本的工具。

我的前雇主使用了一种方案,其中所有表 DDL 都在一个文件中(以 oracle 语法存储),索引在另一个文件中,约束在第三个文件中,静态数据在第四个文件中。更改脚本与此并行保存(同样在 Oracle 中)。到 SQL 的转换是手动的。这是一团糟。实际上,我编写了一个方便的工具,可以将 Oracle DDL 转换为 SQL Server(它在 99.9% 的时间里都能正常工作)。

我最近转而使用Visual Studio Team System for Database Professional。到目前为止它工作正常,但是如果您在数据库中使用 CLR 函数,则会出现一些故障。

于 2008-08-19T06:19:37.910 回答