我已经看到各种规则》命名的存储程序。

一些人的前缀sproc名与usp_,其他用的缩写的应用程序的名称,其他人仍然与所有人的名字。你不应该使用sp_在SQL服务器,除非你真是这个意思。

一些开始的进程名称用词的(获得、增加保存,删除).其他人强调实体的名称(s)。

在一个数据库与数以百计的sprocs,它可以非常难以滚动周围,找到一个合适的sproc当你认为一个已经存在。命名约定可使定位sproc更加容易。

你使用一个命名的公约?请说明,并解释为什么你喜欢它比其他选择。

摘要的回答:

  • 每个人似乎都提倡的一致性命名,它可能是更重要的是每个人都使用同一个命名的公约》于其特定的一个被使用。
  • 前缀:同时有很多人使用usp_或类似的东西(但很少sp_),许多其他使用数据库或程序的名称。一个聪明的DBA使用艮,rpt和啧区分一般的污物sprocs从那些用于报告或任务。
  • 动词+名词似乎是稍微更受欢迎于名词+动词。一些人使用SQL关键词("选择",插入、更新、删除)为动词,而其他人使用非SQL动词(或缩略语为他们的)想获得和Add.一些区分singluar和复数的名词,以表明是否有一个或多记录检索。
  • 一个额外的短语建议结束时,在适当情况下。GetCustomerById,GetCustomerBySaleDate.
  • 一些人使用下划线的名称之间分段和某些避免了下划线。app_Get_Customer与appGetCustomer-我猜这是一个问题的可读性。
  • 大型的集合sprocs可以分成Oracle软件包,或管理工作室(SQL服务器)的方案和项目,或SQL服务器架构。
  • 高深莫测的缩写应是可以避免的。

为什么我选择的回答我: 有这么多好的答复。谢谢你!正如你可以看到,这将是非常困难的选择只有一个。一个我选择了共鸣我。我有着相同的路径他所描述的--尝试使用的动词+名词和随后没有能够找到的所有sprocs适用于客户。

能够找到一个现有的sproc,或者确定如果一个人即使存在,是非常重要的。可能会出现严重的问题,如果某人无意中造成重复sproc与另一个名称。

因为我一般工作在很大的应用程序与数以百计的sprocs,我们倾向于简单易找到的命名方法。对于较小的程序,我可能主张的动词+名词,因为它遵循一般的编码公约》的方法的名称。

他还倡导者的前缀与应用程序的名称,而不是不是很有用的usp_.几个人指出,有时候数据库包含sprocs为多个应用程序。因此,前面加上与应用程序的名称有助于隔离sprocs,并有助于数据库管理员和其他人,以确定哪些应用程序的sproc用。

有帮助吗?

解决方案

我的最后一个项目,我用usp_[行动][目的][过程]因此,例如,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

它有助于组的东西更容易查找后,特别是如果有大量的sprocs.

关于那里的多个对象是使用,我发现,大多数情况下,有一个主要和次要目的,因此主要目的是使用在正常的实例,和次级被称,在处理部分,例如App_Product_AddAttribute.

其他提示

这里的一些澄清有关sp_前缀问题SQL服务器。

存储程序的命名前缀sp_是系统sprocs存在主数据库。

如果你给你的sproc有这种前缀,SQL服务器上看起来他们在主数据库,然后上下文的数据库,因此不必要地浪费了资源。并且,如果用户创建sproc具有相同的名称,作为一个系统sproc,用户创建sproc不会被执行。

Sp_前缀表示的sproc是可以从所有数据库,但是,它应该是执行在目前的数据库。

这里的 一个很好的解释,其中包括演示性的打击。

这里的 另一有用来源提供的蚂蚁在评论。

系统匈牙利 (如上述"usp"前缀)使我不寒而栗。

我们有许多共同的储存程序不同,同样的结构化数据库,因此对数据库特定的人,我们使用的前缀的数据库名称本身;共享过程具有不前缀。我假设采用的不同模式的可能替代摆脱这样有点丑陋的前缀。

实际名称之后的前缀是几乎没有不同的功能命名:通常一个动词,如"增加"、"设定"、"生成"、"计算"、"删除",等等, 随后通过更多具体名词,如"用户"、"DailyRevenues",等等。

