Microsoft的数据库命名约定?


78

我从MSDN找到了命名准则,但是对于Microsoft的MSSQL数据库有任何准则吗?


4
下面有很好的答案,但我要添加以下内容:在组织内部就数据库的组织达成一致并遵循约定(包括命名)也同样重要。例如,我们尝试先保留主键列,然后再保留所有外键列,以便您一目了然地找到关系,然后再按字母顺序查找所有其他列,以便在表包含大量列时查找所需的列。我们特定约定的智慧值得商,,但与您的团队进行对话的价值可能不大。
bopapa_1979 2013年

Answers:


180

SQL Server AdventureWorks数据库中使用的命名约定在样式方面展示了许多最佳实践。

总结一下:

  • 对象名称很容易理解
  • 表名不是复数形式(“用户”表不是“用户”)
  • 缩写很少,但可以使用(例如,数量,金额等)
  • PascalCase专门用于某些列名(例如rowguid)除外
  • 没有下划线
  • 允许使用某些关键字(例如,名称)
  • 存储过程以“ usp”开头
  • 函数以“ ufn”开头

您可以在此处找到更多详细信息:

一个警告:数据库命名约定可能会引起很大争议,我遇到的大多数数据库开发人员在样式方面都有个人利益。我听说过关于表应命名为“ OrderHeader”还是“ OrderHeaders”的激烈争论。


12
我喜欢您链接到原始文章,也非常喜欢您不愿为大家总结。希望我能投票两次。
bopapa_1979

六年后,仍然获得+1的良好答案,包括链接和摘要。

usp和开头存储过程和函数有什么好处ufn?存储过程通常以动词开头,函数通常通过其函数指定名称。
ca9163d9

17

不,没有,但是请牢记您提供的链接中的做法。

关于命名存储过程-不要它们前面加上“ sp_”前缀。您可以在此链接中了解有关其原因的更多信息

“不要为存储过程添加sp_前缀,因为该前缀保留用于标识系统存储过程。”


3
我在文章中添加了相关的引语,因为它很短,而且我们不能期望与5岁帖子的链接永远持续下去。
加布

1
sp_不是保留的,它只会导致SQL Server在搜索用户定义的过程之前先搜索系统过程。

6

我不知道@ 8kb(在撰写本文时)的答案中的“关于样式的最佳实践”是什么意思。当然,其中列出的某些项目(“表名不复数”,“无下划线”等)仅仅是样式选择,显然是主观的。我本以为文档团队负责人的个人喜好将是这里的最大因素。

至于一般的SQL启发式算法(与诸如T-SQL之类的专有SQL相对),只有一本书涉及:Joe Celko的SQL编程风格。SQLServer的AdventureWorks数据库的许多选择都与Celko的准则相冲突。

Celko的命名约定基于国际标准ISO 11179,例如,指定使用分隔字符(例如下划线)分隔名称中的元素。其他样式选择也通过研究得到了类似的支持,例如,仅对列名使用小写字母,从而有助于人眼扫描。毫无疑问,那里也有主观的个人喜好,但是它们是基于该领域多年的经验。

从正面来看,近年来,SQL Server文档中的情况有所改善,例如大写SQL关键字,使用分号分隔语句等。Adventure作品对Northwind和pubs进行了巨大改进。现在,为什么管理Studio中的脚本功能不能吐出看起来更容易的代码?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.