A modelagem de dados SQL para JSON é algo que abordei na primeira parte de meu "Série "Mudança do SQL Server para o Couchbase. Desde aquela postagem no blog, recebi algumas novas ferramentas de Hackoladeque recentemente adicionou suporte de primeira classe ao Couchbase em sua ferramenta.
Nesta postagem, analisarei o exercício de modelagem muito simples que fiz à mão e mostrarei como o Hackolade da IntegrIT pode ajudar.
Estou usando o mesmo esquema SQL que usei na série de postagens anteriores do blog; você pode encontrá-lo em GitHub (na pasta SQLServerDataAccess/Scripts).
Revisão: Modelagem de dados SQL para JSON
Primeiro, vamos revisar: a principal maneira de representar relações em um banco de dados relacional é por meio de um relacionamento de chave/chave estrangeira entre tabelas.
Ao analisar a modelagem em JSON, há duas maneiras principais de representar relacionamentos:
- Referencial - Os conceitos recebem seus próprios documentos, mas fazem referência a outro(s) documento(s) usando chaves de documento.
- Desnormalização - Em vez de dividir os dados entre os documentos usando chaves, agrupe os conceitos em um único documento.
Comecei com um modelo relacional de carrinhos de compras e usuários de mídia social.
No meu exemplo, eu disse que um relacionamento de itens de carrinho de compras - para - carrinho de compras em um banco de dados relacional provavelmente seria melhor representado em JSON por um único documento de carrinho de compras (que contém itens). Esse é o caminho da "desnormalização". Em seguida, sugeri que um relacionamento Usuário de mídia social - para - Atualização de usuário de mídia social seria melhor representado em JSON com um relacionamento referencial: as atualizações vivem em seus próprios documentos, separadas do usuário.
Esse foi um processo totalmente manual. Para esse exemplo simples, não foi difícil. Mas com modelos maiores, seria útil ter alguma ferramenta para ajudar na modelagem de dados SQL para JSON. Não será totalmente automático: ainda há um pouco de arte nisso, mas as ferramentas podem fazer grande parte do trabalho para nós.
Iniciando com uma DDL do SQL Server
A próxima parte pressupõe que você já tenha executado os scripts SQL para criar as 5 tabelas: ShoppingCartItems, ShoppingCart, FriendBookUsers, FriendBookUpdates e FriendBookUsersFriends. (Sinta-se à vontade para tentar isso em seus próprios bancos de dados, é claro).
A primeira etapa é criar um script DDL de seu esquema. Você pode fazer isso com o SQL Server Management Studio.
Primeiro, clique com o botão direito do mouse no banco de dados desejado. Em seguida, vá para "Tasks" (Tarefas) e depois para "Generate Scripts" (Gerar scripts). Em seguida, você verá um assistente. Você pode simplesmente clicar em "Next" (Avançar) em cada etapa, mas se nunca tiver feito isso antes, talvez seja melhor ler as instruções de cada etapa para entender o que está acontecendo.
Por fim, você terá um arquivo SQL gerado no caminho especificado.
Esse será um arquivo de texto com uma série de CRIAR
e ALTER
nele (pelo menos). Aqui está um breve trecho do que criei (você pode encontrar o arquivo versão completa no Github).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CRIAR TABELA [dbo].[Atualizações do FriendBook]( [Id] [identificador único] NÃO NULL, [Data de publicação] [data e hora] NÃO NULL, [Corpo] [nvarchar](256) NÃO NULL, [UserId] [identificador único] NÃO NULL, CONSTRAINT [PK_FriendBookUpdates] PRIMÁRIO CHAVE CLUSTERIZADO ( [Id] ASC )COM (PAD_INDEX = DESLIGADO, STATISTICS_NORECOMPUTE = DESLIGADO, IGNORE_DUP_KEY = DESLIGADO, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMÁRIO] ) ON [PRIMÁRIO] IR -- etc... |
A propósito, isso também deve funcionar com os bancos de dados do SQL Azure.
Observação: a Hackolade também trabalha com outros tipos de DDLs, não apenas com o SQL Server, mas também com o Oracle e o MySQL.
Entre na Hackolade
Esta próxima parte pressupõe que você tenha feito download e instalado a Hackolade. Esse recurso está disponível apenas na edição Professional da Hackolade, mas há uma avaliação gratuita de 30 dias disponível.
Depois de criar um arquivo DDL, você pode abrir a Hackolade.
Na Hackolade, você criará/editará modelos que correspondem a modelos JSON: Couchbase (é claro), bem como DynamoDB e MongoDB. Para este exemplo, vou criar um novo modelo do Couchbase.
Nesse ponto, você tem um modelo totalmente novo que contém um "Novo Bucket". Você pode usar a Hackolade como uma ferramenta de design para representar visualmente os tipos de documentos que você colocará no balde, os relacionamentos com outros documentos e assim por diante.
Já temos um modelo relacional e um arquivo DDL do SQL Server, então vamos ver o que a Hackolade pode fazer com ele.
Engenharia reversa de modelagem de dados SQL para JSON
Na Hackolade, vá para Tools → Reverse Engineer → Data Definition Language file. Você será solicitado a selecionar um tipo de banco de dados e um local para o arquivo DDL. Selecionarei o "MS SQL Server" e o arquivo "script.sql" que usei anteriormente. Por fim, clicarei em "Ok" para que a Hackolade faça sua mágica.
A Hackolade processará as 5 tabelas em 5 tipos diferentes de documentos. Portanto, o resultado final é muito parecido com um literal tradução.
Esse diagrama lhe dá uma visão do seu modelo. Mas agora você pode pensar nele como uma tela para construir seu modelo JSON definitivo. A Hackolade fornece algumas ferramentas para ajudá-lo.
Desnormalização
Por exemplo, a Hackolade pode fazer sugestões sobre desnormalização ao fazer a modelagem de dados SQL para JSON. Acesse Tools→Suggest denormalization (Ferramentas→Sugerir desnormalização). Você verá uma lista de tipos de documentos em "Table selection" (Seleção de tabela). Tente selecionar "shoppingcart" e "shoppingcartitems". Em seguida, na seção "Parameters", escolha "Array in parent".
Depois de fazer isso, você verá que o diagrama terá uma aparência diferente. Agora, os itens estão incorporados em uma matriz no shoppingcart, e há linhas tracejadas que vão para shoppingcartitems. Neste ponto, podemos remover shoppingcartitems do modelo (em alguns casos, você pode querer deixá-lo, por isso a Hackolade não o remove automaticamente ao fazer a modelagem de dados SQL para JSON).
Observe que há outras opções aqui também:
- Incorporação de matriz no pai - Isso é o que foi demonstrado acima.
- Incorporação de subdocumento em filho - Se você quiser modelar da maneira oposta (por exemplo, armazenar o carrinho de compras dentro do item do carrinho de compras).
- Incorporação de ambos - Ambas as matrizes na abordagem de documento pai e subdocumento.
- Referência bidirecional - Representar um relacionamento de muitos para muitos. Em tabelas relacionais, isso geralmente é feito com uma "tabela de junção" ou "tabela de mapeamento"
Observe também em cascata. Isso evita referências circulares em que pode haver um pai, um filho, um neto e assim por diante. Você seleciona até onde deseja fazer a cascata.
Mais limpeza
Há algumas outras coisas que posso fazer para limpar esse modelo.
- Adicionar um campo "type" (tipo). No Couchbase, talvez seja necessário distinguir os documentos do carrinho de compras de outros documentos. Uma maneira de fazer isso é adicionar um campo "discriminador", geralmente chamado de "tipo" (mas você pode chamá-lo como quiser). Na Hackolade, posso atribuir a ele um valor "padrão" de "shoppingcart".
- Remover o campo 'id' da matriz incorporada. A tabela SQL precisava desse campo para um relacionamento de chave estrangeira. Como tudo está incorporado em um único documento, não precisamos mais desse campo.
- Altere o nome da matriz para 'items'. Novamente, como um carrinho de compras agora está consolidado em um único documento, não precisamos chamá-lo de "shoppingcartitems". Apenas "itens" será suficiente.
Saída
Um modelo como esse pode ser um documento vivo no qual sua equipe trabalha. Os próprios modelos da Hackolade são armazenados como documentos JSON. Você pode compartilhar com os membros da equipe, verificá-los no controle de origem e assim por diante.
Você também pode usar a Hackolade para gerar documentação estática sobre o modelo. Essa documentação pode ser usada para orientar o desenvolvimento e a arquitetura do seu aplicativo.
Vá para File → Generate Documentation → HTML/PDF. Você pode escolher quais componentes incluir em sua documentação.
Resumo
A Hackolade é uma ferramenta de modelagem NoSQL criada pela empresa IntegrIT. Ela é útil não apenas na criação de modelos do zero, mas também na engenharia reversa para modelagem de dados SQL para JSON. Há muitos outros recursos da Hackolade que não abordei nesta publicação. Eu o encorajo a Faça o download de uma avaliação gratuita da Hackolade hoje mesmo. Você também pode encontrar Hackolade no Twitter @hackolade.
Se você tiver dúvidas sobre o Couchbase Server, pergunte na seção Fóruns do Couchbase. Confira também o Portal do desenvolvedor do Couchbase para obter mais informações sobre o Couchbase para desenvolvedores. Fique sempre à vontade para entre em contato comigo pelo Twitter @mgroves.