数据库架构探索与DDL搜索全攻略

立即解锁
发布时间: 2025-08-30 01:40:30 阅读量: 13 订阅数: 12 AIGC
### 数据库架构探索与DDL搜索全攻略 #### 1. 数据库对象依赖查询 在进行代码重构并确保系统稳定运行时,确定数据库对象的依赖链至关重要。当考虑重命名数据库中的对象、更改表中的列、移动模块或替换数据类型时,都需要了解这些依赖关系。 然而,从元数据中获取的依赖信息并不十分可靠。一方面,应用程序中使用的一些实体可能包含依赖调用者的引用或单部分名称引用(如未指定架构),这会导致引用实体的绑定依赖于调用者的架构,只有在代码运行时才能确定引用。另一方面,如果代码存储在字符串中并执行,代码引用的实体无法记录在元数据中。 若要检查例程(非架构绑定的存储过程、用户定义函数、视图、DML触发器、数据库级DDL触发器或服务器级DDL触发器)的依赖关系,可以更新其元数据。因为这些对象的元数据(如参数的数据类型)可能会因底层对象的更改而过时。可以使用`sys.sp_refreshsqlmodule`来更新元数据,示例如下: ```sql sys.sp_refreshsqlmodule 'dbo.ufnGetContactInformation' ``` 需要注意的是,从元数据查询中获取的信息要谨慎对待。若想采用更可靠的方法,可以考虑使用Red Gate的SQL Dependency Tracker工具。 #### 2. 查找最接近的关系 使用SQL Server 2005的目录视图`sys.sql_dependencies`,通过以下查询的变体可以轻松获取引用特定对象的对象列表以及被对象引用的对象列表: ```sql --List all the dependencies in the database. --Normally you'll have a WHERE clause to pick just the object you want. SELECT Object_Schema_name(object_id) + '.' + COALESCE(OBJECT_NAME(object_id), 'unknown') + COALESCE('.' + COL_NAME(object_id, column_id), '') AS [referencer] , Object_Schema_name(referenced_major_id) + '.' + OBJECT_NAME(referenced_major_id) + COALESCE('.' + COL_NAME(referenced_major_id, referenced_minor_id), '') AS [Referenced] FROM sys.sql_dependencies WHERE class IN ( 0, 1 ) – -AND referenced_major_id = OBJECT_ID('HumanResources.Employee') ORDER BY COALESCE(OBJECT_NAME(object_id), 'x') , COALESCE(COL_NAME(object_id, column_id), 'a') ``` #### 3. 查找依赖链 当更改对象的行为时,不仅需要知道要重构的对象的依赖对象,还需要了解这些依赖对象的依赖对象,以此类推,同时要注意相互依赖的情况。可以使用`DependencyChainOf`函数来获取依赖链,代码如下: ```sql CREATE FUNCTION DependencyChainOf ( @Object_Name SYSNAME ) /** summary: > The DependencyChainOf function takes as a parameter either a table, view, function or procedure name or a column name. It works best with the full object name of schema.object(.column). Returns a table that gives the dependency chain with both forward and backward links so that you can see what objects are likely to be affected by the changes you make, and what objects your object is referencing. Revisions: – version: 1 Modification: Created Table-valued function Author: Phil Factor Date: 01/03/2010 – version: 2 Modification: added catch for mutual dependency Author: Phil Factor Date: 02/03/2010 example: – code: Select distinct * from DependencyChainOf('VEmployee') order by The_level,TheName – code: EXEC sys.sp_refreshsqlmodule 'MyProc1' Select distinct * from DependencyChainOf('MyTable') order by The_level,TheName **/ RETURNS @Referenced TABLE ( TheName VARCHAR(200) , The_Object_ID BIGINT , Column_ID INT , Class INT , The_Level INT ) AS BEGIN --identify the object or column --get the referencing entity INSERT INTO @referenced ( The_Object_ID , Column_ID , Class , The_Level ) SELECT TOP 1 object_ID , Column_ID , class , 1 FROM ( SELECT Object_Schema_name(object_id) + '.' + COALESCE(OBJECT_NAME(object_id), 'unknown') + COALESCE('.' + COL_NAME(object_id, column_id), '') AS [name] , d.object_ID , d.column_ID , class FROM sys.sql_dependencies d ) names WHERE CHARINDEX(REVERSE(@Object_Name), REVERSE(names.name)) = 1 OR OBJECT_NAME([Object_ID]) = @Object_Name IF NOT EXISTS ( SELECT 1 FROM @referenced ) INSERT INTO @referenced ( The_Object_ID , Column_ID , Class , The_Level ) SELECT TOP 1 object_ID , Column_ID , class , 1 FROM ( SELECT Object_Schema_name(referenced_major_id) + '.' + OBJECT_NAME(referenced_major_id) + COALESCE('.' + COL_NAME(referenced_major_id, referenced_minor_id), '') AS [name] , d.Referenced_Major_ID AS [object_ID] , d.Referenced_Minor_ID AS [column_ID] , class FROM sys.sql_dependencies d ) names WHERE CHARINDEX(REVERSE(@Object_Name), REVERSE(names.name)) = 1 OR OBJECT_NAME([Object_ID]) = @Object_Name DECLARE @Currentlevel INT , @RowCount INT SELECT @Currentlevel = 1 , @Rowcount = 1 WHILE @Rowcount > 0 AND @currentLevel < 50--guard against mutual dependency BEGIN INSERT INTO @referenced ( The_Object_ID , Column_ID , Class , The_Level ) SELECT Referenced_Major_ID , Referenced_Minor_ID , d.class , The_Level + 1 FROM @referenced r INNER JOIN sys.sql_dependencies d ON The_Object_ID = object_ID – -AND r.column_ID=d.Column_ID AND r.class = d.Class AND @Currentlevel = The_Level SELECT @rowcount = @@Rowcount , @CurrentLevel = @CurrentLevel + 1 END SELECT @Currentlevel = 1 , @Rowcount = 1 WHILE @Rowcount > 0 AND @currentLevel > – 50--guard against mutual dependency BEGIN INSERT INTO @referenced ( The_Object_ID , Column_ID , Class , The_Level ) SELECT Object_ID , d.column_ID , d.class , The_Level – 1 ```
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

