MySQL数据库表设计规范

发表时间:2019-07-05 18:38文章来源:技昂编程网


一、数据库设计

1、通常都应用INNODB储存模块,否则读写能力比例<1%,才考虑到应用MYISAM储存模块;其他储存模块请在DBA的提议下应用。

2.对于MYSQL来说,存储过程(包括存储过程、函数、触发器)不是很成熟,也没有完美的错误记录处理。不推荐使用。

3、UUID(),USER()那样的MySQLINSIDE涵数针对拷贝而言是很风险的,会造成主备统计数据不相同,因此请不必应用。要是必须要应用UUID做为主键,让手机应用程序来造成。

4、请不必应用外键约束,要是统计数据存有外键关联,请在程序流程方面建立。

5、必须采用UTF8编码。

二、数据库对象设计规范

1、表设计

a)在设计方案时尽可能包括2个时间字段名:crt_time(建立时间),upd_time(改动时间)且非空,对表的纪录开展升级的那时候,必需包括对upd_time字段名的升级。

b)必需要有主键,主键尽可能用自增字段名种类,强烈推荐种类为INT或是BIGINT种类。

c)需要多表连接的字段,数据类型保持绝对一致。

d)Mysql的表尽可能设成Kv(Key-Value)构造,那样有利于拓展和维护保养。

e)当表的字段名数十分多时,能够将表分为二张表,一張做为标准查询表,一張做为详尽內容表(关键是以便特性考虑到)。

f)当字段名的种类为枚举型或布尔型时,提议应用char(1)种类。

g)同一表中所有varchar字段的总长度不能大于65535。如果有这样的要求,请使用TEXT/LONTEXT类型。

h)由于MySQL表DDL的维护成本高,在适当的情况下可以具有一定的现场馀量。比如:Value1,Value2,Value3这样的字段。

命名

a)同一模块的表尽可能使用相同的前缀,表名尽可能表示意义。例如CRM_sal_fund_item。

b)字段名取名应尽量应用表述实际上含意的英语单词或简称,如,企业Id,不必应用:corporation_Id,而用:corp_Id只能。

c)布尔值类型的字段命名为is+描述。如member表上表示是否为enabled的会员的字段命名为IsEnabled。

2、索引命名

a)_ind,各部分以下划线()分割。

b)多英语单词构成的columnname,取前好多个英语单词首字母,加末英语单词构成column_name。如:sample表member_Id上的数据库索引:sample_ABP_ind。

3.约束设计

a)主键最好无实际意义的,由Sequence造成的Id字段名,种类为number,不提议应用组成主键。

b)为了达到唯一性限制的效果,不要创建唯一索引,必须显式地创建一个公共索引和约束(主键或英国),即首先创建一个以约束名称命名的公共索引,然后创建一个约束,并使用索引…...指定索引。

c)当删掉约束力的那时候,为了保证不危害到index,最好是再加keepindex主要参数。

d)主键的内容不能被修改。

e)外键约束通常没有数据库查询上建立,只表述1个逻辑性的定义,由系统控制。

f)当迫不得已必需应用外健得话,必需出外健列建立INDEX。

命名

a)主键约束:pk结尾,_pk;

b)unique约束:_uk结尾,uk;

c)check约束:_ck结尾,ck;

d)外键约束:_fk结尾,以pri连接本表与主表,_pri_fk;