MicrosoftおよびSybaseのDBMSメタデータ構造


少し前に、データベース内のメタ情報を検索するための無料のSQL Dynamiteユーティリティを発表しました 良いレビュー、批判、そして発見されたエラーに感謝します。
更新プログラムをリリースし、見つかったバグを修正し、 SQLiteInformixのサポートを追加しました。

新しいバージョンはこちらから入手できます

前の記事で、データベースのメタ情報へのアクセスを検討することを約束しました。 今日は、MS SQLとSybaseについてお話します。

DBMS Microsoft SQL Server、Sybase Adaptive Server Enterprise、Sybase Anywhere、およびSQL Azureのさまざまなオブジェクトの関係を検索および分析するプロセスは、主にメタデータの操作にあります。

問題は、最初は同じメタデータ構造を持っていたSybase ASEとMSSQLが独立して長い道のりを歩んできたことです。 Sybase Anywhereは元々Watcom SQLであり、Sybase ASEとは多くの違いがあり、SQL Azureは一般的にクラウドベースのDBMSです。 ただし、それらのメタデータ構造は非常に似ており、特にオブジェクト(sysobjects、syscomments、syscolumns)に関する主要な情報を含む同じテーブル名を持っています。

この記事では、以下のバージョンのDBMSメタデータ構造について説明します。

MSSQL 2005、Sybase ASE 15.7、Sybase Anywhere 12.0.1、およびSQL Azureの現在のバージョン。

0) すべてのデータベースに共通のテーブルとストアドプロシージャ

テーブル:

1. sysobjects

システム内のすべてのオブジェクトに関する情報(ID、オブジェクト名、オブジェクトタイプ、およびその他のパラメーター)を格納するために使用されます。
メタデータを操作するためのメインテーブル。

2. syscomments

ストアドプロシージャ、ユーザー関数、トリガー、およびビューのテキストを保存します。

3. syscolumns

各テーブルの列に関する情報(名前、タイプなど)を保存します。

ストアドプロシージャ:

4. sp_columns

テーブル列に関する情報を名前で表示するストアドプロシージャ。

1) 複数のDBMSに固有のテーブルとストアドプロシージャ:

テーブル/ビュー:

1. sysconstraints

(MSSQLおよびSybase ASE)主キー、外部キー、および同様のオブジェクト(一意のキー、チェック、デフォルト)に関する情報を保存します。

2. sys.sysindexes (表示)またはsysindexes (テーブル)

(MSSQLおよびSybase ASEおよびSybase Anywhere)インデックス情報を格納します。

3. sys.sysforeignkeys

(MSSQLおよびSybase Anywhere)外部キーに関する情報を格納します。

ストアドプロシージャ:

4. sp_helpindex

(MSSQL&SQL Azure&Sybase ASE)テーブルインデックスに関する情報を名前で返すストアドプロシージャ。

5. sp_helpconstraint

(MSSQLおよびSybase ASE)テーブルの外部キーと主キーに関する情報を名前で返すストアドプロシージャ。

Microsoft固有のDBMS固有のテーブルとストアドプロシージャ:

2) MSSQL

1. sp_MShelpcolumns

これは、名前でテーブル列に関する詳細情報を提供するMSSQL固有の(名前が示すとおり)ストアドプロシージャです。

2. sp_MStablekeys

これは、名前で表の主キーと外部キーに関する詳細情報を提供するMSSQL固有の(名前が示すとおり)ストアドプロシージャです。

3. sp_MStablechecks

これは、名前によるテーブル制限に関する詳細情報を提供するMSSQL固有の(名前が示すとおり)ストアドプロシージャです。

3) MSSQL + SQL Azure

Microsoft SQL Server(バージョン2005以降)などのSQL Azureは、INFORMATION_SCHEMAをサポートしています(これら2つのDBMSに加えて、この標準はMySQLおよびPostgreSQLでもサポートされています)。

1. sys.indexes

インデックスと主キーに関する情報を保存します。

2. sys.sql_modules (Azure SQLのみ)

トリガーに関する情報を保存します。

3. sys.triggers

前の表と同様に、トリガーに関する情報を格納します。

4. sys.foreign_key_columns

外部キーに関する情報を保存します。

さらに、MSSQL(バージョン2005以降)は、情報スキーマなどをサポートしています。 つまり、これはメタデータを保存するための標準です。つまり、DBMSには、さまざまなタイプのオブジェクトに関する情報を提供する読み取り専用ビューの特別なセットが必要です。 例:

1. information_schema.views

(MSSQLおよびSQL Azure)ビューに関する情報を格納します。

2. information_schema.routines

(MSSQLおよびSQL Azure)ストアドプロシージャおよび関数に関する情報を格納します。

ご覧のとおり、メタデータの構造に大きな違いがあるにもかかわらず、同様のアプローチがこれらのDBMSのコンテンツの分析に適用される可能性があります(当然ながら、一定の制限があります)。 それらを扱う基本的なロジック(発生の検索、メタデータによるDDLの生成)は、SQL Dynamiteで既に実装されています。

Source: https://habr.com/ru/post/J215431/


All Articles