Desnormalizar dados em seu modelo

Concluído

Nesta unidade, você verá a tabela de produtos do banco de dados relacional e a modelará para um banco de dados NoSQL. Você também verá na relação muitos para muitos o que a sua tabela de produtos contém com marcas de produto.

Diagram that shows the relationship between the product and product tags entities.

Modelar as entidades do produto

Seu modelo inicial para a tabela do produto inclui apenas os campos da tabela relacional. No entanto, nosso aplicativo de comércio eletrônico deve exibir o nome da categoria do produto quando você exibe uma página de produto. Também convém consultar produtos pelas marcas em uma categoria de produto. Isso pode ser feito de duas maneiras: você pode armazenar produtos em um contêiner de marcas de produto ou pode inserir suas marcas no contêiner do produto.

Como há muito menos marcas por produto do que produtos por marcas, faz mais sentido inserir as marcas de produto na tabela do produto. Há uma relação um para poucos entre cada produto e as marcas, o que a torna um bom caso para a incorporação. Você também armazenará seus dados de produto com marcas inseridas em seu novo contêiner de produto. Portanto, seu novo modelo de produto será exibido conforme mostrado no diagrama a seguir:

Diagram that shows the relationship between the product and product tags entities but also includes a product container for which you haven't yet picked a partition key.

Selecionar uma chave de partição

Em seguida, você selecionará uma chave de partição para o contêiner de produtos. Novamente, você precisa ver as operações a serem executadas para decidir sobre uma chave de partição. Suas opções são criar um produto ou editar um produto. À medida que os clientes navegam pelo site de comércio eletrônico, eles geralmente fazem isso por categoria de produto. Você precisa de uma consulta que filtre os produtos por categoryId para exibi-los aos usuários. Para tornar sua consulta uma consulta de partição única com todos os produtos por categoria, você vai usar categoryId como chave de partição para o seu contêiner de produtos.

Diagram of the product container with 'categoryId' as the partition key, a list of operations, and a SQL statement to list all products in a category.

Portanto, categoryId é uma boa chave de partição que permite que você recupere todos os produtos de uma categoria com eficiência. Ao inserir IDs de marca, você também pode obter as IDs em sua relação muitos para muitos entre produtos e marcas. No entanto, quando você consulta produtos, são necessários os dados do produto, assim como exibir o nome da categoria e os nomes de marca. Quando você consulta por produtos, como você pode retornar o nome da categoria de cada produto e os nomes das marcas dos produtos?

No momento, para exibir uma página de produto para uma categoria, você precisaria executar as seguintes consultas:

  1. Consulte o contêiner de produtos para retornar todos os produtos de uma categoria.
  2. Consulte o contêiner productCategory para retornar o nome da categoria do produto.
  3. Em seguida, para cada produto retornado pela primeira consulta, execute uma terceira consulta sobre o contêiner productTag para obter o nome de cada marca de produto.

Diagram of the product, productCategory, and productTag containers and the queries to run to list all products from a category operation.

Desnormalizar entidades do produto

Executar todas as consultas anteriores pode funcionar para você. No entanto, essa abordagem não é muito escalonável. Lembre-se de que, em bancos de dados NoSQL, não há junções entre contêineres, portanto, as junções não são uma opção para você. Além disso, lembre-se de que, para um banco de dados NoSQL, o objetivo é reduzir o número de solicitações por meio da modelagem de dados, de modo que você possa buscar seus dados de aplicativo com o mínimo de solicitações possível.

Então, a solução é desnormalizar seus dados. Com a desnormalização, você pode otimizar seus modelos de dados a fim de garantir que todos os dados necessários para o seu aplicativo estejam prontos para serem atendidos por suas consultas.

Para desnormalizar seus dados nesta instância, adicione mais propriedades, como o nome da categoria e o nome de cada marca em sua matriz de marcas. Ao adicionar essas propriedades, você pode recuperar todos os dados necessários para retornar aos seus clientes em apenas uma única solicitação.

Diagram of a container with partition key 'categoryId' and modeled product document schema with a denormalized category name and product tag array.