page contents

MySQL数据库表设计规范

以下内容希望帮助到大家!

attachments-2020-07-ykT0kNG35f057304ca821.jpg


一、数据库设计


1、一般都使用 INNODB 存储引擎,除非读写比率<1%,才考虑使用 MYISAM 存储引擎;其 他存储引擎请在 DBA 的建议下使用。

2、Stored procedure (包括存储过程,函数,触发器)对于 MYSQL 来说还不是很成熟, 没有完善的出错记录处理,不建议使用。

3、UUID(),USER()这样的MySQL INSIDE 函数对于复制来说是很危险的,会导致主备数据不一致,所以请不要使用。如果一定要使用UUID作为主键,让应用程序来产生。

4、请不要使用外键约束,如果数据存在外键关系,请在程序层面实现。

5、必须采用 UTF8 编码。


二、数据库对象设计规范


1、表

设计

a)在设计时尽量包含两个日期字段:crt_time(创建日期),upd_time(修改日期)且 非空, 对表的记录进行更新的时候,必须包含对 upd_time字段的更新。

b)必须要有主键,主键尽量用自增字段类型,推荐类型为INT或者BIGINT类型。

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

d)Mysql 的表尽量设置成 KV(Key-Value)结构,这样便于扩展和维护。

e)当表的字段数非常多时,可以将表分成两张表,一张作为条件查询表,一张作为详细内容表(主要是为了性能考虑)。

f)当字段的类型为枚举型或布尔型时,建议使用 char(1)类型。

g)同一表中,所有varchar字段的长度加起来,不能大于65535.如果有这样的需求,请使用 TEXT/LONGTEXT 类型。

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_mid_ind。


3. 约束

设计

a) 主键最好是无意义的,由Sequence产生的ID字段,类型为number,不建议使用组合主键。

b) 若要达到唯一性限制的效果,不要创建uniqueindex,必须显式创建普通索引和约束 (pk 或 uk),即先创建一个以约束名命名的普通索引,然后创建一约束,用 using index …指定索引。

c) 当删除约束的时候,为了确保不影响到 index,最好加上 keep index 参数。

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

e) 外键约束一般不在数据库上创建,只表达一个逻辑的概念,由程序控制。

f) 当万不得已必须使用外健的话,必须在外健列创建 INDEX。

命名

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

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

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

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


attachments-2020-07-bdX4UgJ65f0572f553f3e.jpg

  • 发表于 2020-07-08 15:17
  • 阅读 ( 526 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章