Câu hỏi này đã được hỏi nhiều lần trên SO, nhưng thú vị là dường như không có sự thống nhất về câu trả lời tốt nhất. Vì vậy, đây là bản tóm tắt các tùy chọn chính mà nhiều người đã đề xuất (không theo thứ tự đặc biệt):
- Đặt nó vào cơ sở dữ liệu chính với một
sp_
tiền tố để SQL Server tìm kiếm nó ở đó đầu tiên - Đặt nó vào cơ sở dữ liệu mô hình để nó tự động được thêm vào tất cả các DB mới
- Chỉ tạo cơ sở dữ liệu cho các thủ tục 'toàn cục' (và các đối tượng khác) và gọi chúng bằng cách đặt tên ba phần
- Là 3, nhưng tạo từ đồng nghĩa trong các cơ sở dữ liệu khác để bạn không cần đặt tên ba phần
- Sử dụng các công cụ thương mại hoặc tự phát triển để quản lý việc triển khai tới nhiều cơ sở dữ liệu
- Là 5, nhưng triển khai cho một cơ sở dữ liệu, sau đó
diff
cơ sở dữ liệu và áp dụng tập lệnh khác để triển khai cho các cơ sở dữ liệu khác
Theo ý kiến của tôi, 1 là không bắt đầu vì Microsoft nói rõ ràng bạn không nên tạo các đối tượng trong cơ sở dữ liệu chính. 2 âm thanh tốt nhưng trên thực tế, cơ sở dữ liệu được khôi phục hoặc sao chép thường xuyên hơn được tạo từ đầu (YMMV), vì vậy việc sử dụng mô hình là không đáng tin cậy.
3 và 4 là tốt cho các bảng và dạng xem, nhưng ngữ cảnh thực thi có thể là một vấn đề đối với các thủ tục và hàm được lưu trữ. Nhưng điều này phụ thuộc vào logic trong các quy trình và nó có thể khả thi trong trường hợp của bạn.
Nhưng 1-4 đều có vấn đề tiềm ẩn là nếu bạn chỉ có một đối tượng, bạn sẽ chỉ có một phiên bản của đối tượng đó và thường hữu ích khi có các phiên bản khác nhau trong các DB khác nhau, để thử nghiệm hoặc chỉ dành cho các khách hàng khác nhau.
5 và 6 là các biến thể trên cùng một chủ đề và cá nhân tôi thấy đây là cách tiếp cận tốt nhất vì dù sao việc triển khai cũng là một vấn đề bạn phải giải quyết, vì vậy bạn cũng có thể làm được và đảm bảo rằng bạn có sẵn kiến thức, công cụ và quy trình. để có thể triển khai mã một cách rõ ràng và nhanh chóng tới bất kỳ cơ sở dữ liệu nào theo cách tự động, được kiểm soát.