我正在为一个应用程序开发一个数据库。我必须创建存储过程到表中,以便程序员可以简单地调用存储过程来实现功能。我对实现以下逻辑有疑问,
例如: 业务类型表
存储过程
据我所知,我认为这个程序可以正常工作。当我按如下方式调用过程名称时,
Call businesstype('insert', 1, 'Online Marketing', datetime(),'raj', datetime(), 'raj', 1); 每次都需要用它的所有参数调用这个过程,但是开发人员需要用必填字段调用这个过程,例如他们只需要调用ID(PK)来执行删除功能,但它需要一些值(NULL)来保留参数。如何执行此操作?我只是一个初学者,我期待一些最佳实践来实现这个,我还需要知道给定的表设计和过程是否符合行业期望?这样实现好不好?
提前致谢。
在我看来,一个过程应该做一件事并且只做一件事。该逻辑应在应用程序代码中执行。其次,过程不应返回结果集。它应该工作,然后可能返回一个状态,例如成功、失败或类似的东西。此外,您的程序名称毫无意义。选择一个描述性名称。
因此,将其分解为三个过程(插入、更新和删除)。将 select 语句移动到视图而不是过程中。让您的程序员在他们的代码中添加逻辑以确定调用哪一个。确保将索引放在表上。
永远不要做
select *
。只选择您需要的列。可能您稍后会添加列,但您仍然会SELECT *
。然后,您SELECT *
会将所有(包括不必要的列)列存储在内存中,在最坏的情况下,会耗尽内存并交换到磁盘。这应该是三个程序。
数据库上的存储过程,当您尝试使用时,应该像类上的方法:具有明确定义的目的和名称,做一件事,并返回可预测的东西。
应该有一个 select 过程,可以给它一个可选的 ID 参数,并将返回尽可能少的行(根据可用性过滤或不过滤 ID)。你不应该使用
select *
!如果您认为*
在 SQL 查询中使用 是一个错误,您就不会经常犯错。(明显的例外: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 *` 应用程序会立即失败。应该有一个更新和插入过程,它需要表中除 ID 之外的所有字段,ID 是允许的和可选的。如果 ID 存在,则过程将更新,否则插入。不应返回任何结果集。
应该有一个删除过程需要一个 ID 参数;它不应该返回任何结果集。
这提供了一个简单的 API,客户端开发人员可以使用它来做他们关心的事情:读、写、删除。