SQL Server数据库开发标准

时间:2009-07-01 22:57:26

标签: sql sql-server sql-server-2000

我必须为我们的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具有高效性。

我们需要涵盖哪些其他事项?我确信有很多东西......

5 个答案:

答案 0 :(得分:3)

由于我们在谈论最佳实践,因此我会提出一些要避免的事情:

  1. 避免使用xp_cmdshell
  2. 除非严格,否则请避免使用动态sql 必要的(例如动态旋转)
  3. 避免使用游标(如果没有使用游标 表)
  4. P.S。顺便说一下 - 我正在做以上所有事情;)

答案 1 :(得分:2)

我必须立刻解决你的第一件事。虽然我知道很多人喜欢使用存储过程,表格等的前缀,但我从来没有太多使用该约定。当您开始获得大量以“usp_”开头的存储过程时,如果单击以展开Management Studio中的“可编程性\存储过程”文件夹,则导航可能相当笨拙。

相反,需要一个前缀来匹配逻辑功能集/功能组。这些前缀的含义因应用程序或数据库而异。然后,如果要区分存储过程和表,请将“_usp”要求添加为后缀

对于表:您希望命名约定中的某些内容区分应用程序数据(查找表)和用户数据。

答案 2 :(得分:2)

答案 3 :(得分:2)

还要考虑使用多个模式。使用AppName.TableName而不是AppName_TableName,其中AppName是架构。例如,AdventureWorks示例就是这样做的。

答案 4 :(得分:0)

SQL Server中的角色和组不一样吗?

其他一些......

  1. 避免在WHERE子句中使用UDF

  2. 禁止在应用程序中使用直接SQL (总是使用SP)

  3. 使用前面的评论块 views / procs / functions包括a 修订历史和/或修订 日期
  4. 使用ANSI连接语法
  5. 限制使用触发器,尤其是 对于复制表