我曾与几个大型数据库合作,存储过程的名称非常不同:
SP_PrefixXXX
PrefixYyyXxx
Prefix: Rep, Act
命名的最佳做法是什么?我怎样才能以正确的方式组织它们?
答案 0 :(得分:52)
sp_
前缀代表系统过程,不应该用作常规过程的前缀。如果这样做,它将首先每次额外访问master
数据库以查找该过程,如果它与其中一个过程具有相同的名称,则将执行该过程而不是您的过程过程
除此之外,您可以自由地编写您喜欢的任何命名约定。我们公司使用的是subsystem_object_action
,例如main_Customer_Get
。这使得属于一起的程序在列表中彼此接近。
答案 1 :(得分:7)
最佳命名约定是整个数据库中的一致性:)
真的,这取决于你和你的团队。只要它清晰明了,你就有一点余地。只要确保无论你决定什么,每个人都坚持它。比公约本身更重要的是每个人都坚持下去。
我倾向于避免使用sp_,usp_等,因为我发现它们是多余的。例如,名为InsertCustomer的sproc显然是一个sproc,并且绝不会混淆表,视图或任何其他类型的对象。特别应该避免sp_。
我更喜欢CamelCase,但同样,这是一个偏好问题。我喜欢我的proc名称,以便很好地指示proc的作用 - 例如:
InsertSalesOrder PopulateItemStagingTables CalculateOrderSummary PrepareCustomerStatements
等
答案 2 :(得分:7)
我喜欢为它们添加前缀,因此SP处理特定对象的组合在一起。所以不是像:
InsertUser UpdateUser DeleteUser GetUsers
我这样做:
AppName_User_GetUser AppName_User_InsertUser AppName_User_UpdateUser AppName_User_DeleteUser
我发现在我的SQL管理应用程序和代码中也很容易管理。
与其他人说的一样,不要以 sp _
作为前缀答案 3 :(得分:6)
不是“sp_”,也不是“usp_”。我们知道他们是存储过程,命名方案不需要告诉我们。
我通常只是为他们所做的事情命名,可能在模式上将它们分区。例外情况是我将对存储过程使用“ssis_”前缀,这些存储过程不直接用作“正常”数据库操作的一部分,但是SSIS包用它来引用数据库。我可以使用“fn_”来表示一个函数,以区别于存储过程。
答案 4 :(得分:6)
我不知道在这种情况下是否确实存在特定的“最佳实践”。对于我现在的公司,标准是usp [ProcedureName](没有下划线)。我个人不会喜欢任何前缀,但是如果你是一个新的公司或项目并且他们有预先存在的标准,除非他们使用sp_哪里有技术原因不使用它,它可能不是这个问题值得辩论,因为我当然不认为这是一个令人震惊的标准。
一般来说,重新命名惯例,如果你确实有辩论而其他团队成员不同意你并且共识标准不同,那么最好的政策就是尽快让它去接受共识;一致性通常比实际标准本身更重要,因为它与其他团队成员相处得很好而没有因“困难”而声名鹊起。
答案 5 :(得分:2)
好吧,在名称前添加“SP_”几乎是多余的:它为实现命名(它是一个SP,而不是一个表或一个视图)。还有很多其他的方法(systebales,information_schema,你如何使用它)会告诉你它已经实现了。
相反,你应该为它的界面命名,为它做什么。为了方便起见(因为很多事情最终按字母顺序排序),我喜欢用类似名称分组,可能使用相同的前缀。
但是,再次命名为它做什么,而不是它是如何实现的。
通常,我发现数据库对象的常见命名约定使用下划线而不是CamelCase;这只是一个惯例问题。不仅仅是约定,也是对数据库对象使用全小写字母的通用惯例;这允许您忽略可能或可能不区分大小写的服务器设置。
答案 6 :(得分:1)
我倾向于尝试提供名称,不仅可以了解函数的用途,还有输入变量的含义。
例如: ProcessMathEquationWithFieldIdPlantId
我相信,这将有助于立即向使用它的任何人提供信息。
我也避免使用sp_和usp_来限制名称冲突的可能性。
答案 7 :(得分:0)
我不是专业人士,但我喜欢这样
申请前缀= XY; View = v;存储过程= p;功能= f
Table: XY_Name
View: vXY_Name
Procedure: sXY_Name
Function: fXY_Name
你怎么看?我知道有些人使用这两个字符来识别对象类型,但对于大多数情况,一个字符就够了,对吗?
答案 8 :(得分:0)
更好地为单独的模块创建模式。
然后给出有意义且简单的名字。
例如:如果你正在上学项目。
创建学生架构
程序名称: AddStudent
因此在程序清单
中看起来像 Student.AddStudent教师模块的相同内容
答案 9 :(得分:0)
这可能会有所帮助。由于我是前端/后端程序员,我对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
答案 10 :(得分:0)
我们使用了这个约定:Prefix_Factory_Action
前缀
工厂
在我们的命名空间或任何其他逻辑结构中使用的名称。它不是一张桌子,尽管它通常与一张桌子同名。示例包括论文、教职员工和学生
行动
正在执行的操作类型,例如获取、设置、插入、更新、删除、保存、填充、重新填充等
Action 有时后跟限定词,例如 For/By/In
示例