应对蚂蚁的评论:

  1. 之间的差异表和一个观点是有关以那些设计数据库模式,而不是那些访问或修改其内容。在罕见的情况下,需要架构的细节,这是很容易找到。休闲选择的查询,这是无关紧要的。事实上,我认为能够享的表格并享有同样作为一个很大的优势。
  2. 不同的功能和储存程序,该表名称或图是不可能开始一个动词,或是任何东西,但一个或多个名词。
  3. 一个功能需要架构的前缀被称为。事实上,呼叫法(那我们的使用,无论如何)是非常之间的不同功能和存储的过程。但即使如果不是,同样为1。将适用于:如果我可以治疗的功能和存储程序相同,为什么不应该吗?

开始存储程序的名字sp_ 是坏在SQL服务器,因为该系统sprocs所有开始sp_.致命(即使程度的妖怪-dom)是有用的,因为它facilititates自动化的任务基础上的数据字典。前缀略少用于SQL服务器2005年,它所支持的模式,这可以使用各种类型的名字空间的方式的前缀在名称使用。例如,在一个明星的架构,一个可能 昏暗的事实上 模式和参照表这一公约。

存储程序,前缀是有用的目的识别程序sprocs从系统sprocs. up_sp_ 使得它比较容易确定非系统存储程序,从数据字典。

TableName_WhatItDoes

  • Comment_GetByID

  • Customer_List

  • UserPreference_DeleteByUserID

没有前缀或傻匈牙利无稽之谈。只是表的名称是最密切参与,并快速说明它做什么。

一个警告:我个人一直前缀我所有的自动生成的污物与zCRUD_因此,这种结束的清单在哪里我没有看待它。

我已经使用了几乎所有不同的系统。我终于开发这一个,我继续使用今天:

前缀:

  • gen-General:污物,主要是
  • rpt报告:自明的
  • 啧任务:通常的东西与程序的逻辑,通过运行计划的作业

行动说明符:

Ins - INSERT
Sel - SELECT
Upd - UPDATE
Del - DELETE

(情况下的程序做了很多事情,总的目标是用于选择行动的说明符。例如,一个客户插入可能需要大量的准备工作,但总的目标是插入,因此"程序"。

对象:

为艮(污物),这是表格或图名称受到影响。为rpt(报告),这是简短描述的报告。为啧(任务),这是简短描述的任务。

可选的澄清:

这些都是可选的位的信息用于增强理解的程序。例子包括"由","For",等等。

格式:

[前缀][行动符的][实体][可选澄清]

例的程序的名称:

genInsOrderHeader

genSelCustomerByCustomerID
genSelCustomersBySaleDate

genUpdCommentText

genDelOrderDetailLine

rptSelCustomersByState
rptSelPaymentsByYear

tskQueueAccountsForCollection

我一直封存储程序 包裹 (我采用Oracle,在工作)。这将减少的数量的单独的目的和帮助码的再利用。

命名约定是一种口味的问题和有些东西你应该同意所有其他开发项目开始。

对于小型数据库,使用uspTableNameOperationName,例如uspCustomerCreate,uspCustomerDelete,等等。这有利于分组的'主要'的实体。

对于较大的数据库,添加一个架构或子系统的名称,例如接收、采购等等。保持他们组合在一起(由于sql服务器喜欢显示他们按字母排序)

我尽量避免的缩写名称,为清楚起见(新人在该项目上没有怀疑什么'UNAICFE'代表,因为sproc名为uspUsingNoAbbreviationsIncreasesclarityforeveryone)

我目前使用的格式如下

符号:

[前缀][应用][模块]_[NAME]

例如:

P_CMS_USER_UserInfoGet

我喜欢这记号为几个原因:

  • 开始很简单的前缀允许代码被写入仅执行对象开始以前缀(减少SQL注,例如)
  • 在我们的大环境下,多个团队的工作在不同的应用程序,它运行的相同数据库结构。该应用程序的符号表示该集团拥有SP。
  • 该模块和名称的章节简单地完成状视图.所有的名称应该能够匹配小组/应用程序、模块的功能状视图.

我总是使用:

usp[表名][行动][额外的细节]

给出一个表叫做"tblUser",这给了我

  • uspUserCreate
  • uspUserSelect
  • uspUserSelectByNetworkID

该程序都按字母顺序排序表名字和功能,因此很容易看到什么我可以做任何特定的表格。使用的前缀"usp"让我知道什么我打电话如果我是(例如)编写一1000行的程序,与其他程序中,多个表格、职能、观点和服务器。

直到编辑在SQL服务器IDE是如Visual Studio我保持的前缀。

应用程序prefix_操作prefix_说明的数据库涉及的对象 (减空间之间突显了-不得不把空间,在为他们会出现).

操作前缀我们使用

  • 获得"–返回的记录集
  • ins"插入的数据
  • upd"更新数据
  • "–删除的数据

e.克

wmt_项_客户_details

"劳动力管理工具,插入的详细信息到客户的桌"

优点

所有储存的程序有关的相同的应用组合在一起的名字。在群组内,储存过程进行同样的操作(例如插入、更新等等。) 都组合在一起。

这个系统的工作原理以及对我们来说,具有约。1000存储程序在一个数据库掉我的头顶。

还没遇到的任何缺点,这个办法为止。

GetXXX得到XXX基于@ID

GetAllXXX-得到所有XXX

PutXXX-插入XXX如果通过@ID is-1;其他的更新

DelXXX-删除XXX基于@ID

我认为usp_命名的公约并没有任何好处。

在过去的,我已经使用的获得/Update/Insert/Delete的前缀。操作,但现在因为我使用皇宫SQL或EF做我的大部分污物的工作,这些都是完全消失了。因为我有这么几个储存处在我的新应用程序,对命名约定不再重要喜欢他们用;-)

