Um cenário que encontro frequentemente é a existência de várias bases de dados pequenas e a necessidade de fazer join entre elas. Além de ser uma prática pouco recomendada podendo causar má performance não é possível no Azure fazer ligação entre bases de dados diferentes devido ao balanceamento de carga do serviço.

Migrar estas bases de dados directamente para o Azure e depois alterar os procedimentos ou querys é algo que traz duas desvantagens:

  • É trabalhoso e sai caro para as equipas de desenvolvimento
  • Não é o modelo mais económico porque por vezes temos bases de dados pequenas que obrigatoriamente iriam ficar no espectro de 1 GB no Azure.

Daqui que a solução mais económica e rápida de implementar consiste na criação de schemas com as bases de dados diferentes.

Por exemplo, se temos uma db1 e uma db2, o que fazemos é criar uma base de dados em Azure e criar dois esquemas db1 e db2:

 CREATE SCHEMA <sample_schema, sysname, sample_schema> AUTHORIZATION <owner_name, sysname, owner_name>

Ou seja:

CREATE SCHEMA db1 AUTHORIZATION dbo

e

CREATE SCHEMA db2 AUTHORIZATION dbo

Depois migramos as tabelas da base de dados db1 para o esquema db1 e o mesmo para db2.

As alterações no código são simples de efectuar e facilmente automatizaveis: substituimos db1.dbo.tabela1 por db1.tabela1, etc.

Com isto podemos fazer joins entre os vários esquemas e minimizar os custos de deployment no SQL Azure.

Nota: poderemos ter que usar correlation names em algumas queries, mas o esforço é minimo.