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

Servindo comida deliciosa (e dados) – um modelo de dados para restaurantes


Que papel o design de banco de dados desempenha na administração de um restaurante? Como pode ser o modelo de dados para um banco de dados de restaurante? Descubra neste artigo.

Um restaurante serve as pessoas com comida pronta. Este é um tipo de negócio que está prosperando em todo o mundo, e muitas vezes com muito brilho. As pessoas se sentem muito à vontade para ir a restaurantes e estão começando a esperar uma grande variedade de opções quando se trata de sua próxima refeição.

Só na cidade de Nova York, existem mais de 24.000 restaurantes. Isso inclui takeaways (ou seja, pizza, sublojas, comida chinesa), delicatessens, cafés e restaurantes finos. O seguinte ditado se encaixa muito bem na indústria de restaurantes; é praticamente sua declaração de missão universal:

Faça o que você faz tão bem que eles vão querer ver de novo e trazer seus amigos e familiares junto.

Walt Disney

Por que os restaurantes precisam de bancos de dados?


A gestão de restaurantes não é uma tarefa fácil. Quando se trata de acompanhar e executar tarefas do dia-a-dia, mesmo o dono de restaurante mais experiente pode ter mais do que pode gerenciar facilmente. Administrar um restaurante lucrativo requer gerenciar estoque/estoque, minimizar o desperdício, gerenciar mesas (especialmente nos horários de pico), manter um cardápio amigável ao cliente, executar pedidos com eficiência e supervisionar a equipe do restaurante. Isso é bastante!

Um sistema de gestão de restaurante deve realizar a maioria dessas atividades com o mínimo de intervenção manual. Tem que apresentar aos gerentes informações precisas para que eles possam manter os clientes satisfeitos. Isso pode significar fazer alterações apropriadas no cardápio e até mesmo no funcionamento do restaurante.

O modelo de dados do restaurante


Este artigo é sobre como projetar um modelo de dados completo para um restaurante (jantar no local ou para levar). Também abordaremos dois grandes problemas que as pessoas do ramo de restaurantes encontram em suas atividades diárias. Por fim, pensaremos nas mudanças necessárias para construir esses recursos em um sistema existente.

À medida que mergulhamos no modelo de dados, mencionarei certas funções de usuário. Essas funções são, na verdade, para membros da equipe, como:
  • Gerente – Gerencia estoque, folha de pagamento, agendamento de funcionários e métricas do restaurante
  • Anfitrião – Senta os convidados e atribui os servidores às mesas
  • Garçom (também conhecido como servidor) – leva os pedidos dos clientes para a cozinha e entrega o pedido preparado ao cliente
  • Supervisor (também conhecido como chef ou cozinheiro chefe) – supervisiona as tarefas na cozinha e atribui tarefas aos cozinheiros
  • Cozinhar – Lê os detalhes do pedido recebido do supervisor, prepara a comida e informa ao supervisor quando estiver pronta
  • Busboy – Mantém o controle de quais tabelas estão sendo usadas; limpa as tabelas e atualiza seu status conforme necessário

Um modelo de dados para um negócio de restaurante deve ter os seguintes recursos elementares:
  • Gerenciamento de KOT (Kitchen Order Token)
  • Gerenciamento de KOD (Kitchen Order Delivery)
  • Gerenciamento de menus

Vejamos cada um desses recursos em detalhes.

Gerenciamento de KOT (Kitchen Order Token)


Esta é a parte mais importante do nosso modelo de dados:trata-se de coletar detalhes de pedidos de clientes por meio de vários canais. Por que vários canais? Porque existem várias formas de fazer os pedidos – online ou via aplicativo móvel, por telefone, ou por meio de garçons ou outros funcionários. Sempre que um pedido é feito por um cliente, é gerado um KOT (Kitchen Order Token). Eventualmente, o KOT será preparado pela equipe da cozinha.



Vou criar uma tabela, kot , para manter os detalhes do pedido preliminar. Esta tabela tem as seguintes colunas:

