我必须为我们的SQL Server组织和与之接口的任何代码开发数据库开发标准。使用的代码可以是从.NET代码到VBScript到SQL Server作业的任何代码。
有没有人有这种关系的良好链接?
我的快速列表如下:
1)命名约定
- 存储过程usp_AppName_SPName
- 函数usf_AppName_SPName
- 索引IX_TableName_IndexName
- 表AppName_TableName
- 查看VW_Name
2)对角色的权限分配,从不直接分配给用户或组
3)将角色分配给组,而不是直接分配给用户
4)使用最小权限
5)代码中没有内联sql,总是使用SP或函数
6)使用显式交易
7)适用时的只读交易
8)始终使用解释计划以确保sql具有高效性。
我们需要涵盖哪些其他事项?我确信有很多东西......
答案 0 :(得分:3)
由于我们在谈论最佳实践,因此我会提出一些要避免的事情:
P.S。顺便说一下 - 我正在做以上所有事情;)
答案 1 :(得分:2)
我必须立刻解决你的第一件事。虽然我知道很多人喜欢使用存储过程,表格等的前缀,但我从来没有太多使用该约定。当您开始获得大量以“usp_”开头的存储过程时,如果单击以展开Management Studio中的“可编程性\存储过程”文件夹,则导航可能相当笨拙。
相反,需要一个前缀来匹配逻辑功能集/功能组。这些前缀的含义因应用程序或数据库而异。然后,如果要区分存储过程和表,请将“_usp”要求添加为后缀。
对于表:您希望命名约定中的某些内容区分应用程序数据(查找表)和用户数据。
答案 2 :(得分:2)
我发现以下内容非常有用:
http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx http://www.codeproject.com/KB/database/sqldodont.aspx
答案 3 :(得分:2)
还要考虑使用多个模式。使用AppName.TableName而不是AppName_TableName,其中AppName是架构。例如,AdventureWorks示例就是这样做的。
答案 4 :(得分:0)
SQL Server中的角色和组不一样吗?
其他一些......
避免在WHERE子句中使用UDF
禁止在应用程序中使用直接SQL (总是使用SP)