Estou desenvolvendo um banco de dados para um aplicativo. Eu tenho que criar procedimento armazenado para tabelas, para que os programadores possam simplesmente chamar o procedimento armazenado para implementar as funções. Estou com uma dúvida para implementar a seguinte lógica,
Por exemplo: Tabela de tipo de negócio
Procedimento armazenado
De acordo com meu conhecimento, pensei, este procedimento funcionará bem. Enquanto chamo o nome do procedimento da seguinte maneira,
Call businesstype('insert', 1, 'Marketing Online', datetime(),'raj', datetime(), 'raj', 1); Sempre precisa chamar este procedimento com todos os seus parâmetros, mas os desenvolvedores precisam chamar o procedimento com os campos obrigatórios, por exemplo, eles precisam chamar apenas o ID (PK) para executar a função de exclusão, mas requer alguns valores (NULL) para restante parâmetros. Como realizar esta ação? Sou apenas um iniciante, espero algumas práticas recomendadas para implementar isso. Também preciso saber se o design e o procedimento da tabela fornecidos atenderão às expectativas do setor. é bom implementar dessa forma?
Desde já, obrigado.
Na minha opinião, um procedimento deve fazer uma coisa e apenas uma coisa. A lógica deve ser executada no código do aplicativo. Em segundo lugar, um procedimento não deve retornar um conjunto de resultados. Ele deve funcionar e possivelmente retornar um status, por exemplo, sucesso, falha ou algo semelhante. Além disso, o nome do seu procedimento não tem sentido. Escolha um nome descritivo.
Portanto, divida-o em três procedimentos (inserir, atualizar e excluir). Mova a instrução select para uma exibição em vez de um procedimento. Deixe seus programadores adicionarem a lógica em seu código para determinar qual chamar. Certifique-se de colocar o índice na mesa.
Nunca faça um
select *
. Selecione apenas as colunas necessárias. Pode ser que você adicione colunas mais tarde, mas você ainda o faráSELECT *
. VocêSELECT *
armazenará todas as colunas (incluindo colunas desnecessárias) na memória e, na pior das hipóteses, ficará sem memória e trocará para o disco.Isso deve ser três procedimentos.
Um procedimento armazenado em um banco de dados, quando usado como você está tentando, deve ser como um método em uma classe: ter um propósito e um nome bem definidos, fazer uma coisa e retornar algo previsível.
Deve haver um procedimento para selecionar que pode receber um parâmetro de ID opcional e retornará o menor número de linhas possível (filtrado por ID ou não, com base na disponibilidade). Você nunca deve usar
select *
! Se você assumir que o uso de*
em uma consulta SQL é um bug, você não estará errado com frequência. (Exceção óbvia: count(*)is pretty harmless). Instead, list each column individually each time. This may seem like a pain now, but if the structure of the table were ever to change and you had
select *` o aplicativo falharia imediatamente.Deve haver um procedimento para atualização e inserção que exija todos os campos da tabela, exceto o ID, que é permitido e opcional. Se o ID estiver presente, o procedimento será atualizado, caso contrário, insira. Nenhum conjunto de resultados deve ser retornado.
Deve haver um procedimento para exclusão que usa um parâmetro de ID obrigatório; ele não deve retornar nenhum conjunto de resultados.
Isso fornece uma API direta que os desenvolvedores do cliente podem usar para fazer o que lhes interessa: ler, gravar, excluir.