データベースオブジェクト間の依存関係とは、データベースオブジェクト間の依存関係や参照関係を記述するものです。本記事では、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を参照します。
ビュー間およびビューとテーブル間の依存関係は、特定のシナリオで非常に役立ちます。例えば、データベース移行のシナリオでは、別のデータベースでスキーマオブジェクトを再構築する必要があります。再構築するスキーマオブジェクトがビューの場合、そのビューが依存している他のオブジェクトを先に再構築する必要があります。そうでない場合、ビューを再構築する際に依存オブジェクトが存在しないというエラーが発生します。ビュー間およびビューとテーブル間の依存関係を取得できれば、オブジェクトの再構築作業を容易に完了できます。