2008-08-07 51 views
11

我目前正在为我们的数据库创建一个主ddl。从历史上看,我们使用备份/恢复来修改我们的数据库,而不是维护任何ddl脚本。该模式非常大。我应该如何组织我的主ddl脚本

我目前的想法:

  • 歇脚本分成部分(可能在单独的脚本):

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

  • 我可能需要一个脚本临时放弃测试约束
  • 模式中可能存在孤立的表,我计划识别可疑表。

其他建议?

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

回答

1

你有什么似乎很不错。我的公司有时候为了获得足够大的数据库,将其分解得更远,甚至可能会将其分解为单个对象级别。这样每个表/索引/ ...都有它自己的文件。可以是有用的,可以矫枉过正。真的取决于你如何使用它。

@Justin

通过域名大多是永远不够的。我同意这样做时需要处理一些复杂问题,但这应该很容易处理。

我认为这种方法提供了更多的分离(在一个大型数据库中,您将欣赏到),同时仍然使其本身非常易于管理。我们也编写了Perl脚本来处理这些DDL文件,所以这可能是一个处理这个问题的好方法。

1

投入时间编写一个通用的“删除所有约束”脚本,因此您不必维护它。

以下语句的游标可以解决这个问题。

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints 
1

@Adam

或者怎么样只是域 - 相关的表在同一文件中有用的分组,但独立于其他人呢?

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

0

我以前组织过每个实体组织一个文件的DDL代码,并将其组合成一个DDL脚本。

我的前雇主使用了一种方案,其中所有表DDL在一个文件中(存储在oracle语法中),在另一个文件中指示,第三个中的约束和第四个中的静态数据。这个变更脚本与Oracle保持并行(再次在Oracle中)。转换为SQL是手动的。这是一团糟。我实际上编写了一个方便的工具,将Oracle DDL转换为SQL Server(它的工作时间为99.9%)。

我最近切换到使用Visual Studio Team System for Database professionals。到目前为止,它工作正常,但如果你在数据库中使用CLR函数有一些小故障。

3

我认为基本的想法很好。

关于先构建所有表然后再构建所有约束的好处是可以按任意顺序创建表。当我完成这个操作时,每个表格都有一个文件,我把它放在一个名为“Tables”的目录中,然后是一个执行该目录中所有文件的脚本。同样,我也有一个用于约束脚本的文件夹(它们也执行外键和索引),这些脚本在构建表之后执行。

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

所以顺序将是

  1. 表生成
  2. 添加索引
  3. 添加约束

然后

  • 附加触发
  • add stored pr Ocedures
  • 在我目前的项目中,我们使用MSBuild来运行脚本。有一些extension targets,你可以得到它,它允许你调用SQL脚本。在过去,我使用的perl也很好(还有批处理文件......我不会推荐 - 这太有限了)。

    +0

    我也有一个类似的环境,我使用MSBuild来控制脚本执行。它还允许我在适当的地方包含数据加载脚本。例如,我可以将样本数据加载到数据库的测试或演示副本中。 – bobs 2010-07-21 04:59:58

    1

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

    将数据库插入参考表可能是强制性的,然后再将数据库放到线上。这甚至可以被认为是ddl脚本的一部分。 EMS还可以生成用于从现有数据库插入数据的脚本。

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

    1

    有一个整洁的工具,它将遍历整个sql服务器并将所有表,视图,存储过程和UDF定义提取到本地文件系统SQL脚本(文本文件)。我曾在2005年和2008年使用过这个,不知道它如何在2000年工作。退房http://www.antipodeansoftware.com/Home/Products

    相关问题