附录B. 命名规则和保留名字空间

模式对象命名和限定词

本小节主要提供了:

命名模式对象的规则和模式对象的位置限定词

命名模式对象和限定词的指导方针

模式对象命名规则

命名模式对象的时候,必须符合以下规则:

  1. 名字长度必须在1~127字节之间。
  2. 名字不能包含引号, 除非用双引号包括。
  3. 名字大小写不敏感,除非用双引号包括,否则名字会被自动转化成大写。
  4. 除非前后用双引号包括,否则名字必须以数据库字符集(注1)中定义的字母开头。
  5. 如果不用双引号包括,名字只能包含数据库字符集中的字母和数字字符、下划线(_)。建议不要使用$和#。
  6. 名字不能使用系统的保留字。

名字的命名可能会受到系统中其它产品相关的保留字的限制。参见附录A,''关键字和保留字''和其它相关产品的用户手册,比如《神通数据库过程语言手册》。

神通数据库的SQL语言中还包含一些具有特殊意义的词。这些词包括数据类型、函数名和关键字(比如DIMENSION、SEGMENT、ALLOCATE、DISABLE等等)。这些词不是保留字,但是,神通数据库会在内部使用它们。因此,如果用这些词作为对象名,相应的SQL语句可能会难以理解,并且可能导致不可预期的结果。

尤其不要使用"SYS_"和"V_SYS_"开头的模式对象名,不要把SQL内建函数名用于模式对象名或者用户自定义的函数名。

在一个名字空间中,两个对象不能有相同的名字。

下面是共享同一个名字空间的模式对象:

视图

序列发生器

索引

下面的模式对象拥有自己的名字空间:

约束

存储过程名

函数名

数据库触发器

由create object table带来的用户自定义的类型名

因为表和视图在同一个名字空间,所以同一个模式中的表和视图不能有相同的名字,表和索引也在同一个名字空间,所以同一个模式中的表和索引不可以有相同的名字。表和存储过程不在同一个名字空间,所以它们可以有相同的名字。

下面的非模式对象也有自己的名字空间:

用户名

用户角色名

表空间

因为这些名字空间中的对象不包含在模式中,所以这些名字空间跨越整个数据库。

  1. 同一个表中的列或者视图不能使用相同的名字。然而,不同表中的列和视图可以有相同的名字。
  2. 名字可以用双引号包围。这样的名字可以包含任何字符的组合,包括空格,并且可以不管上述规则列表中的第2~6条规则。为了增加程序的可移植性,最好不要违背规则2~6条。

如果给一个模式名命名时使用了双引号,那么,在引用该对象的时候也应该加双引号。

对一个名字应用双引号使它可以:

包含空格

大小写敏感

以非字母字符开头,比如开头的字符可以是数字字符

包含字母、数字、_、$和#之外的字符

用保留字

通过使用双引号,可以把下面的名字赋予同一个名字空间中的不同对象:

emp

''emp''

''Emp''

''EMP ''

注解

神通数据库把下面的名字解析成等价的,所以它们不能用在同一个名字空间的不同对象上:

emp EMP "EMP"

模式对象命名举例

下面都是有效的模式对象名字:

city

emp.salary

''YeAH! It's YoU>''

a_very_long_but_valid_name

虽然列别名、表别名、用户名和密码不是对象或者对象的部分,但是它们也必须符合上述命名规则,以下是例外情况:

列别名和表别名仅在一个SQL语句中有效,它们没有存储到数据库中去,所以第10条规则不应用到列别名和表别名上。

密码没有名字空间,所以第8条规则不适用。

不要用双引号来使用户名和密码成为大小写敏感的。

模式对象命名指导方针

下面是模式对象和对象的部分命名的一些有用的指导方针:

用描述性的可发音的名字(比如拼音,或者直接用中文汉字,或者众所周知的简写形式)

用一致的命名规则

在各个表之间,用相同的名字描述相同的实体或者属性

当命名对象时,需要权衡使名字短和易于使用以及使名字尽量具有实际意义这两点。当两者矛盾时,选择更有意义的名字,因为数据库中的名字可能在一段较长的时间内由很多人使用。

使用一致的命名规则使用户更易于理解在应用程序中每个表的作用。比如,对于属于EMPLOYEE的表都用emp_开头。

在不同的表中,使用相同的名字描述同一个实体或者属性。比如,在范例中表employee和branch都有列city表明城市这个属性。

保留名字空间

下表包含了一个神通数据库保留的名字空间的列表。神通数据库中的函数名字的开始几个字符限制为这个列表所列的字符串。因为可能存在潜在的名字冲突,所以不要使用以下字符串开始的函数名字。例如,ESQL库函数都是以ESQL开头的,所以用户最好避免用ESQL开头的名字命名函数。

表B-1

名字空间 库描述
ESQL ESQL系统库函数。经过预编译输出的目标C文件需要通过底层的ONET库与后台数据库进行通信,ESQL库提供了与预编译相对应的后处理功能,对SQL语句进行一些处理,并且调用ONET的库函数与后台数据库通信。
ONET ONET库函数。与后台数据库通信。
SYS_GLOBALE_TEMP 系统用于建立全局临时表的模式
SYS_TMP_[Session号] 系统用于建立局部临时表的模式
INFO_SCHEM 系统表所在的SCHEMA
SYS_xxx 系统表名
V_SYS_xxx 系统视图名

注:(1)神通数据库的字符集包括英文大小写字母以及ASCII码为128-255的字符。