我曾经使用过多个大型数据库,存储过程的名称差异很大:
SP_PrefixXXX
PrefixYyyXxx
Prefix: Rep, Act
命名的最佳实践是什么?我该如何以正确的方式组织它们?
我曾经使用过多个大型数据库,存储过程的名称差异很大:
SP_PrefixXXX
PrefixYyyXxx
Prefix: Rep, Act
命名的最佳实践是什么?我该如何以正确的方式组织它们?
sp_
前缀代表系统存储过程,不应该作为普通存储过程的前缀。如果这样做,每次都会额外访问master
数据库来查找该存储过程,如果它与其中一个存储过程同名,则将执行那个存储过程而不是你的存储过程。
除此之外,您可以自由地制定任何命名约定。我们公司使用的是子系统_对象_动作
的格式,例如main_Customer_Get
。这将把属于同一组的存储过程放在列表中接近一起。
最佳的命名规范是在整个数据库中保持一致的规范 :)
实际上,这取决于您和您的团队。只要清晰明了且合理,您就有相当大的自由度。只需确保无论您决定使用什么规范,每个人都遵守它。比规范本身更重要的是每个人都坚持使用它。
我倾向于避免使用sp_、usp_等前缀,因为我认为它们是多余的。例如,名为InsertCustomer的存储过程显然是一个存储过程,绝不会被误认为是表、视图或任何其他类型的对象。特别应避免使用sp_前缀。
我更喜欢CamelCase,但这也是个人偏好的问题。我希望我的存储过程名称能够很好地说明存储过程所做的事情,例如:
InsertSalesOrder PopulateItemStagingTables CalculateOrderSummary PrepareCustomerStatements
等等。
我喜欢为它们添加前缀,这样特定对象的SP就可以被分组在一起。所以,不是像下面这样写:
InsertUser UpdateUser DeleteUser GetUsers
而是像这样写:
AppName_User_GetUser AppName_User_InsertUser AppName_User_UpdateUser AppName_User_DeleteUser
我发现这样对于我在SQL管理应用程序和代码中的管理更容易。
像其他人说的那样,请勿以sp_为前缀。
我不确定在这种情况下是否真的有一个特定的“最佳实践”。在我现在所在的公司中,标准是使用usp[ProcedureName](没有下划线)。我个人更喜欢根本没有前缀,但如果你是新来公司或项目,并且他们有预先存在的标准,除非他们正在使用sp_,而在这种情况下有技术上的原因不使用它,否则这可能不值得争论,因为我肯定认为这在任何情况下都不是一个过分的标准。
通常在重新命名约定方面,如果您进行辩论,其他团队成员不同意您并且共识标准不同,则最好的政策是快速放手并接受共识;一致性通常比实际标准本身更重要,以及与其他团队成员相处融洽,不会被认为是“难搞”的人。
在命名时在名称前加上“SP_”是非常多余的:这是为实现而命名的(它是一个存储过程,而不是一个表或视图)。有很多其他方法(系统表、information_schema、你如何使用它)可以告诉你它是如何实现的。
相反,你应该根据它的接口来命名它,根据它对你的作用来命名。为了方便(因为许多事情最终会按字母顺序排序),我喜欢将类似的事物分组在类似的名称下,可能使用相同的前缀。
但再次强调,要根据其 功能 而非 实现方式 进行命名。
总的来说,我发现数据库对象的通用命名约定使用下划线而不是驼峰式大小写;这只是一种惯例。不是惯例的是,也普遍使用所有小写字母来命名数据库对象;这使你可以忽略可能区分大小写的服务器设置。
我倾向于给函数命名,不仅能够表达其功能,还能说明输入变量的含义。
例如: ProcessMathEquationWithFieldIdPlantId
这样做可以立即为其他使用者提供信息,我认为这很有帮助。
此外,我避免使用sp_和usp_以限制任何名称冲突的可能性。
我不是专业人士,但我喜欢这种方式
应用程序前缀 = XY; 视图 = v; 存储过程 = p; 函数 = f
Table: XY_Name
View: vXY_Name
Procedure: sXY_Name
Function: fXY_Name
你觉得呢?我知道一些人使用两个字符来识别对象类型,但对于大多数情况一个字符就足够了,不是吗?
这可能会有所帮助。作为前端/后端程序员,我在MySQL和SQLServer中都使用以下内容:
SPx_PAGE/MODULE_ACTION_OBJECT
x: R表示读取,I表示插入,U表示更新,W表示写入(如果索引不存在则结合插入,如果存在则结合更新),D表示删除。
页面/模块:调用该过程的位置
示例:
SPR_DASHBOARD_GET_USERS //reads users data
SPW_COMPANIES_PUT_COMPANY //creates or modifies a company