存储过程的命名约定是什么? [关闭]

2024-03-04

我见过各种命名存储过程的规则。

有些人在存储过程名称前加上 usp_ 前缀,其他人则使用应用程序名称的缩写作为前缀,还有一些人则使用所有者名称作为前缀。除非您确实这么想,否则不应在 SQL Server 中使用 sp_。

有些进程名称以动词开头(获取、添加、保存、删除)。其他人则强调实体名称。

在具有数百个存储过程的数据库上,当您认为存储过程已经存在时,可能很难滚动并找到合适的存储过程。命名约定可以使定位存储过程更加容易。

您使用命名约定吗?请描述它,并解释为什么您更喜欢它而不是其他选择。

回复摘要:

  • 每个人似乎都提倡命名的一致性,对于每个人来说,使用相同的命名约定可能比使用特定的命名约定更重要。
  • 前缀:虽然很多人使用 usp_ 或类似的名称(但很少是 sp_),但许多其他人使用数据库或应用程序名称。一位聪明的 DBA 使用 gen、rpt 和 tsk 来区分一般的 CRUD 存储过程和用于报告或任务的存储过程。
  • 动词+名词似乎比名词+动词更流行。有些人使用 SQL 关键字(Select、Insert、Update、Delete)作为动词,而其他人则使用非 SQL 动词(或其缩写),例如 Get 和 Add。有些区分单数和复数名词来指示是检索一个还是多个记录。
  • 在适当的情况下,建议在末尾添加一个附加短语。获取客户按 ID、获取客户按销售日期。
  • 有些人在名称段之间使用下划线,有些人则避免使用下划线。 app_ Get_Customer 与 appGetCustomer ——我想这是一个可读性问题。
  • 大量存储过程可以分为 Oracle 包或 Management Studio (SQL Server) 解决方案和项目,或 SQL Server 架构。
  • 应避免使用难以理解的缩写。

为什么我选择我所做的答案:有很多很好的回应。谢谢你们!正如您所看到的,很难只选择一个。我选择的那个引起了我的共鸣。我遵循了他描述的相同路径——尝试使用动词+名词,然后无法找到适用于客户的所有存储过程。

能够找到现有的存储过程,或者确定存储过程是否存在,非常重要。如果有人无意中创建了具有其他名称的重复存储过程,则可能会出现严重问题。

由于我通常处理具有数百个存储过程的大型应用程序,因此我更喜欢最容易找到的命名方法。对于较小的应用程序,我可能提倡动词 + 名词,因为它遵循方法名称的通用编码约定。

他还主张使用应用程序名称作为前缀,而不是不太有用的 usp_。正如一些人指出的那样,有时数据库包含多个应用程序的存储过程。因此,使用应用程序名称作为前缀有助于隔离存储过程,并帮助 DBA 和其他人确定存储过程用于哪个应用程序。


对于我的上一个项目,我使用了 usp_[Action][Object][Process],例如 usp_AddProduct 或 usp_GetProductList、usp_GetProductDetail。然而,现在数据库的程序数量已超过 700 个,查找特定对象上的所有程序变得更加困难。例如,我现在必须为产品添加搜索 50 多个添加过程,为获取等搜索 50 多个添加过程。

因此,在我的新应用程序中,我计划按对象对过程名称进行分组,我也放弃了 usp,因为我觉得它有点多余,除了告诉我它是一个过程,我可以从名称中推断出这一点程序本身。

新格式如下

[App]_[Object]_[Action][Process]

App_Tags_AddTag
App_Tags_AddTagRelations
App_Product_Add 
App_Product_GetList
App_Product_GetSingle

它有助于将事物分组以便以后更容易查找,特别是在存在大量存储过程的情况下。

关于使用多个对象的情况,我发现大多数实例都有主对象和次对象,因此在普通实例中使用主对象,在流程部分引用次对象,例如App_Product_AddAttribute。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储过程的命名约定是什么? [关闭] 的相关文章

  • 使用 .NET 中的类型化数据集将 SQL 参数传递给 IN() 子句

    首先道歉 因为该网站上有类似的问题 但没有一个直接回答这个问题 我在 VS 2010 中使用类型化数据集 我在数据集中创建一个 TableAdapter 查询如下 SELECT from Table WHERE ID IN IDs 现在如果
  • ASP SQL Server 连接

  • 如何连续添加起始行和下一行的值

    我只想创建一个 sql 查询 结果就像图片上的那样 类似于 SQL 中的斐波那契数列 Ex Column 1 10 则 Result 列的值为 Result 10 因为这是第一行 然后假设column1第二行的值为50 那么Result第二
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • 您在 Java 项目中使用什么策略进行包命名?为什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我不久前就想过这个问题 最近当我的商店正在开发第一个真正的 Java Web 应用程序时 这个问题又重新出现了 作为介绍 我看到两个主要的包命名
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • SQL Server:为什么 ISO-8601 格式的日期依赖于语言?

    我需要一些帮助来理解 SQL Server 中的日期格式处理 如果您尝试以下操作 它将返回正确的结果 SET LANGUAGE English SELECT CAST 2013 08 15 AS DATETIME 2013 08 15 00
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • IIF(...) 不是公认的内置函数

    我正在尝试在 Microsoft SQL Server 2008 R2 中使用它 SET SomeVar SomeOtherVar IIF SomeBool value when true value when false 但我收到一个错误
  • 仅具有存储过程的实体框架

    我对在我们的场景中仅使用实体框架与存储过程的合理性有疑问 我们计划拥有一个 N 层架构 包括 UI BusinessLayer BLL DataAccessLayer DAL 和 BusinessObjectDefinitions BOD
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • SQL:如何从一个表中获取另一个表中每一行的随机行数

    我有两个数据不相关的表 对于表 A 中的每一行 我想要例如表 B 中的 3 个随机行 使用光标这相当容易 但速度非常慢 那么我该如何用单个语句来表达这一点以避免 RBAR 呢 要获得 0 到 N 1 之间的随机数 可以使用 abs chec
  • SQL Server 中离线索引重建和在线索引重建有什么区别?

    重建索引时 有一个选项ONLINE OFF and ONLINE ON 我知道当ONLINE模式打开时 它会复制索引 切换新查询以利用它 然后重建原始索引 使用版本控制跟踪两者的更改 如果我错了 请纠正我 但是 SQL 在离线模式下会做什么
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo

随机推荐