Como você faz o seu cliente espesso se é compatível com o esquema de banco de dados?
-
22-09-2019 - |
Pergunta
Eu desenvolvo um aplicativo com componentes de cliente espesso e de cliente fino. Também em versão nosso banco de dados, de modo que as alterações do esquema resultem em seu próprio número de versão e scripts de alteração possam ser aplicados. As alterações no banco de dados, no entanto, nem sempre ocorrem em etapa com alterações de cliente espesso. Sim, a alteração do banco de dados de hoje pode adicionar uma coluna e exigir um no cliente espesso, mas a alteração do banco de dados de amanhã pode corrigir um erro em um procedimento armazenado que não requer alterações externas. Como posso codificar o cliente espesso para testar se é compatível com uma versão específica do banco de dados quando alguns são compatíveis com versões anteriores e outras não?
Durante mesmo que alguém se importa, o nosso é um aplicativo .NET integrando com o SQL Server, mas isso parece mais uma pergunta de versão do que uma pergunta da plataforma. A menos que exista uma solução específica da plataforma ...
Solução
Você pode criar uma tabela, ex. Metadados com duas colunas de string e coloque uma entrada (ou mais entradas) com a versão atual do esquema. Suponho que você faça algo semelhante agora.
E divida a versão em dois números (como esquema maior/menor). Quando você muda o esquema de maneira compatível não bate-papo, você aumenta a versão principal. Após alteração compatível com versões anteriores, você apenas atualiza a versão menor.
O major é usado pelo aplicativo para verificar se é compatível com o esquema atual, e o major+minor é usado para verificar se você pode/precisa atualizar o esquema.
Eu acho que esta é a solução usada pela maioria dos aplicativos.
Outras dicas
Você poderia adotar um esquema de número de versão maior/menor?
Uma alteração no número principal implica que os clientes precisam atualizar e a alteração no número menor não.
Com qualquer um desses, os números de versão estão sempre aumentando.
Se o banco de dados souber a versão mínima do cliente necessária, e o cliente conhece a versão mínima do banco de dados necessária, é uma verificação simples para determinar o que precisa de atualização (se é que alguma coisa) - agora se você encapsula a lógica em um procedimento armazenado ou em código, essa é a sua decisão ...