Nome da coluna Descrição
Id A chave primária para esta tabela
order_channel_id O canal pelo qual o pedido é feito.
dine_in_table_sitting_id A tabela de origem do pedido. Esta coluna será preenchida apenas no caso de pedidos de jantar.
order_in_time O timestamp quando o pedido é registrado no sistema
order_out_time O carimbo de data/hora quando o pedido é entregue pela equipe da cozinha
staff_id O ID da pessoa que coleta o pedido. No caso de pedidos de jantar, esta coluna contém o ID do garçom que retira o pedido. Em outras configurações, esse ID seria 'SYSTEM'.
kot_status_id Define o status atual de um KOT.



Gostaria de salientar que um pedido coletado de uma mesa por vez é marcado em um kot_id . Se a mesma tabela solicitar mais itens posteriormente, o sistema gerará outro kot_id e marcará todos esses novos itens com esse ID. No final, todos os kot_ids para a mesma mesa serão somados na conta final.

O gerenciamento KOT requer tabelas estáticas e transacionais adicionais, que são:
  • order_channel – Esta tabela contém detalhes sobre os canais que um restaurante usa para aceitar pedidos. Exemplos comuns incluem on-line, jantar no local, levar (realizar), etc.

  • dine_in_table_sitting – Esta é uma tabela transacional que armazena dados de ocupação da tabela. Suas colunas incluem dine_in_table_id , dine_in_time , dine_out_time , num_person_sitting e customer_id . Assim que o host atribui um cliente a uma tabela e insere as informações no sistema, um registro é inserido nessa tabela. Para buscar o status de ocupação atual das tabelas em um determinado momento, esta é a tabela que será utilizada.

    Suponha que você queira construir esse recurso. Aqui está o SQL que informará o status de ocupação atual de todas as mesas do restaurante:

    SELECT 
      b.id as table_id,
      c.area_desc,
      CASE 
        WHEN a.dine_in_table_id IS NULL THEN ‘VACANT’ 
        ELSE ‘OCCUPIED’
      END AS current_table_status
    FROM dine_in_table_sitting a, dine_in_table b, dine_in_table_area
    WHERE a.dine_in_table_id (+) = b.id
    	AND b.dine_in_table_area = c.id
    	AND a.dine_out_time IS NULL;
    

  • kot_status – Esta tabela contém todos os status possíveis para um KOT:pedido recebido , pedido em andamento , pedido entregue , etc.
  • kot_menu_item – Esta tabela transacional armazena os detalhes de todos os itens em um KOT. Ele também define a relação entre o KOT e um menu_item . O menu_item_id e quantity campos contra um kot_id significar o item no pedido e quanto dele é necessário.

Gerenciamento de KOD (entrega de pedidos de cozinha)


Grande parte do desempenho de um restaurante se resume ao gerenciamento do KOT dentro da cozinha. Normalmente, um supervisor coleta KOTs de garçons, outros funcionários ou um sistema online. Em seguida, o supervisor atribui os itens do menu a um ou mais cozinheiros. O cozinheiro prepara os itens e os entrega ao supervisor. Em seguida, o garçom ou outro membro da equipe coleta o pedido e o entrega ao cliente.

Mas isso não é tudo o que o gerenciamento KOD inclui. Gerenciar recursos, estocar ingredientes, atualizar regularmente o estoque restante e solicitar novos estoques conforme necessário também faz parte da operação diária da cozinha. O supervisor desempenha um papel de destaque no bom funcionamento da cozinha, principalmente nos horários de pico. Um sistema é considerado “inteligente” ou “inteligente” se puder replicar as funções de trabalho de um supervisor – o que é quase impossível na maioria dos lugares.



Para construir um modelo para essa parte complexa de gerenciamento, criarei outra tabela, chamada KOD . Esta tabela é composta pelas seguintes colunas:

