设为首页 收藏本站
查看: 852|回复: 0

[经验分享] 标识符的命名惯例&设定规则(节选自《SQL技术手册(第三版)》)

[复制链接]

尚未签到

发表于 2016-11-22 06:05:26 | 显示全部楼层 |阅读模式
  本文节选自《SQL技术手册(第三版)》第2章




标识符(identifier):说明用户或系统为数据库对象设定的名字,如数据库、数据表、表约束及表内的字段、视图等。
请记住,RDBMS是以集合论为基础的。根据ANSI的定义,集群包含目录集,目录包含模式集,模式包含对象集等。大多数数据库平台使用推论术语:实例包含一个或多个数据库,数据库包含一个或多个模式,模式包含一个或多个数据表、视图或存储过程及与每个对象相关的权限。在此架构的每一层上,这些项目均需要唯一的名称(即标识符),以便于让程序及系统处理时可以引用该名称。这表明RDBMS上的每个对象(无论是数据库、数据表、视图、列、索引、关键字、触发器、存储过程还是约束)都必须能被识别。发出创建数据库对象的命令时,必须明确指定新对象的标识符(即名称)。
经验丰富的程序员为给定的项目选择标识符时,会谨记两个重要的准则:
l   命名惯例——逻辑概测法(logical rule of thumb)可用于管理数据库设计师如何命名新对象。最终遵循这些逻辑规则可创建更好的数据库结构并能改良数据跟踪。这些并不是SQL的要求,而是实践中程序员累积的经验。
l   标识符规则——这是由SQL标准设定并由平台实现的规则。这些规则包括如名称长度这样的特性。本章后面将说明每个数据库厂商的标识符设定惯例。
标识符的命名惯例
命名惯例为选择对象标识符建立了一个标准基线。本节将列出一些由多年经验积累而得到的命名惯例(选定标识符的规则)。SQL标准除了标识符的唯一性、长度及标识符内的有效字符外,它对命名惯例并未作任何注解。但是,下面是你应该遵循的一些惯例:
选择有意义、相关及有描述性的名称
不要把表命名为XP03,而应把它命名为Expenses_2005,以显示此表是存储2005年的费用的。记住,其他人可能也会使用此表或数据库,或许你离开很久之后才有人使用它,因此你使用的名称应一目了然。尽管每个数据库厂商对对象名称的长度有限制,但是,通常情况下名称还是可以足够长的,以便让用户都能看得懂。
自始至终选择并应用相同的案例
数据库中的所有对象要全部使用大写字母或全部使用小写字母。某些数据库服务器对大小写敏感,因此使用大小写混合的标识符(mixed-case identifier)可能会造成日后的问题。
使用一致的缩写
选择好缩写以后,整个数据库都要使用一致的缩写。例如,如果以“EMP”作为“EMPLOYEE”的缩写,那么整个数据库都应使用“EMP”。不要在某些地方使用“EMP”,而在另外一些地方使用“EMPLOYEE”。
使用完整、富有描述性、有意义的名称以方便阅读
名为UPPERCASEWITHUNDERSCORES的字段不如写成UPPERCASE_WITH_UNDERSCORES易读。
不要在数据库对象名中放入公司或产品名
因为公司有可能被收购,产品也有可能会改名。这些元素过于无常,不适宜放在数据库对象名中。
不要过度使用太明显的前缀或后缀
例如,别用DB_作为数据库名的前缀,每个视图名称的前缀不要使用“V_”。要能简单地查询数据库的系统表,数据库管理员或数据库程序员才可以知道标识符所表示的对象类型。
不要让对象名用完所有可用空间
如果数据库平台的表名长度可达32个字符,那么在字尾至少要保留几个空格。某些数据库平台在操作表的临时文件时,会在表名中加入前缀或后缀。
不要使用引用标识符
引用标识符(quotedidentifier)是对象名存储在双引号内(ANSI标准称之为定界标识符—— elimited identifier)。引用标识符对大小写也是敏感的。把标识符包含在双引号内会创建出难用的、以后可能出问题的名称。例如,用户可以在引用标识符中嵌入空格、特殊字符、大小写混合字符甚至转义序列,但是由于一些第三方工具(甚至是数据库厂商提供的工具)也无法处理名称中的特殊字符。因此,不应使用引用标识符。
---------------------------------
提示:一些平台允许使用除了双引号以外的定界符。例如,SQL Server使用方括号([ ])指明引用标识符。
---------------------------------
遵循这些命名惯例的好处是:首先,SQL代码在某种意义上就像自我记录(self-documenting)一样,所选的名称是有意义的,是其他用户可以理解的。其次,由于对象命名一致,你便比较容易维护SQL代码及数据库对象(尤其是对接收你工作的其他用户而言更是如此)。最后,维护一致性可提高数据库的功能性。一旦数据库要转换或转移到另外一个RDBMS时,一致且富有描述性的命名可节省时间及精力。一开始多花些时间思考SQL对象的命名,可以预防后续的问题。
标识符设定规则
标识符设定规则是数据库平台用以识别数据库内数据对象的规则。这些规则适用于一般标识符,而不适用于引用标识符。SQL2003标准设定的规则通常与特定数据库厂商所设定的规则不同。表2-1比较了SQL2003规则与本书中收录的那些RDBMS平台的规则。
表2-1:一般对象标识符(引用标识符除外)的特定平台的规则
特性
平台
规格
标识符长度
SQL3
128个字符
MySQL
64个字符,别名可能为255个字符
Oracle
30个字符(字符数视字符集而定),数据库名最多为8个字节,数据库链接限定为128个字节
PostgreSQL
63个字符(NAMEDATALEN-1)
SQLServer
128个字符,临时表最多为116个字符
标识符可包含的字符
SQL3
任何数字或字符及下划线(_)符号
MySQL
任何数字、字符或符号,不能全部由数字组成
Oracle
任何数字或字符及下划线(_)、井号(#)及美元符号$)(然而本书并不鼓励你使用最后两个符号)。数据库链接也包含句点(.)
PostgreSQL
任何数字或字符及下划线(_)符号
SQLServer
任何数字或字符及下划线(_)、at符号(@)、井号(#)及美元符号($)
标识符的前缀必须为
SQL3
字母
MySQL
字母或数字,不能全部由数字组成
Oracle
字母
PostgreSQL
字母或下划线(_)
SQLServer
字母、下划线(_)、at符号(@)或井号(#)
标识符不能包含
SQL3
空格或特殊字符
MySQL
句点(.)、斜线(/)或ASCII(0)及ASCII(255)。单引号(')与双引号(" ")仅用于引用标识符内。标识符不应以空格结尾
Oracle
空格、双引号(" ")或特殊字符
PostgreSQL
双引号(" ")
SQLServer
空格或特殊字符
是否允许引用标识符
SQL3

MySQL

Oracle

PostgreSQL

SQLServer

引用标识符符号
SQL3
双引号(" ")
MySQL
单引号(')或ANSI兼容模式下的双引号("")
Oracle
双引号(" ")
PostgreSQL
双引号(" ")
SQLServer
双引号或方括号([ ]),最好使用方括号
标识符可否保留
SQL3
不可以,除非是引用标识符
MySQL
不可以,除非是引用标识符
Oracle
不可以,除非是引用标识符
PostgreSQL
不可以,除非是引用标识符
SQL Server
不可以,除非是引用标识符
模式寻址
SQL3
Catalog.schema.object
MySQL
Database.object
Oracle
Schema.object
PostgreSQL
Database.schema.object
SQL Server
Server.database.schema.object
标识符是否唯一
SQL3

MySQL

Oracle

PostgreSQL

SQL Server

大小写是否敏感
SQL3

MySQL
只有底层文件系统(例如,MacOS 或 Unix)才区分大小写。触发器、日志文件组及表空间总是区分大小写的
Oracle
默认情况下不可以,但可以修改此默认值
PostgreSQL

SQL Server
默认情况下不可以,但可以修改此默认值
其他规则
SQL3

MySQL
不能仅包含数字
Oracle
数据库链接上限为128个字节,且不能为引用标识符
PostgreSQL

SQL Server
Microsoft通常使用方括号而非双引号指明引用标识符

标识符在其作用域范围内必须是唯一的。因此,在前面讨论的数据库对象层次结构中,数据库服务器上的特定实例的数据库名必须是唯一的,给定模式内的表名、视图、函数、触发器及存储过程也必须是唯一的。另一方面,表及存储过程的名称可以相同,因为它们分属于不同的对象类型。单一表或视图上的字段、关键字及索引名必须是唯一的。有些平台必须使用唯一的标识符,而有些未规定,详细信息请参见数据库平台的说明文档。例如,Oracle 要求数据库内所有的索引标识符都必须是唯一的,而其他数据(如SQL Server)则只要求索引标识符对其相关的表有唯一性即可。
记住,引用标识符(在特殊定界符内包住的对象名通常是双引号)可用来推翻前面的某些标识符的规则。一个示例是,引用标识符是区分大小写的——即“foo”并不等于“FOO”。此外,引用标识符可让保留字成为名称或通常允许在名称内加入一般不能用的字母及符号。例如,一般表名内并不能使用百分比符号(%)。但是,只要将表名永远放在双引号中,便可以在表名内加入百分比符号(%)。即,如果把表名命名为expense%%ratios,就必须将名称放在双引号内:“expense%- %ratios”。另外,请记住,在SQL3中,这些名称有时称为定界标识符(delimited identifier)。
---------------------------------
提示:一旦设定了对象名为引用标识符,本书建议用户永远以其特殊的定界符来引用它。
---------------------------------
  本书更多样章试读&图书信息,请点【互动网购买】或【豆瓣讨论】

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303604-1-1.html 上篇帖子: 搭建windows下的odoo开发环境 下篇帖子: 发布NBearLite中文版完全参考手册 + NBearLite 10分钟入门教程 + NBearLite v1.0.0.7 beta
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表