Chỉ cần mở rộng một chút theo câu trả lời của @ Michael, nhưng trong khi tham khảo một lược đồ chung là cách để đi, bạn có thể tạo "bí danh" trong cơ sở dữ liệu cục bộ để giúp việc này dễ quản lý hơn một chút.
Ví dụ: tôi đang làm việc với một công cụ phái sinh MySQL chưa có UUID_TO_BIN
chức năng của MySQL 8 , vì vậy tôi đã tạo riêng cho mình và lưu trữ nó trong cơ sở dữ liệu dành riêng cho các công cụ toàn cầu mà tôi đã gọi common
. Vì vậy, để tham chiếu chức năng này, bây giờ tôi phải sử dụng common.UUID_TO_BIN
trong tất cả các truy vấn và thủ tục được lưu trữ của mình. Không phải là một vấn đề lớn, nhưng không hoàn toàn dễ dàng như gọi đơn giản UUID_TO_BIN
(như tôi sẽ làm nếu chức năng gốc có sẵn).
Vì vậy, những gì tôi đã làm cũng được thêm một "bí danh" vào mỗi cơ sở dữ liệu của mình như sau:
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);
Bằng cách này, trong mỗi cơ sở dữ liệu tôi thêm "bí danh" này, giờ đây tôi chỉ có thể gọi UUID_TO_BIN(some_uuid, TRUE)
mà không cần thêm bất kỳ tên cơ sở dữ liệu nào, nhưng không gặp rắc rối khi sao chép toàn bộ chức năng, tức là - nếu tôi cần thay đổi hoặc tối ưu hóa chức năng vì một số lý do, tôi chỉ phải làm như vậy ở một nơi duy nhất ( common.UUID_TO_BIN
) thay vì cập nhật mọi cơ sở dữ liệu.
Nếu sau này tôi nâng cấp lên cơ sở dữ liệu với bản địa, UUID_TO_BIN
tôi cũng có thể xóa tất cả các hàm "bí danh" của mình và tất cả các truy vấn và quy trình hiện có của tôi sẽ sử dụng nó mà không cần sửa đổi gì thêm. Hoặc nếu chức năng toàn cầu được chuyển đến một cơ sở dữ liệu khác, tôi chỉ phải cập nhật bí danh của mình, thay vì mỗi truy vấn sử dụng nó.
Tôi không chắc chắn MySQL thông minh như thế nào khi tối ưu hóa một chức năng chỉ đơn giản gọi một chức năng khác, do đó có thể có một chi phí nhỏ liên quan đến việc chuyển hướng nó theo cách này, nhưng tôi nghĩ rằng nó đáng để quản lý đơn giản hóa, trong khi chỉ giữ lại một định nghĩa "toàn cầu" duy nhất.