LI_李波

资深数据库专家
北理工计算机硕士,曾在一家全球领先的互联网巨头公司担任数据库工程师,负责设计、优化和维护公司核心数据库系统,在大规模数据处理和数据库系统架构设计方面颇有造诣。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

磁电六铁氧体薄膜的ATLAD沉积及其特性

# 磁电六铁氧体薄膜的ATLAD沉积及其特性 ## 1. 有序铁性材料的基本定义 有序铁性材料具有多种特性,不同特性的材料在结构和性能上存在显著差异。以下为您详细介绍: - **反铁磁性(Antiferromagnetic)**:在一个晶胞内,不同子晶格中的磁矩通过交换相互作用相互耦合,在尼尔温度以下,这些磁矩方向相反,净磁矩为零。例如磁性过渡金属氧化物、氯化物、稀土氯化物、稀土氢氧化物化合物、铬氧化物以及铁锰合金(FeMn)等。 - **亚铁磁性(Ferrimagnetic)**:同样以反铁磁交换耦合为主,但净磁矩不为零。像石榴石、尖晶石和六铁氧体都属于此类。其尼尔温度远高于室温。 - *

克里金插值与图像处理:原理、方法及应用

# 克里金插值与图像处理:原理、方法及应用 ## 克里金插值(Kriging) ### 普通点克里金插值原理 普通点克里金是最常用的克里金方法,用于将观测值插值到规则网格上。它通过对相邻点进行加权平均来估计未观测点的值,公式如下: $\hat{z}_{x_0} = \sum_{i=1}^{N} k_i \cdot z_{x_i}$ 其中,$k_i$ 是需要估计的权重,且满足权重之和等于 1,以保证估计无偏: $\sum_{i=1}^{N} k_i = 1$ 估计的期望(平均)误差必须为零,即: $E(\hat{z}_{x_0} - z_{x_0}) = 0$ 其中,$z_{x_0}$ 是真实

凸轮与从动件机构的分析与应用

# 凸轮与从动件机构的分析与应用 ## 1. 引言 凸轮与从动件机构在机械领域应用广泛,其运动和力学特性的分析对于机械设计至关重要。本文将详细介绍凸轮与从动件机构的运动学和力学分析方法,包括位置、速度、加速度的计算,以及力的分析,并通过 MATLAB 进行数值计算和模拟。 ## 2. 机构描述 考虑一个平面凸轮机构,如图 1 所示。驱动件为凸轮 1,它是一个圆盘(或板),其轮廓使从动件 2 产生特定运动。从动件在垂直于凸轮轴旋转轴的平面内运动,其接触端有一个半径为 $R_f$ 的半圆形区域,该半圆可用滚子代替。从动件与凸轮保持接触,半圆中心 C 必须沿着凸轮 1 的轮廓运动。在 C 点有两

MATLAB数值技术:拟合、微分与积分

