什么是一个场景,例如在sql Server中的函数名称上使用前缀的好理由,例如fn_GetName?似乎这是不必要的,因为通常使用它的上下文会清楚地表明它是一个功能.我还没有使用任何其他语言,这些语言曾经需要在函数上使用前缀,我不能想到一个好的场景,可以显示为什么sql是不同的.
我唯一的想法是,也许在较旧的IDE中,当数据库对象都列在一起时,将功能分组在一起是有用的,但现代IDE已经明确了什么是功能.
解决方法
你对旧的IDE是正确的
作为DBA,尝试使用sql Server企业管理器(sql Server 2000和7.0)修复权限,这是完全错误的尝试查看权限.如果你有ufn或usp或vw,那么由于GUI如何呈现数据,变得更容易将事物分组在一起.
说,如果你有SELECT * FROM Thing,什么是Thing?视图还是桌子?它可能适用于您作为开发人员,但它将在部署时崩溃,因为您不会对表本身授予权限:只有视图或procs.当然,vwThing会让你的血压下降吗?
如果您使用模式,它将变得无关紧要.你可以“命名空间”你的对象.例如,“Data”中的表和其他模式中的每个客户端的其他对象,例如WebGUI
编辑:
功能.您有表值和标量函数.如果你坚持使用代码“VerbNoun”的概念,你怎么知道哪个是没有其他的线索. (当然,这不可能发生,因为对象名称是唯一的)
SELECT dbo.GetName() FROM MyTable SELECT * FROM dbo.GetName()
如果您使用复数来表示表值函数,这可以说更糟
SELECT dbo.GetName() FROM MyTable SELECT * FROM dbo.GetNames()
虽然这不太模糊,虽然对一些民众冒犯;-)
SELECT dbo.sfnGetName() FROM MyTable SELECT * FROM dbo.tfnGetName()
有了模式没有名字含糊不清
SELECT ScalarFN.GetName() FROM MyTable SELECT * FROM TableFN.GetName()
您的“任何其他语言”评论不适用. sql不是像c#,Java,f#,Ada(OK,PL / sql可能),VBA,没有对象或命名空间层次结构.没有Object.DoStuff方法的东西.
前缀可能只是让你保持一致的事情