Modelar pequenas entidades de pesquisa

Concluído

O nosso modelo de dados inclui duas pequenas entidades ProductCategory de dados de referência e ProductTag. Estas entidades são utilizadas para valores de referência e estão relacionadas com outras entidades, embora um 1:Many relationship.

Diagrama que mostra a relação da categoria de produto, produto, etiquetas de produto e tabelas de etiquetas de produto.

Nesta unidade, vamos modelar as ProductCategory entidades e ProductTag no nosso modelo de documento.

Modelar categorias de produtos

Em primeiro lugar, para categorias, vamos modelar os dados com o respetivo ID e colunas de nomes como as únicas propriedades e colocá-lo num novo contentor chamado ProductCategory.

Em seguida, temos de escolher uma chave de partição. Vamos explorar as operações que temos de realizar nestes dados.

Vamos criar uma nova categoria de produto, editar uma categoria de produto e, em seguida, listar todas as categorias de produtos. A criação e edição de categorias de produtos não são operações executadas frequentemente. A nossa aplicação de comércio eletrónico irá frequentemente listar todas as categorias de produtos quando os clientes visitarem o site. Portanto, a última operação é a que vamos executar mais.

A consulta desta última operação terá o seguinte aspeto: SELECT * FROM c. Com o ID como a chave de partição selecionada, esta consulta será agora entre partições, embora queiramos tentar otimizar estas operações de leitura intensiva, utilize apenas uma única partição, se possível. Também sabemos que os dados da categoria de produto nunca irão crescer perto de 20 GB de tamanho, por isso, como é que estas informações nos ajudam a modelar os dados de uma forma que resultará numa única consulta de partição quando listamos todas as categorias de produtos.

Diagrama que mostra a consulta entre partições para listar todas as categorias de produtos.

Para coagir esta pequena quantidade de dados novamente numa única partição, podemos adicionar uma propriedade discriminatória de entidade ao nosso esquema e utilizá-lo como chave de partição para este contentor. Ao atribuir a esta propriedade um valor constante para todos os documentos deste tipo no contentor, garantimos que agora temos uma única consulta de partição. Neste caso, vamos chamar a propriedade type e dar um valor constante de category. A nossa consulta teria agora o seguinte aspeto: SELECT * FROM c WHERE c.type = ”category”.

Diagrama que mostra a categoria de produto modelada com a chave de partição como tipo e o valor como categoria.

Etiquetas de produto de modelo

Segue-se a ProductTag entidade. Esta entidade é quase idêntica em função à ProductCategory entidade que discutimos na secção anterior. Vamos seguir a mesma abordagem aqui e modelar o documento para conter propriedades de ID e nome e criar uma propriedade discriminatória de entidade denominada type, neste caso com um valor constante de tag. Vamos criar um novo contentor chamado ProductTag e criar type a nova chave de partição.

Diagrama que mostra o contentor de etiquetas de produto modelado com a chave de partição como tipo e o valor como etiqueta.

Algumas pessoas acham estranha esta técnica para modelar pequenas tabelas de pesquisa. No entanto, modelar os nossos dados desta forma dá-nos a oportunidade de fazer uma otimização adicional no próximo módulo.