Nome da coluna Descrição
Id Chave primária para esta tabela
kot_menu_item_id Significa o item KOT em que a equipe da cozinha está trabalhando no momento
staff_id Armazena o ID do cozinheiro que está preparando o item
kod_status_id Mostra o status atual do item


Gerenciamento de menus


Este componente é tão importante quanto o gerenciamento de KOT e KOD. O cardápio – tanto na apresentação visual quanto nos pratos que oferece – é uma das primeiras coisas que atrai os clientes. Assim, todo dono de restaurante tenta manter seu cardápio o mais atraente possível.



Vamos criar outra tabela para conter os detalhes do menu. Vou adicionar colunas para todos os detalhes que costumamos ver em um menu:

Nome da coluna Descrição
Id A chave primária da tabela
Item_name Um nome curto para um item de menu
Item_category_id Significa a categoria de culinária do item:italiana, continental etc.
Item_desc Contém detalhes do item, como uma lista de ingredientes ou como o item é preparado (assado, cozido no vapor etc.)
Item_image Uma imagem chamativa do item.
cost O custo do item


Resolvendo problemas de restaurantes do mundo real com dados


Alguns problemas são extremamente comuns no mundo do food service. Em particular, estou pensando em longos tempos de espera, tanto para sentar à mesa quanto para pegar sua comida. Esses problemas geralmente podem ser resolvidos, pelo menos parcialmente, com uma melhor organização e uso dos dados do restaurante.

Em um ambiente de jantar, poucas coisas são mais irritantes para os clientes do que ter que esperar muito tempo por uma mesa. Minimizar os tempos de espera dos clientes durante os horários de pico requer uma vigilância atenta sobre o status das mesas individuais. Se não houver uma gestão adequada de mesas e funcionários, os tempos de espera dos clientes começam a crescer. Se os tempos de espera forem muito longos, os clientes podem sair e procurar outro restaurante que os atenda rapidamente.

Pode-se abordar essa preocupação introduzindo certas alterações nesse modelo de dados. Essas mudanças seriam:
  1. Adicione gerenciamento de mesa em tempo real, uma maneira digitalizada de gerenciar a disponibilidade de mesa, rastreamento de status e taxas de utilização.
  2. Reduza o tempo de retorno das mesas medindo a eficiência da equipe e permitindo um planejamento eficaz da força de trabalho, por exemplo, reunindo uma equipe de limpeza e designando a equipe para uma mesa ou um grupo de mesas.
  3. Publique o status em tempo real de mesas individuais nas telas dos gerentes, para que eles possam ficar de olho nas atividades pendentes há muito tempo.



Outro problema é fazer os clientes esperarem pela comida. Tanto para os clientes do restaurante quanto para o take-away, isso pode ser ajudado fornecendo atualizações de status diretamente para o restaurante. Monitorar o status de KOTs individuais é vital aqui. À medida que o KOT avança na cozinha, seu status é atualizado no KOT tabela. Esse mecanismo fornece uma atualização em tempo real aos clientes sobre o status de seus pedidos.





Como podemos melhorar este modelo de dados de restaurante?


Há tantas ideias inovadoras que os proprietários e operadores de restaurantes estão apresentando para atrair e reter seus clientes. Por exemplo:
  • Muitas administram programas de fidelização de clientes. Estes mantêm uma conta de fidelidade para os clientes e dão pontos aos hóspedes por cada visita, compra, etc. Os clientes podem descontar esses pontos como e quando quiserem por várias recompensas (geralmente comida grátis, uma porcentagem do cheque ou uma refeição grátis) .
  • Alguns restaurantes tornam seus itens de menu o mais personalizáveis ​​possível. Eles permitem que seus clientes escolham ingredientes para saladas ou massas, ou substituem os alimentos para atender a certas restrições alimentares.

O gerenciamento de estoque é outra área que desempenha um papel de destaque na lucratividade de um restaurante.

Podemos construir esses recursos nesse modelo de dados? Compartilhe seus pensamentos na seção de comentários abaixo.