概述
简介
本规范以产品生命周期为主线,详细描述产品设计和开发流程过程中与数据库相关的设计和开发规范。
规范以提高可读性、代码质量为原则,强调实用性、可操作性,对GaussDB数据库开发容易产生问题的地方做出了明确的规定。主要包括下列内容:
设计规范包括:数据库设计、性能设计。
编程规范包括:排版、命名、注释、语法、脚本、数据库编程。
同时,在必要时,对部分规范给出细则及具体的示例。
术语约定
本规范采用以下的术语描述:
规格:数据库规格,编程、设计必须遵守的原则,否则数据库将报错。
规则:编程、设计强制必须考虑遵守的原则。
建议:编程、设计必须推荐加以考虑的原则。
说明:对规则或建议进行必要的解释。
示例:对规则或建议进行或正或反方面的举例。
分片:将一个表中的数据按照指定的策略拆分并存储至多个DN上的同名表中,这些表中存储的数据互不重叠,可以理解为“表的水平分库”,举例:t_user表按主键userId Hash拆分到GaussDB的4个不同DN中就是4个分片,每个分片内都有一张同名的t_user表。
适用范围
本规范适用于GaussDB 1.x及以上版本。
本规范适合人群包括:设计人员、开发人员、开发DBA、运维DBA、运维人员。
数据库设计规范
使用JDBC客户端连接数据库时必须指明数据库名,具体格式为:
jdbc:postgresql://host:port/database?param1=value1¶m2=value2
JDBC实例一旦创建,无法进行数据库切换。
数据库目前不支持不区分大小写的排序方式。
目前仅支持对数据库定义字符集,不支持对表、字段等其他对象定义字符集。
业务使用前必须先创建业务数据库。
说明:
不应使用数据库安装后默认创建的postgres数据库存储业务数据。
创建数据库时必须指定字符集为UTF8,创建数据库时必须选择与客户端统一的编码字符集。
为了使用全球化需求,数据库编码应能够存储与标识绝大多数的字符,因此推荐使用UTF8。GaussDB中的UTF8字符集与MySQL的UTF8MB4等价,能够支持emoji表情字符。
如果客户端的编码方式与数据库的编码方式不统一,会带来转码性能,同时,针对同编码的内核优化无法触发,影响查询效率。
客户端的编码字符集需通过以下方式修改:
设置客户端连接参数,例如JDBC连接参数可通过在URL中追加characterEncoding和allowEncodingChanges参数
jdbc:postgresql://ip:port/database_name?characterEncoding=utf8&allowEncodingChanges=true
修改数据库GUC参数
SET client_encoding = ‘UTF8’;
数据库的编码在CREATE DATABASE时进行设置。
CREATE DATABASE tester WITH ENCODING = ‘UTF8’;
数据库一旦创建无法更改字符集。
从便捷性和资源共享效率上考虑,建议使用SCHEMA进行业务隔离。
说明:
GaussDB可以使用DATABASE和SCHEMA两种方式实现业务的隔离。
区别在于DATABASE的隔离更加彻底,各个DATABASE之间共享资源极少,可实现连接隔离、权限隔离等。
但DATABASE之间无法互相访问,JDBC建连时必须指明DATABASE,连接后无法切换DATABASE。
SCHEMA隔离的方式共用资源较多,可以通过GRANT与REVOKE语法便捷地控制不同用户对各SCHEMA及其下属对象的权限。
创建数据库时建议指定LC_COLLATE和LC_CTYPE和存放的数据内容语言(中文\英文\等等)一致,该参数将影响数据的排序顺序。默认会用系统当前环境变量的默认设置。
示例:
CREATE DATABASE tester WITH ENCODING = ‘UTF8’ LC_COLLATE = ‘en_US.UTF-8’ LC_CTYPE = ‘en_US.UTF-8’;
LC_COLLATE:用于明确字符排序规则。
LC_COLLATE=C
1
2
3
A
B
C
a --注:小写在大写后面,按ASCII码排序
b
c
en_US.UTF-8
1
2
3
a --注:按字符排序
A
b
B
c
C
zh_CN.UTF-8
1
2
3
a
A
b
B
c
C
LC_CTYPE:用于判断哪些是字符is_alpha,是大写is_upper还是小写is_lower。