# MATLAB数值技术:拟合、微分与积分 ## 1. MATLAB交互式拟合工具 ### 1.1 基本拟合工具 MATLAB提供了交互式绘图工具,无需使用命令窗口即可对绘图进行注释,还包含基本曲线拟合、更复杂的曲线拟合和统计工具。 要使用基本拟合工具,可按以下步骤操作: 1. 创建图形: ```matlab x = 0:5; y = [0,20,60,68,77,110]; plot(x,y,'o'); axis([−1,7,−20,120]); ``` 这些命令会生成一个包含示例数据的图形。 2. 激活曲线拟合工具:在图形窗口的菜单栏中选择“Tools” -> “Basic Fitti

可再生能源技术中的Simulink建模与应用

### 可再生能源技术中的Simulink建模与应用 #### 1. 电池放电特性模拟 在模拟电池放电特性时,我们可以按照以下步骤进行操作: 1. **定制受控电流源**:通过选择初始参数来定制受控电流源,如图18.79所示。将初始振幅、相位和频率都设为零,源类型选择交流(AC)。 2. **连接常数模块**:将一个常数模块连接到受控电流源的输入端口,并将其值定制为100。 3. **连接串联RLC分支**:并联连接一个串联RLC分支,将其配置为一个RL分支,电阻为10欧姆,电感为1 mH,如图18.80所示。 4. **连接总线选择器**:将总线选择器连接到电池的输出端口。从总线选择器的参

微纳流体对流与传热应用研究

### 微纳流体对流与传热应用研究 #### 1. 非线性非稳态对流研究 在大多数工业、科学和工程过程中,对流呈现非线性特征。它具有广泛的应用,如大表面积、电子迁移率和稳定性等方面,并且具备显著的电学、光学、材料、物理和化学性质。 研究聚焦于含Cattaneo - Christov热通量(CCHF)的石墨烯纳米颗粒悬浮的含尘辐射流体中的非线性非稳态对流。首先,借助常用的相似变换将现有的偏微分方程组(PDEs)转化为常微分方程组(ODEs)。随后,运用龙格 - 库塔法和打靶法对高度非线性的ODEs进行数值求解。通过图形展示了无量纲温度和速度分布的计算结果(φ = 0和φ = 0.05的情况)

自激感应发电机稳态分析与电压控制

### 自激感应发电机稳态分析与电压控制 #### 1. 自激感应发电机基本特性 自激感应发电机(SEIG)在电力系统中有着重要的应用。在不同运行条件下,其频率变化范围和输出功率有着特定的规律。对于三种不同的速度,频率的变化范围大致相同。并且,功率负载必须等于并联运行的 SEIG 输出功率之和。 以 SCM 发电机和 WRM 发电机为例,尽管它们额定功率相同,但 SCM 发电机的输出功率通常大于 WRM 发电机。在固定终端电压 \(V_t\) 和功率负载 \(P_L\) 的情况下,随着速度 \(v\) 的降低,两者输出功率的比值会增大。 | 相关参数 | 说明 | | ---- | --

电力系统经济调度与动态经济调度研究

### 电力系统经济调度与动态经济调度研究 在电力系统运行中,经济调度(ED)和动态经济调度(DED)是至关重要的概念。经济调度旨在特定时刻为给定或预估的负荷水平找到最优的发电机输出,以最小化热发电机的总运行成本。而动态经济调度则是经济调度的更高级实时版本,它能使电力系统在规划期内实现经济且安全的运行。 #### 1. 经济调度相关算法及测试系统分析 为了评估结果的相关性,引入了功率平衡指标: \[ \Delta P = P_{G,1} + P_{G,2} + P_{G,3} - P_{load} - \left(0.00003P_{G,1}^2 + 0.00009P_{G,2}^2 +

MATLAB目标对象管理与配置详解

### MATLAB 目标对象管理与配置详解 #### 1. target.get 函数 `target.get` 函数用于从内部数据库中检索目标对象,它有三种不同的语法形式: - `targetObject = target.get(targetType, targetObjectId)`:根据目标类型和对象标识符从内部数据库中检索单个目标对象。 - `tFOList = target.get(targetType)`:返回存储在内部数据库中的指定类型的所有目标对象列表。 - `tFOList = target.get(targetType, Name, Value)`:返回具有与指定名称

TypeScript高级特性与Cypress测试实践

### TypeScript 高级特性与 Cypress 测试实践 #### 1. TypeScript 枚举与映射类型 在 TypeScript 中,将数值转换为枚举类型不会影响 `TicketStatus` 的其他使用方式。无论底层值的类型如何,像 `TicketStatus.Held` 这样的值引用仍然可以正常工作。虽然可以创建部分值为字符串、部分值为数字的枚举,甚至可以在运行时计算枚举值,但为了充分发挥枚举作为类型守卫的作用,建议所有值都在编译时设置。 TypeScript 允许基于其他类型定义新类型,这种类型被称为映射类型。同时,TypeScript 还提供了一些预定义的映射类型