Juste pour développer un peu la réponse de @ Michael, mais tout en référençant un schéma commun est le chemin à parcourir, vous pouvez créer des "alias" dans les bases de données locales pour rendre cela un peu plus facile à gérer.
Par exemple, je travaille avec un dérivé de MySQL qui n'a pas encore la UUID_TO_BIN
fonction de MySQL 8 , j'ai donc créé la mienne et l'ai stockée dans une base de données spécifiquement pour les éléments globaux que j'ai appelés common
. Donc, pour référencer cette fonction, je dois maintenant l'utiliser common.UUID_TO_BIN
dans toutes mes requêtes et procédures stockées. Pas un gros problème, mais pas aussi simple que d'appeler simplement UUID_TO_BIN
(comme je le ferais si la fonction native était disponible).
Donc, ce que j'ai fait, c'est aussi ajouté un "alias" à chacune de mes bases de données comme ceci:
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);
De cette façon, dans chaque base de données, j'ajoute cet "alias", je peux maintenant simplement appeler UUID_TO_BIN(some_uuid, TRUE)
sans ajouter de nom de base de données, mais sans les tracas de duplication de la fonction entière, c'est-à-dire si j'avais besoin de changer ou d'optimiser la fonction pour une raison quelconque, je ne fais que doivent le faire en un seul endroit ( common.UUID_TO_BIN
) plutôt que de mettre à jour chaque base de données.
Si je passe ultérieurement à une base de données avec un natif, UUID_TO_BIN
je peux également supprimer simplement toutes mes fonctions "alias" et toutes mes requêtes et procédures existantes vont maintenant l'utiliser sans aucune autre modification. Ou si la fonction globale devait être déplacée vers une autre base de données, je n'ai qu'à mettre à jour mes alias, plutôt que chacune de mes requêtes qui l'utilisent.
Je ne sais pas à quel point MySQL est intelligent lorsqu'il s'agit d'optimiser une fonction qui appelle simplement une autre fonction, donc il peut y avoir un léger coût associé à la rediriger de cette façon, mais je pense que cela en vaut la peine pour la gestion simplifiée, tout en ne conservant qu'une seule définition «globale».