@Michaelの答えを少し拡張するだけですが、一般的なスキーマを参照する方法ですが、ローカルデータベースに「エイリアス」を作成して、これを少し管理しやすくすることができます。
たとえば、MySQL 8のUUID_TO_BIN
機能をまだ備えていないMySQL派生物を使用しているので、自分で作成し、それを自分が呼び出したグローバルなもの専用のデータベースに保存しましたcommon
。したがって、この関数を参照するにはcommon.UUID_TO_BIN
、すべてのクエリとストアドプロシージャで使用する必要があります。大きな問題ではありませんが、単純に呼び出すほど簡単ではありませんUUID_TO_BIN
(ネイティブ関数が使用可能である場合と同じです)。
だから私がやったことはまた、次のように私のデータベースのそれぞれに「エイリアス」を追加しています:
CREATE FUNCTION `UUID_TO_BIN`(a_uuid CHAR(36), a_reorder BOOL) RETURNS binary(16)
DETERMINISTIC
RETURN `common`.UUID_TO_BIN(a_uuid, a_reorder);
このようにして、各データベースにこの「エイリアス」をUUID_TO_BIN(some_uuid, TRUE)
追加します。データベース名を追加せずに単純に呼び出すことができますが、関数全体を複製する手間がありません。つまり、何らかの理由で関数を変更または最適化する必要がある場合は、common.UUID_TO_BIN
すべてのデータベースを更新するのではなく、1か所()で行う必要があります。
後でネイティブUUID_TO_BIN
を使用してデータベースにアップグレードする場合、「エイリアス」関数をすべて削除するだけで、既存のすべてのクエリとプロシージャで、変更を加えなくても使用できるようになります。または、グローバル関数を別のデータベースに移動する場合は、それを使用するすべてのクエリではなく、エイリアスを更新するだけで済みます。
別の関数を呼び出すだけの関数を最適化する場合、MySQLがどれほど賢いかわからないので、このようにリダイレクトすることに関連して少しコストがかかる可能性がありますが、管理を簡素化するには価値があると思いますが、単一の「グローバル」定義のみを保持します。