Microsoft 的数据库命名约定?
Posted
技术标签:
【中文标题】Microsoft 的数据库命名约定?【英文标题】:Database Naming Conventions by Microsoft? 【发布时间】:2010-08-29 05:00:46 【问题描述】:我从 MSDN 中找到了Naming Guidelines,但它是否有任何 Microsoft 的 MSSQL 数据库指南?
【问题讨论】:
下面有很好的答案,但我想添加以下内容:同意并遵循组织内的数据库组织约定(包括命名)同样重要。例如,我们尝试首先保留主键列,然后是所有外键列,这样您就可以一目了然地找到关系,然后是按字母顺序排列的所有其他列,这样当表有大量列时,您可以找到所需的列.我们具体约定的智慧值得商榷,但在您的团队中进行这种对话的价值可能不是。 【参考方案1】:SQL Server 的AdventureWorks 数据库中使用的命名约定在风格方面展示了许多最佳实践。
总结一下:
对象名称易于理解 表名不是复数形式 (“用户”表不是“用户”) 缩写很少,但允许 (即数量、金额等) PascalCase 专用于 某些列名的例外 (即 rowguid) 没有下划线 允许使用某些关键字(即 姓名) 存储过程以 “美国” 函数以“ufn”开头您可以在此处找到更多详细信息:
AdventureWorks Data Dictionary Stored Procedures in AdventureWorks Functions in AdventureWorks一个警告:数据库命名约定可能会引起很大争议,我遇到的大多数数据库开发人员都对他们的风格有个人兴趣。我听说过关于应该将表命名为“OrderHeader”还是“OrderHeaders”的激烈争论。
【讨论】:
我喜欢你链接到原始文章,我真的很喜欢你费心为大家总结。希望我能投票两次。 六年后,仍然获得 +1 的良好答案的链接和良好的总结。 在存储过程和函数前面加上usp
和ufn
有什么好处?存储过程通常以动词开头,函数通常由其函数指定名称。【参考方案2】:
不,没有,但请记住您提供的链接中的做法。
关于命名存储过程 - 不要在它们前面加上“sp_”你可以read more about why in this link:
"不要在存储过程前面加上 sp_,因为这个前缀是保留的 用于识别系统存储的 程序。”
【讨论】:
我添加了文章中的相关引用,因为它很短,我们不能指望一个 5 年前的帖子的链接会永远存在。 sp_ 没有保留,它只是导致 SQL Server 在搜索用户定义的过程之前搜索系统过程。【参考方案3】:我不知道@8kb(在撰写本文时)的答案中的“风格方面的最佳实践”是什么意思。当然,列出的某些项目(“表名不是复数形式”、“没有下划线”等)仅仅是样式选择,显然是主观的。我原以为文档团队负责人的个人喜好将是这里最重要的因素。
关于一般 SQL 中的启发式算法(相对于专有 SQL,例如 T-SQL),只有一本关于该主题的书:Joe Celko's SQL programming style。SQL Server 的 AdventureWorks 数据库的许多选择与 Celko 的准则相冲突。
Celko 的命名约定基于国际标准ISO 11179,例如指定应使用定界字符(例如下划线)来分隔名称中的元素。其他风格选择也同样通过研究得到支持,例如对列名使用专门的小写字母,以便帮助人眼扫描。毫无疑问,其中也有主观的个人偏好,但它们是基于多年在该领域的经验。
从好的方面来说,近年来 SQL Server 文档中的情况有所改善,例如SQL 关键字大写,用分号分隔语句等。 Adventure 作品是对 Northwind 和 pubs 的巨大改进。现在为什么 Management Studio 中的脚本功能不能吐出看起来更容易一些的代码?!
【讨论】:
【参考方案4】:如果您要构建 SQL Server 命名约定指南,我建议您从 Konstantin's document on GitHub 开始。
【讨论】:
以上是关于Microsoft 的数据库命名约定?的主要内容,如果未能解决你的问题,请参考以下文章