Database
 sql >> Base de Dados >  >> RDS >> Database

Entregando presentes de Natal:o modelo de dados do Papai Noel


Com as férias se aproximando rapidamente, o Papai Noel precisa de ajuda adicional para entregar presentes para crianças de todo o mundo. Hoje, desenvolveremos um modelo de dados que pode ajudar o Papai Noel e seus elfos a trabalhar com mais eficiência.

Plano de fundo


O trabalho do Papai Noel é extremamente importante, então ele precisa fazer tudo o que puder para garantir o sucesso no prazo. Lembre-se de todos os problemas que Howard encontrou em ‘Jingle All the Way’ ao tentar encontrar uma única figura do Turbo Man – não podemos deixar o Papai Noel escorregar novamente, ou sua reputação será arruinada. Então, para ajudar o Papai Noel a se organizar, vamos dividir suas atividades em três fases principais.

  1. Planejamento

    Primeiro, o Papai Noel precisa planejar tudo. Afinal, ele não pode ter seus elfos correndo pela fábrica e entrando em pânico enquanto tentam entender bilhões de entregas! Além de ler as cartas deste ano e determinar quais presentes as crianças gostariam, também devemos analisar as tendências dos anos anteriores para reunir alguns materiais comuns ou até mesmo produzir presentes com antecedência. Isso ajudará a reduzir parte do backlog à medida que começamos a trabalhar na produção.

  2. Produção

    Após a fase de planejamento, estamos prontos para começar a produzir presentes. Com a ajuda dos duendes do Papai Noel, podemos rapidamente fabricar e embalar os presentes de acordo com as listas de desejos que recebemos. Para tornar o processo mais eficiente, porém, precisamos organizar todos os materiais e informações que temos à mão para que os elfos possam pegar as coisas de que precisam o mais rápido possível.

  3. Entrega

    O momento está se aproximando rapidamente! As renas do Papai Noel estão prontas, e o próprio homem está olhando ansiosamente para o relógio. Os presentes estão sendo rapidamente carregados no trenó pelos ajudantes do Papai Noel. Neste ponto, o Papai Noel está dando uma última olhada em sua agenda para garantir que ele tenha todos os endereços corretos, bem como quaisquer anotações que ele precise considerar.

Agora que temos um pouco de conhecimento sobre o tipo de informação com que precisaremos trabalhar, podemos finalmente começar a projetar o modelo de dados do Papai Noel.

O modelo de dados





Este modelo de dados consiste em três seções:
  1. Itens
  2. Pessoas e listas de desejos
  3. Entregas

Vamos dar uma olhada mais de perto em cada um deles.

Seção 1:Itens



Nosso modelo de dados começa com a seção Itens, que contém muitas tabelas que são centrais para as duas seções restantes.

O item_type mesa é sem dúvida a mais importante aqui. Esta tabela contém uma lista de todos os itens que precisaremos produzir na fábrica do Papai Noel. Para cada item, armazenaremos as seguintes informações:

  • item_name — o nome do item.
  • properties — pares de valores-chave textuais que denotam tamanho, forma, cor e outras propriedades do item produzido, armazenados em um formato estruturado.
  • description — uma descrição textual não estruturada do item.

Se tivermos dois itens semelhantes que diferem apenas em algumas de suas propriedades, como cor, iremos em frente e os armazenaremos como registros individuais na tabela.

Para os propósitos do nosso modelo de dados, vamos supor que o Papai Noel não comprará presentes, mas ordenará que seus duendes produzam tudo em casa. Para cada tipo de item diferente, teremos uma lista de pré-requisitos que devemos cumprir. Estes podem ser mão de obra ou materiais como madeira, plástico, metal e tintas. Precisaremos armazenar uma lista de todos os pré-requisitos possíveis e relacioná-los a cada item que precisamos produzir. Usaremos quatro tabelas para conseguir isso.

A primeira dessas quatro tabelas é o prerequisite , que, como o nome sugere, armazena uma lista de todos os pré-requisitos possíveis. Para cada registro nesta tabela, armazenaremos um nome de pré-requisito exclusivo, todas as properties adicionais (desta vez em um formato não estruturado) e referências ao prerequisite_type e dicionários de unidades. O prerequisite_type dicionário será usado para armazenar uma lista de todas as categorias de pré-requisitos, como “mão de obra” e “materiais”. A unit dicionário será usado para armazenar uma lista de todas as unidades que usaremos para quantificar nossos pré-requisitos. Por exemplo, podemos esperar que o trabalho seja medido em horas ou minutos e os materiais sejam medidos em termos de custo de produção (dólares), peso (quilogramas) ou volume (litros).

