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.
-
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.
-
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.
-
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:
- Itens
- Pessoas e listas de desejos
- 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
elongitude
— 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!