金仓数据库 KingbaseES SQL 语言参考手册 (3.8. 数据库对象、3.9. 数据库对象名称和限定符)

3.8. 数据库对象

3.8.1. Schema 对象

Schema 是数据的逻辑结构和 Schema 对象的集合。Schema 对象是指在某个 Schema 中的数据库对象。KingbaseES Schema是指一个用户所拥有的数据库对象的集合,用于权限管理和命名空间隔离。

一个模式本质上是一个名字空间:它包含命令对象(表、数据类型、函数以及操作符),对象可以与在其他模式中存在的对象重名。可以通过用模式名作为一个前缀"限定"命名对象的名称来访问它们,

或者通过把要求的模式包括在搜索路径中来访问命名对象。

用户还可以访问和使用其他的Schema。在访问一个 Schema 中的对象时,如果没有指明该对象属于哪一个 Schema,系统就会自动给对象加上缺省的 Schema名称。

Schema 对象一般包括:

表(Tables)

视图(Views)

索引(Indexes)

约束(constraints)

分区(Partitions)

序列(Sequences)

数据库链接(Database links)

物化视图(Materialized views)

类型(Types)

操作符(Operators)

同义词(Synonyms)

触发器(Triggers)

函数(Functions)

存储过程(Procedures)

包(Packages)

3.8.2. Nonschema 对象

其他类型的对象也存储在数据库中,可以通过SQL创建和操作,但不包含在模式中:

上下文(Contexts)

目录(Directories)

表空间(Tablespaces)

角色(Roles)

用户(Users)

3.9. 数据库对象名称和限定符

部分数据库对象名由用户命名,例如表或视图中的列、索引、表分区、子分区、约束以及存储在包中的对象,包括过程和存储函数等。

  • 命名数据库对象和数据库对象位置限定符的规则

  • 命名数据库对象和限定符的准则

3.9.1. 数据库对象命名规则

每个数据库对象都有名称。在SQL语句中,用带引号的标识符或不带引号的标识符来表示对象的名称。

  • 带引号的标识符以双引号 (") 开头和结尾。如使用带引号的标识符命名模式对象,则在引用该对象时必须使用双引号。

  • 不带引号的标识符两边没有任何标点符号限定。

使用带引号或不带引号的标识符来命名任何数据库对象。但是,数据库名称、数据库链接名称始终不区分大小写并以大写形式存储。如果将此类名称指定为带引号的标识符,则引号将被静默忽略。 有关用户的命名方式,请参见"CREATE USER"。

如下规则同时适用于带引号和不带引号的标识符:

1.标识符名称的最大长度
2.不带引号的标识符不能是 KingbaseES SQL 保留字。带引号的标识符可以是保留字,但不建议这样做。
参见"SQL保留字"章节查看KingbaseES 保留字.
3.SQL语言包含其他具有特殊含义的词。


这些词包括数据类型、模式名、函数名、虚拟系统表DUAL和关键字,这些词不是保留的,但是数据库以指定方式在内部使用它们。
如果使用这些词作为对象和对象部分的名称,那么SQL语句可能导致不可预知的结果。因此,不建议将这些词用作对象名称。特别是,不要使用以SYS_或ORA_作为开头的模式对象名称,也不要使用SQL内置函数的名称作为模式对象或用户定义函数的名称。

#. ASCII 字符做标识符 在数据库名称和数据库链接名称中可以使用 ASCII 字符,ASCII 字符可提供跨不同平台和操作系统的最佳兼容性。
1.密码中的字符
密码中可以包含多字节字符,例如汉字或中文标点等。
2.标识符的可用字符字符
未加引号的标识符必须以数据库字符集中的字母开头。带引号的标识符可以以任何字符开头。
未加引号的标识符只能包含数据库字符集中的字母数字以及下划线 (_)、美元符号 ($) 和井号 (#)。数据库链接还可以包含句点(.)和@符号。建议用户不要在不带引号的标识符中使用 $ 和 #。
带引号的标识符可以包含任何字符、标点符号以及空格。但是,带引号或不带引号的标识符都不能包含双引号或空字符 (0)。
3.命名空间限制
在同一命名空间内,任意两个对象的名称都不能相同。例如,由于表和序列位于同一个命名空间中,因此同一Schema中的表和序列不能具有相同的名称。
而表和索引位于不同的命名空间中,所以同一 Schema 中的表和索引可以具有相同的名称。数据库中的每个Schema对于它所包含的对象都有自己的命名空间。
这意味着,如果不同Schema中的两个表位于不同的命名空间中是可以具有相同名称的。

#.列的名称

同一表或视图中的列不能具有相同的名称。但是,不同表或视图中的列可以具有相同的名称。

#.过程和函数的名称

对于包含在同一包中的过程或函数,如果它们的参数的数量和数据类型不同,则可以具有相同的名称。在同一个包中使用不同的参数创建多个同名的过程或函数被称为重载过程或函数。

模式对象命名示例

last_name

horse hr.hire_date

"EVEN THIS & THAT!"

a_very_long_and_valid_name

本节提供一些 Schema 对象的命名建议。 KingbaseES 数据库的对象命名建议如下:

  1. 使用完整的、描述性的、易拼写的名称或众所周知的缩写。

  2. 使用一致的命名规则。

  3. 使用相同的名称来描述跨表的同一实体或属性。

在命名对象时,如果无法平衡简单易用性和描述性,请选择更具描述性的名称,因为数据库中的对象可能会被使用很长一段时间,

这样可以避免十年后的用户可能难以理解名称为 pmdd 的表的列是用来存储什么信息的,相比之下, payment_due_date 的名称却更清楚明了。

使用一致的命名规则可以帮助用户理解每个表在应用程序中扮演的角色。例如,以 fin_ 为开头命名所有属于 FINANCE 应用程序的表的名称。

使用相同的名称描述表中的相同内容。例如,雇员表和部门表的具有相同的部门号,这一列其实存储的是一样的值,那么在雇员表和部门表中这一列均被命名为department_id 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值