データベースオブジェクト間の依存関係とは、データベースオブジェクト間の依存関係や参照関係を記述するものです。本記事では、OceanBaseデータベースのMySQLモードにおいて、データベースオブジェクト間の依存関係を作成および確認する方法について説明します。
特定の種類のスキーマオブジェクトは、その定義内で他のオブジェクトを参照できます。例えば、ビューの定義は、テーブルや他のビューを参照するクエリである可能性があります。オブジェクトAの定義がオブジェクトBを参照している場合、Aは(Bの)依存オブジェクトであり、Bは(Aの)参照オブジェクトです。
MySQLテナントでは、ビュー間およびビューとテーブル間の依存関係が記述されており、information_schemaデータベースのVIEW_TABLE_USAGEビューを使用して照会できます。
例1: ビューview2を作成します。このビューは、テーブルtbl1と別のビューview1を参照します。
obclient> CREATE TABLE tbl1(col1 INT, col2 INT);
Query OK, 0 rows affected
obclient> CREATE TABLE tbl2 (col1 INT, col2 INT);
Query OK, 0 rows affected
obclient> CREATE VIEW view1 AS SELECT * FROM tbl2;
Query OK, 0 rows affected
obclient> CREATE VIEW view2 AS SELECT t.col1 AS col1, t.col2 AS col2 FROM tbl1 t, view1 v WHERE
t.col1 = v.col2;
Query OK, 0 rows affected
例2:information_schemaデータベースのVIEW_TABLE_USAGEビューを使用して、データベースオブジェクト間の依存関係を照会します。
obclient> SELECT * FROM information_schema.VIEW_TABLE_USAGE;
+--------------+-------------+-----------+--------------+------------+---------------+
| VIEW_CATALOG | VIEW_SCHEMA | VIEW_NAME | TABLE_SCHEMA | TABLE_NAME | TABLE_CATALOG |
+--------------+-------------+-----------+--------------+------------+---------------+
| def | test | view1 | test | tbl2 | def |
| def | test | view2 | test | view1 | def |
| def | test | view2 | test | tbl1 | def |
+--------------+-------------+-----------+--------------+------------+---------------+
3 rows in set
上記の例では、ビューのクエリ結果にデータベースオブジェクト間の依存関係が記述されています。例えば、ビューview1はテーブルtbl2を参照し、ビューview2はテーブルtbl1と別のビューview1を参照します。
ビュー間およびビューとテーブル間の依存関係は、特定のシナリオでは非常に有用です。例えば、データベース移行のシナリオでは、別のデータベースでスキーマオブジェクトを再構築する必要があります。再構築するスキーマオブジェクトがビューの場合、そのビューが依存する他のオブジェクトを先に再構築しなければなりません。そうでないと、ビューを再構築する際に依存するオブジェクトが存在しないというエラーが発生します。ビュー間およびビューとテーブル間の依存関係を取得できれば、オブジェクトの再構築作業を容易に完了できます。