【问题标题】:SQL Server relationships buried in stored procedures rather than schemaSQL Server 关系隐藏在存储过程而不是架构中
【发布时间】:2009-12-03 23:31:29
【问题描述】:

目前,我们几乎没有参照完整性,并且有许多自连接的表(实际上可能更好地表示为连接的单独表或视图)。

这些表如何相互关联的知识隐含在存储过程的逻辑中,而不是明确的模式中。我们正在考虑改变这一点。

第一步是真正理解隐含的关系并记录它们。

所以我的问题是......

什么是提取隐含信息的最佳方法,而不是关注每个存储过程。我会考虑任何工具,编写我自己的 SQL 来查询系统表,或者使用 SQL-DMO 模型——或者实际上任何可以让计算机做更多工作而我做更少工作的工具。

【问题讨论】:

    标签: sql-server stored-procedures referential-integrity


    【解决方案1】:

    如果关系仅通过 SP 中的连接来识别,那么自动化它不会有很大的运气。

    使用分析器捕获查询以首先找到最频繁的连接可能是值得的。

    【讨论】:

      【解决方案2】:

      说到重构,我是老派:

      1. 记录你拥有的东西,使用可视化工具。
      2. 以书面形式描述该数据库捕获的业务模型。
      3. 从描述名词和现有架构中挑选出实体。
      4. 创建一个新的 ER 模型;在此期间咨询业务。
      5. 基于 ER 创建新数据库
      6. ETL 数据转移到新数据库并进行测试。

      【讨论】:

        【解决方案3】:

        您可以使用sys.sql_dependencies 找出 SP 所依赖的列和表(如果您不在您的 SP 中使用SELECT * 会有所帮助)。这将帮助您至少获得候选人清单:

        referenced_major_id == the OBJECT_ID of the table
        referenced_minor_id == the column id: COLUMNPROPERTY(referenced_major_id,
                                                               COLUMN_NAME,
                                                               'ColumnId')
        

        您可能必须使用sp_refreshsqlmodule 来确保依赖项是最新的以使其正常工作。即,如果您更改视图,则需要在每个非模式绑定模块上 sp_refreshsqlmodule (显然,模式绑定模块首先不允许任何底层更改更改 - 但如果您调用 @ 987654326@ 依赖于该视图的模式绑定对象。您可以通过在这些对象上调用 sp_refreshsqlmodule 来自动执行此操作:

        SELECT *
        FROM    INFORMATION_SCHEMA.ROUTINES
        WHERE   OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.'
                                         + QUOTENAME(ROUTINE_NAME)),
                               N'IsSchemaBound') IS NULL
                OR OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.'
                                            + QUOTENAME(ROUTINE_NAME)),
                                  N'IsSchemaBound') = 0
        

        【讨论】:

          猜你喜欢
          • 2012-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多