1、表命名规范

   约定:表名由前缀和实际名字组成。

    前缀:使用小写字母tb_,代表表。实际名字中,一个系统尽量采取同一单词,多个后面加_来连接区分。

   因此,合法的表名类似如下。

  tb_member

2、避免保留字

表以单数形式名词或名词短语命名。如果表名仅有一个单词,那么建议不使用缩写,而是用完整的单词。

主键:PK_<表名>

外键:FK_<表名>_<主表名>_<外键字段名>

索引:IDX_<表名>_<构成索引的字段名>

如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。

3、字段设计规范

  
(1)避免下划线连接 、避免名称过长 、避免保留字

(2)选择更简单的数据类型。例如,比较整数的代价小于比较字符,因为字符集和排序规则使字符比较更复杂。

(3)尽可能把字段定义为NOT NULL。对于字段能否NULL,应该在SQL建表脚本中明确指明,不应使用缺省。

(4)一个表中的字段不要太多,理论上不要超过80个。

(5)数据库中所有布尔型中数值0表示为假;数值1表示为真

(6)当字段定义为字符串类型时使用VARCHAR2而不用NVARCHAR

(7)字段尽可能有默认值,字符型的默认值为一个空字符值串,数字型的默认值为数值0。



4、键设计规范


(1)为关联字段创建外键。

(2)所有的键都必须唯一。

(3)尽可能避免使用复合键。

(4)外键总是关联唯一的键字段。

(5)尽可能使用系统生成(如序列SEQUENCE产生)的主键。

(6)可选键有时可做主键。

(7)一个表中组合主键的字段个数尽可能少。



5、索引设计规范


(1)如果一列出现在表达式或函数中,不会使用该列上的索引

(2)要索引外键

(3)对于索引选择性高的列使用B-Tree索引

(4)对于索引选择性低的列使用位图索引

(5)HASH索引只适用于相等比较

(6)不要索引大型字段(有很多字符的字段)

(7)不要索引常用的小型表
 


 建议:

        创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为 InnoDB

        创建表时必须显式指定字符集为 utf8 或 utf8mb4。

        建议对表里的 blobtext 等大字段,垂直拆分到其它表里,仅在需要读这些对象的时候才去 select

      建议对表里的 blobtext 等大字段,垂直拆分到其它表里,仅在需要读这些对象的时候才去 select。

       反范式设计:把经常需要 join 查询的字段,在其它表里冗余一份。如 username 属性在 user_accountuser_login_log 等表里冗余一份,减少 join 查询。

  • 无标签