A última tabela nesta seção é warehouse , que usaremos para rastrear o status atual de nosso inventário para itens e materiais (daí o item_type_id e prerequisite_id chaves estrangeiras). Apenas uma dessas duas chaves conterá um valor em um determinado momento. Além dessas chaves, armazenaremos a quantity final que estava disponível em um determinado warehouse_date .

Seção 2:Pessoas e listas de desejos



Uma parte crítica do nosso modelo de dados, esta seção trata das coisas que as crianças querem encontrar debaixo de suas árvores de Natal! Vamos trabalhar da direita para a esquerda.

As duas tabelas mais à direita são country e city . Usaremos essas duas tabelas ao fazer referência à localização de uma criança que enviou uma lista de desejos ao Papai Noel. O country A tabela contém apenas o country_name exclusivo atributo e uma lista de todos os countries existentes . Para ser mais preciso com nossos locais, usaremos a city tabela para armazenar todas as cidades que o Papai Noel precisará visitar. Para cada cidade nesta tabela, armazenaremos:

  • city_name — o nome da cidade, que não é necessariamente único.
  • postal_code — o código postal da cidade.
  • country_id — o id do país em que a cidade está localizada. Juntamente com os dois atributos anteriores, isso forma a chave exclusiva para esta tabela.
  • latitude e longitude — usado para ajudar o Papai Noel a encontrar a cidade em seu mapa ou inserir suas coordenadas no sistema de navegação que ele usa.

Claro, você não pode ter desejos sem pessoas! Armazenaremos uma lista de todas as pessoas na person tabela. Para cada indivíduo, armazenaremos um first_name , last_name , birth_date , e city . Também armazenaremos o endereço da pessoa, bem como quaisquer delivery_details adicionais Papai Noel pode precisar considerar (como uma nota indicando que uma pessoa não tem chaminé).

A última tabela desta seção contém a wish_list que armazena todos os desejos de Natal já feitos. Para cada desejo, precisamos saber:
  • person_id — uma referência à pessoa que fez o desejo.
  • item_type_id — uma referência ao item (tipo) que a pessoa solicitou.
  • quantity — a quantidade desejada do item especificado no desejo.
  • details — todos os detalhes que podem ajudar o Papai Noel a realizar o desejo.
  • ts — denota o momento em que o desejo foi armazenado em nosso sistema, o que é importante para determinar o ano em que o desejo foi feito.
  • gift_id — uma referência à tabela de presentes que denota o presente que foi entregue para cumprir esse desejo.

Seção 3:Entregas



Agora, finalmente chegamos à parte mais interessante do nosso modelo de dados:presentes e entregas!

Após a produção de um único item, inseriremos seu registro relacionado no item tabela. Observe que, quando um item é produzido, ele ainda não é atribuído a nenhum presente, portanto, o gift_id O atributo conterá um valor nulo até que o item seja associado a um presente específico. Também precisaremos armazenar o tipo de item que foi produzido (item_type_id ), bem como sua quantity . Embora a quantidade de um item seja principalmente 1, podemos esperar quantidades diferentes em alguns casos especiais (por exemplo, mais de 1 item combinado em um conjunto - isso é muito incomum, mas possível).

Continuando, combinaremos um ou mais itens para produzir um gift . Atualizaremos item.gift_id depois de embalarmos nossos itens selecionados nesse presente. Cada presente será entregue à pessoa relacionada (person_id ) e terá um status de rastreamento (current_status_id ), bem como um carimbo de data/hora de quando o Papai Noel planeja entregar o presente (delivery_time_planned ). Também atualizaremos o valor do wish_list.gift_id atributo para todos os itens que foram entregues com sucesso.

As duas últimas tabelas neste modelo de dados dizem respeito ao rastreamento de status de entrega. Primeiro, o status A tabela contém um status_name exclusivo valor que usaremos ao fazer referência ao status atual do gft (gift.current_status_id ). Além disso, o status_history table armazenará uma lista de todos os status de todos os presentes em nosso banco de dados, bem como os carimbos de data e hora de todas as atualizações de status (ts).

Esperamos que nosso modelo de dados ajude o Papai Noel a completar mais um ano de entregas bem-sucedidas para que todos possamos receber nossos presentes a tempo. Se você estiver com disposição para mais SQL com tema de Natal, a Vertabelo Academy preparou um desafio especial de férias de 24 consultas. Vá em frente e confira! Em nome da família Vertabelo, desejamos um excelente Natal!