Temos vários bancos de dados independentes que têm dados e códigos em comum, não no sentido de serem acessados entre os bancos de dados, mas no sentido de que os dados significam a mesma coisa em cada banco de dados e o código faz a mesma coisa.
Exemplos são:
- Definições de configuração (por exemplo, códigos de erro 50xxx, texto clichê para o nome da empresa, etc.).
- Procedimentos e funções que executam tarefas comuns (por exemplo, converter uma string CSV em uma tabela, registrar um erro, formatar uma mensagem de erro com base no código de erro).
- Estruturas de tabela (por exemplo, tabela para histórico de versão do banco de dados, tabela para registro de erros). Além das colunas, restrições e gatilhos, também existem procedimentos e funções comuns que leem/gravam os dados.
- Tabelas de consulta (por exemplo, tabela de consulta de datas contendo datas entre 2000-2100). Elas são semelhantes às estruturas de tabela, mas frequentemente os dados serão os mesmos nos bancos de dados. No caso da tabela de datas, as datas de início e término são parâmetros de configuração, que são lidos por uma função, depois os dados de data são gerados por um procedimento. Todas essas operações são comuns entre os bancos de dados.
- Tipos definidos pelo usuário (por exemplo, tipos para passar tabelas para funções).
Por motivos de manutenção e suporte, acho que faz sentido que coisas como códigos de erro, procedimentos, funções e tipos tenham um "ponto único de verdade" em todos os bancos de dados, não uma verdade diferente em cada banco de dados.
No momento, cada banco de dados tem sua própria cópia de tudo, incluindo o repositório de origem, e nós os mantemos de forma independente. Isso está longe do ideal porque é muito fácil corrigir um procedimento em A e esquecer de colocá-lo em B, ou adicionar um código de erro a A e o mesmo a B, mas significam coisas diferentes, etc.
Os bancos de dados não são atualizados ao mesmo tempo e não residem necessariamente no mesmo hardware. Há casos em que eles podem ler dados um do outro (se o outro existir).
Existe uma maneira padrão de ter um único ponto de verdade para dados/código usado em mais de um banco de dados?
Além da resposta de Thomas , para itens como dados de pesquisa comuns e funções genéricas, você pode usar sinônimos .
Agora seus outros bancos de dados podem tratá-los como objetos locais de primeira classe, mas você só precisa manter uma cópia. Observe que algumas funcionalidades estão faltando, por exemplo, você não pode configurar chaves estrangeiras.
Em uma vida anterior, gerenciei um sistema onde teríamos ~ 500 bancos de dados com esquema quase idêntico em cada instância. Gerenciamos dados comuns usando sinônimos e implantamos o código que precisava ser local usando o Red-Gate SQL Compare e o SQL Farms Combine (muito parecido com o Multi-Script).
Três coisas imediatamente vêm à mente:
edit: como esqueci isso, não sei ... culpo a falta de cafeína no início da manhã.