本文共 1270 字,大约阅读时间需要 4 分钟。
数据库设计指南
1. 存储引擎选择
在MySQL中,通常推荐使用InnoDB存储引擎,除非读写比率低于1%,否则可以考虑使用MyISAM存储引擎。其他存储引擎的使用需遵循DBA的建议。
2. 存储过程与函数
MySQL的存储过程和函数尚未完善,错误处理机制不够理想,因此不建议使用。
3. UUID和函数的使用
UUID()和USER()等函数在复制过程中存在风险,可能导致主备服务器数据不一致。如需使用UUID作为主键,建议由应用程序自行生成。
4. 外键约束
建议在程序层面实现外键关系,而不要在数据库层面使用外键约束。
5. 字符集设置
必须使用UTF8编码。
数据库对象设计规范
2. 数据库对象设计
2.1 表设计
- 日期字段:设计时应包含两个日期字段crt_time(创建日期)和upd_time(修改日期),且这两个字段不能为空。在记录更新时,必须更新upd_time字段。
- 主键:表必须有主键,建议使用自增字段类型(如INT或BIGINT)。
- 联合字段:多表join的字段必须保持数据类型一致。
- 表结构优化:尽量采用KV(Key-Value)结构,便于扩展和维护。
- 表分拆:当字段数较多时,建议将表分为两张表,一张用于条件查询,另一张用于详细内容(以提升性能)。
- 枚举型或布尔型字段:建议使用char(1)类型。
- VARCHAR字段长度:同一表中,所有VARCHAR字段的长度总和不得超过65535。如果需要更长的字段,请使用TEXT或LONGTEXT类型。
- 字段容余设计:在适当时可以预留字段容余空间,例如Value1、Value2、Value3等。
2.2 表命名
- 表名命名:同一模块的表应使用相同前缀,表名应具有描述性。例如:CRM_SAL_FUND_ITEM。
- 字段命名:字段命名应尽可能反映实际含义,使用英文单词或缩写。例如:公司ID的字段命名为corp_id,而非corporation_id。
2.3 索引设计
- 索引命名:使用下划线分隔各单词部分,例如sample_mid_ind。
- 多单词字段:对多单词组成的字段,取前几个单词的首字母,末单词完整拼写,例如sample_mid_ind。
2.4 约束设计
- 主键约束:主键建议使用序列生成的无意义ID,类型为NUMBER类型,不建议使用组合主键。
- 唯一性约束:唯一性效果可通过普通索引和约束实现,即先创建索引,再创建约束。
- 约束删除:删除约束时,需加上
keep index
参数以确保不影响索引。 - 主键不可修改:主键字段内容不可被修改。
- 外键约束:外键约束一般不建议在数据库层面创建,应通过程序逻辑控制。如果必须使用外键,必须在外键列创建索引。
2.5 约束命名
- 主键约束:以_pk结尾,例如user_pk。
- 唯一性约束:以_uk结尾,例如user_uk。
- 检查约束:以_ck结尾,例如user_ck。
- 外键约束:以_fk结尾,例如user_fk,且外键名称应以_pri_开头,表示与主表的关系。例如:user_fk(外键)和pri_user_fk(主表的索引)。
转载地址:http://vldfk.baihongyu.com/