当前,应用我的工作上,我们有一个前缀,标识应用程序的名称(四大写字母)。为此原因是,我们的应用程序必须能够共存的有遗留的应用程序在相同的数据库,因此该前缀是必须的。

如果我们没有遗留的约束,我相当确信,我们不会被使用的前缀。

之后的前缀我们通常开始SP名词描述的程序,然后实体的名称,我们的运作。复数形式的实体名称是允许的-我们试图强调可读性,所以,这是显而易见的是什么该过程并从名单。

典型存储程序的名字在我们的团队将:

shopGetCategories
shopUpdateItem

我不认为它真正重要的正是你的前缀所以只要你在逻辑和一贯的。我个人使用

spu_[行动的说明][进程的说明]

采取行动的介绍是一个小范围的典型行动,如获取、设置、归档,插入,删除等。该过程的描述是一些短但是描述性的,例如

spu_archiveCollectionData 

spu_setAwardStatus

我的名字我的功能相似,但前缀与udf_

我看到有人试图使用伪匈牙利表示法程序的命名,这在我看来隐藏多于它揭示。因此,只要当我名单,我按字母顺序的程序,我可以看到他们按功能,然后对我来说,这似乎是甜蜜点之间以及不必要的严密性

避免sp_*SQl服务器怎么把所有的系统存储prcedures开始sp_因此变得更加困难系统找到对应的名称。

所以如果你开始与其他的东西比sp_事情变得更加容易。

因此,我们利用一个共同的命名的Proc_开始。这使它更容易识别的程序,如果提出了一个大纲的文件。

此外,我们分配一个识别前缀的功能。喜欢

Proc_Poll_Interface, Proc_Inv_Interface 等等。

这使我们能够找到的所有储存的过程,它的工作的调查vs,并库存等等。

无论如何前缀系统取决于你的问题领域。但阿尔说过和做过类似的东西应该是本即使它可只是为了让人们quicly找到存储的过程中explorere下进行编辑。

其他例如是的功能。

Proc_Order_Place
Proc_order_Delete
Proc_Order_Retrieve
Proc_Order_History

我们跟踪功能的基础怎么命名过程是类似于代码/功能,而不是静态的物体,如表。它不会帮助这一过程可能会有一个以上的工作表。

如果该进程内进行更多的功能于可以处理在一个单一的名称,它意味着你proc是这样做的方式比必要更多及其时间分割。

希望这有所帮助。

我加入了晚线,但我想进入我的答复:

在我的最后两个项目有不同的趋势一样,在一个我们使用:

获得的数据:s<tablename>_G
删除的数据:s<tablename>_D
插入数据:s<tablename>日
更新的数据:s<tablename>_U

这个命名的公约也遵循了在前端,通过前面加上这个词 dt.

例如:

exec sMedicationInfo_G
exec sMedicationInfo_D
exec sMedicationInfo_I
exec sMedicationInfo_U

借助上述命名约定在我们的应用程序,我们有一个良好和容易记住的名字。

虽然在第二个项目,我们用同一个命名的公约莉儿的差别:

获得的数据:sp_<tablename>克
删除的数据:sp_<tablename>D
插入数据:sp_<tablename>我
更新的数据:sp_<tablename>U

例如:

exec sp_MedicationInfoG
exec sp_MedicationInfoD
exec sp_MedicationInfoI
exec sp_MedicationInfoU
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top