Esquema de dados JSON Avançando mais ainda na nossa jornada sobre modelo de dados, precisamos comentar sobre o esquema JSON. Então vamos nos lembrar que JSON significa JavaScript Object Notation, Notação de Objeto JavaScript. Este formato é muito popular, principalmente porque virou padrão de interoperabilidade entre sistemas modernos, principalmente pela adoção das APIs. E neste modelo, nós precisamos observar o seguinte, existem duas estruturas fundamentais. A primeira estrutura é uma coleção de pares de chave e valor, geralmente compreendidas como objetos, da nossa aplicação orientada a objetos, os registros, o struct, e ainda a outra estrutura fundamental é uma lista ordenada de valores, que são os arrays, vetores, listas, sequências. Com isso em mente, vamos nos aprofundar com o conceito de objeto, que é um conjunto desordenado de pares chave-valor. Então, aqui eu posso ter um objeto vazio, simplesmente abrindo chaves, espaço, fechando chaves, ou posso começar a ter uma modelagem de um objeto para representar o meu nome, com o atributo nome, Lourenço, sobrenome, Tabora. Então, aqui a gente tem a estrutura e o fluxo a ser seguido para a gente começar a compor um objeto em JSON. Da mesma maneira, nós temos o Array, que é uma coleção ordenada de valores. Abrindo colchetes, espaço fechando colchetes, temos um array vazio. E a gente vai colocar os elementos dentro deste array. Mesmo raciocínio aqui então de como a gente está evoluindo essa estrutura. Já os valores, ou seja, os conteúdos que nós vamos colocar, já temos um pouco mais de diversidade. que nós vamos colocar, já temos um pouco mais de diversidade. Nós temos string, nós temos o número, nós temos o objeto, o array, o booleano true, o false e o nulo. E aqui na estrutura, abre chaves, abre astas, o nome, ou seja, a chave, fecha astas, dois pontos, abre astas, o valor, no caso de uma string. Observe ali que na idade, que é um número inteiro, eu não coloco astas. Essa daqui é a nomenclatura padrão, chave, valor e values. Agora vamos começar a olhar um exemplo um pouco mais sofisticado do que é possível fazer com os dados em JSON. Então olha só que interessante aqui. Nós estamos modelando um pedido, a nossa velha conhecida order ID, ou seja, o pedido de venda, que tem um cliente. Agora aqui já começa a surgir um padrão interessante. Nós temos um tipo complexo de dados que é um objeto. Então o cliente é composto por um objeto cujos atributos são o identificador deste cliente, que é o Cust ID, o nome e este cliente tem um endereço. E o endereço já é um outro subdocumento composto pela rua e pela cidade. Então, olha só que interessante. A estrutura aqui nos permite trabalhar de uma maneira muito simplificada, muito acessível, com tipos complexos de dados. Então, nós temos o cliente, que já é um objeto por si só, formado também pelo objeto endereço deste cliente. E aqui nós também temos o relacionamento de três entidades acontecendo automaticamente nesse modelo de dados, que é uma order ID para um cliente e um endereço para um cliente. Adicionalmente, nós temos ali o atributo locations, que é um array, então localização 0, 3 e 7. E mais para frente, lembra da nossa velha conhecida das discussões de modelo de dados, o item do pedido, lineItems? Nós temos aqui um array. Então, é aquele relacionamento, uma ordem de pedido, tem muitas linhas ou muitos itens de pedido. E aqui nós temos um array composto por documentos, e esses documentos são compostos por três atributos. O SKU, a quantidade e o preço unitário. E para fechar, nós temos ali também o pagamento, que é um outro objeto composto, um outro tipo composto. Então perceba a riqueza de modelagem que nós fazemos com um único registro. E aqui uma outra coisa interessante já de destacar, é que se nós fôssemos fazer essa modelagem em relacional, é que se nós fossemos fazer essa modelagem em relacional, nós teríamos que escrever na tabela de pedido, na tabela cliente, na tabela de endereço, na tabela de itens de pedido e na tabela de pagamento. Então, certamente temos aqui no mínimo cinco operações de escrita e na hora de fazer a leitura disso, mais cinco operações de leitura. Quando nós trabalhamos no modelo documental, com esse JSON que temos aqui em tela, com uma única operação de escrita, a gente escreve todas as entidades e da mesma forma, em uma única operação de leitura, nós lemos tudo isso. Então existe aqui uma economia computacional bem interessante como consequência deste modelo de dados que estamos aplicando aqui com essas estruturas mais sofisticadas e ainda assim simples que o JSON nos permite alcançar. E ainda falando de esquema JSON, especificamente falando do esquema, a gente precisa entender o JSON como um validador. Ou seja, nós podemos, no momento da criação da nossa coleção, aplicar regras que serão validadas, para que o nosso sistema descarte objetos que não estão de acordo com aquelas regras. Um exemplo que nós vimos agora é cliente. Então, aqui no Brasil, um cliente válido certamente precisa ter CPF ou CNPJ. Aqui nesse meu exemplo de criação de coleção, estou colocando uma regra de estudantes, então estamos criando a coleção de estudantes com as regras para validar se existe no objeto o endereço, o curso, que é o major, o nome e o ano. E aí o nome tem que ser um string e o ano tem que ser um inteiro. E o GPA, que é o score, é a nota desse aluno, tem que ser um double. Então perceba que aqui a gente já está aplicando validações, já estamos definindo o esquema mínimo que esse objeto precisa ter para ser validado, para ser válido para a nossa aplicação e para ser escrito no nosso banco de dados.