Aar*_*nLS 13 sql t-sql sql-server naming-conventions
什么是一个场景,例证了在SQL Server中对函数名使用前缀(例如fn_GetName)的一个很好的理由?似乎没有必要,因为通常使用它的上下文会清楚它是一个函数.我还没有使用任何其他需要函数前缀的语言,我想不出一个好的场景可以说明为什么SQL有什么不同.
我唯一的想法是,也许在较旧的IDE中,当数据库对象全部列在一起时,将函数分组在一起很有用,但现代IDE已经明确了什么是函数.
gbn*_*gbn 17
你对旧的IDE是正确的
作为一名DBA,尝试使用SQL Server企业管理器(SQL Server 2000和7.0)修复权限时,尝试查看权限是完全错误的.如果您使用ufn或usp或vw,由于GUI如何呈现数据,因此将事物组合在一起变得更容易.
说,如果你有SELECT * FROM Thing,那是什么东西?一个视图还是一个表?它可能对您作为开发人员有用,但在部署时会崩溃,因为您没有授予对表本身的权限:只有视图或过程.肯定vwThing会让你的血压下降......?
如果你使用模式,那就变得无关紧要了.您可以"命名"您的对象.例如,"数据"中的表和其他模式中每个客户端的其他对象,例如WebGUI
编辑:
功能.您有表值和标量函数.如果你坚持代码"VerbNoun"的概念,你怎么知道哪一个没有其他线索.(当然,这不可能发生,因为对象名称是唯一的)
SELECT dbo.GetName() FROM MyTable
SELECT * FROM dbo.GetName()
Run Code Online (Sandbox Code Playgroud)
如果你使用复数来表示一个表值函数,这可能会更糟
SELECT dbo.GetName() FROM MyTable
SELECT * FROM dbo.GetNames()
Run Code Online (Sandbox Code Playgroud)
虽然这不那么模棱两可,虽然冒犯了一些人;-)
SELECT dbo.sfnGetName() FROM MyTable
SELECT * FROM dbo.tfnGetName()
Run Code Online (Sandbox Code Playgroud)
使用架构.并没有名称含糊不清.
SELECT ScalarFN.GetName() FROM MyTable
SELECT * FROM TableFN.GetName()
Run Code Online (Sandbox Code Playgroud)
您的"任何其他语言"评论不适用.SQL的结构不像c#,Java,f#,Ada(好的,PL/SQL可能是),VBA,等等:没有对象或命名空间层次结构.没有Object.DoStuff方法的东西.
前缀可能只是让你保持理智的东西......
像所有命名约定一样,实际上约定实际上并不重要.真正重要的是保持一致.因此,即使惯例是错误的,坚持它以保持一致性仍然很重要.是的,可能有人认为,如果命名约定是错误的,那么它应该被更改,但是工作意味着很多:重命名所有对象,更改源代码,所有维护过程,让开发团队致力于遵循新约定,所有支持和操作人员都遵循新的规则等等.在一个大型组织中,改变既定命名惯例的努力只是压倒一切.
我不知道你的情况是什么,但在为了'漂亮'而提出命名约定之前你应该仔细考虑.无论你的组织中现有的命名约定有多糟糕,坚持它并保持命名一致性要好于忽略它并开始自己的命名约定.
当然,命名约定通常不仅很糟糕,也没有遵循,名称也不一致.在那种情况下,糟透了...
| 归档时间: |
|
| 查看次数: |
12586 次 |
| 最近记录: |