Просто чтобы немного расширить ответ @ Michael, но, несмотря на то, что ссылка на общую схему - это путь, вы можете создать «псевдонимы» в локальных базах данных, чтобы сделать это немного проще в управлении.
Например, я работаю с производной MySQL, у которой еще нет функции MySQL 8 UUID_TO_BIN
, поэтому я создал свою собственную и сохранил ее в базе данных специально для глобальных вещей, которые я назвал 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
), а не обновлять каждую базу данных.
Если я позже обновлю базу данных с нативным, UUID_TO_BIN
я также могу просто удалить все мои «псевдонимные» функции, и все мои существующие запросы и процедуры теперь будут использовать ее без каких-либо дальнейших изменений. Или, если глобальная функция должна была быть перемещена в другую базу данных, мне нужно только обновить мои псевдонимы, а не каждый из моих запросов, которые ее используют.
Я не уверен, насколько умным является MySQL, когда речь заходит об оптимизации функции, которая просто вызывает другую функцию, поэтому возможна небольшая плата за перенаправление таким образом, но я думаю, что это стоит того, чтобы упростить управление, хотя сохраняя только одно «глобальное» определение.