数据库涉及字符规范
采用
26
个英文字母(区分大小写)和
0-9
这十个自然数,加上下划线
'_'
组成,共
37
个字符。不能出现其他字符(注释除外)。
-
小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突, 当表名或字段名乃至数据库名和保留字冲突时,在sql语句里可以用撇号(
`
)括起来。 -
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里也要保证是整型。
数据库命名规范
数据库名使用小写英文以及下划线组成(公司简称+项目名)。比如:
数据库表命名规范
数据表名使用小写英文以及下划线组成(项目名+表信息),并且创建数据库时,显式指定默认字符集。
oa_user_20150206
oa_workflow_step_20150206
字段命名规范
字段名称使用单词组合完成,首字母小写,单词之间用
“_”
分隔,最好是带表名前缀,自增id最好创建与业务无关.
索引命名规范
字段类型规范
-
char(n)
和varchar(n)
中括号中n
代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m
个中文,但是实际会占用m*3
个字节。 -
同时
char
和varchar
最大的区别就在于char
不管实际value
都会占用n
个字符的空间,而varchar
只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
Value | CHAR(4) | Storage Required | VARCHAR(4) | Storage Required |
---|---|---|---|---|
‘’ | ‘ ‘ | 4 bytes | ‘’ | 1 byte |
‘ab’ | ‘ab ‘ | 4 bytes | ‘ab’ | 3 bytes |
‘abcd’ | ‘abcd’ | 4 bytes | ‘abcd’ | 5 bytes |
‘abcdefgh’ | ‘abcd’ | 4 bytes | ‘abcd’ | 5 bytes |
-
char
,存定长,速度快,存在空间浪费的可能,会处理尾部空格,上限255
。 -
varchar
,存变长,速度慢,不存在空间浪费,不处理尾部空格,上限65535
,但是有存储长度实际65532
最大可用。 -
text
,存变长大数据,速度慢,不存在空间浪费,不处理尾部空格,上限65535
,会用额外空间存放数据长度,顾可以全部使用65535
。
当
varchar(n)
后面的n非常大的时候我们是使用
varchar
好,还是
text
好呢?
这是个明显的量变引发质变的问题。我们从2个方面考虑,第一是空间,第二是性能。
从官方文档中我们可以得知当
varchar
大于某些数值的时候,其会自动转换为
text
,大概规则如下:
所以对于过大的内容使用
varchar
和
text
没有太多区别。
比如能用
int
的就不用
char
或者
varchar
,能用
varchar(20)
的就不用
varchar(255)
。
尽量避免大字段
blob
,
text
,
longtext
,如强制需要大字段,不要集中存放在一个表中,分多表存放。查询语句
where
条件不要落在大字段上。
操作规范
-
创建表时需添加表级别和列级别注释,显示指定存储引擎、默认字符集、自增开始值,
id
列无特殊要求,建议使用int
值。 -
提交线上建表改表需求,必须详细注明涉及到的所有
SQL
语句(包括INSERT
、DELETE
、UPDATE
),便于DBA进行审核和优化。
数据库用户创建规范
采用
26
个英文字母(区分大小写)和
0-9
这十个自然数,加上下划线
'_'
组成,共
37
个字符。不能出现其他字符(注释除外)。
-
以上命名都不得超过
16
个字符的系统限制。 -
数据库用户一律采用小写,由以下几个部分组成,使用
人员_项目名_连接途径_用户权限
组成;例如:管理平台账号,d_mg_web_dml
,d_mg_pc_web_dml
其他设计技巧
-
避免使用存储过程、触发器、视图、自定义函数等,这些高级特性有性能问题,以及未知BUG较多。业务逻辑放到数据库会造成数据库的
DDL
、SCALE OUT
、SHARDING
等变得更加困难。 -
分区表对分区键有严格要求;分区表在表变大后,执行
DDL
、SHARDING
、单表恢复等都变得更加困难。因此禁止使用分区表,并建议业务端手动SHARDING
。 -
将大字段、访问频率低的字段拆分到单独的表中存储,分离冷热数据, 有利于有效利用缓存,防止读入无用的冷数据,较少磁盘IO,同时保证热数据常驻内存提高缓存。
-
禁止有
super
权限的应用程序账号存在, 安全第一。super
权限会导致read only
失效,导致较多诡异问题而且很难追踪。
1 |
CREATE TABLE `manager_test` ( |