mysql创建库和表

发布时间: 2023-11-21 11:09 阅读: 文章来源:1MUMB1086PS
数据库设计规范

首先我们先看一下,标准规范的建表SQL语句的是什么样子的,如下:

库名规范

库命名应该在30个字符以内,存在关联关系的表在命名时尽量体现关联关系,如user表与user_registry表。库名称格式应遵循“业务系统名称_子系统名称”,相同模块的表名尽量使用统一前缀。创建数据库时应该显式指定字符集,并且字符集只能是 utf8或者 utf8mb4。建表规范

表命名和字段命名应该控制在30个字符以内,使用英文小写单词,表名应由字母、数字和下划线组成,禁止使用中文命名,如果有多个单词需使用下划线隔开。创建表时,表命名时应该用英文单词的单数形式,如学生信息表命名,应该为student而不是students。创建表时,对相关功能的表应当使用相同前缀,前缀通常为这个表的模块或依赖主实体对象的名称缩写,如物资系统采用”wz_”作为前缀。创建表时,表字段命名不建议使用数据库关键字,如:name,time ,datetime创建表时,应该显式申明字符集为 utf8或 utf8mb4,如 DEFAULT CHARSET=utf8。创建表时,应该对字段和表添加COMMENT。创建表时,应该创建主键,建议使用 auto_increment的 id作为主键(与业务无关,与业务相关字段应创建唯一索引),类型应为 int或 bigint。推荐使用bigint类型,因为无符号int存储范围为-2147483648~2147483647,溢出后会导致报错。创建表时,应该有创建时间字段create_time和更新时间字段update_time。创建表时,必填字段应该尽量设置NOT NULL属性,同时根据实际业务需要定义DEFAULT值。尽量避免使用NULL,因为使用NULL需要占用额外的空间存储、聚合函数计算结果偏差,同时含有NULL值的列,会对SQL优化产生影响,尤其是组合索引中。创建表时,不推荐使用blob,text类型,比较浪费硬盘和内存空间,在加载表数据时,会读取大字段到内存里从而浪费内存空间,影响系统性能。建议对表中的blob、text等大字段,垂直拆分到其他表里,仅在需要读这些对象的时候才去查询。创建表时,对需要频繁JOIN查询的字段,建议在其他表里冗余存储。如 username 字段在user_account,user_registry等表里冗余存储username ,减少JOIN查询。创建表时,表与表之间的相关联字段尽量使用统一名称,如 user_account 表 里面的 username 和 user_registry表里面的 username 相对应。创建表时,文本数据尽量用varchar存储,时间类型尽量选取timestamp。创建中间表时,表名称建议以 tmp_开头,时间结尾,需定期清理。创建备份表时,表名称建议以bak_开头,时间结尾,需定期清理。创建表时,应该显式申明存储引擎类型,表引擎取决于实际应用场景及当前数据库中的已经存在的存储引擎,我们通常使用InnoDB存储引擎。Innodb存储引擎支持事务、行级锁、更好的恢复性、高并发下性能更好,对多核、大内存、SSD等硬件支持更好。索引规范

主键索引的名称建议以"pk_"开头,唯一索引以"uq_"开头,非唯一索引以"idx_"开头,以表名、字段的名称或缩写作为后缀,索引名称必须使用小写。创建索引时,多考虑建立联合索引,并把字段值去重之后的个数多的放在前面。单索引中每个索引值的长度建议不超过64KB,不要索引blob、text等大字段,这样作会让索引占用太多的存储空间.。单个表上的索引个数建议不超过5个,唯一索引由3个以下字段组成,并且字段都是整形时,使用唯一键作为主键。在多表 JOIN的SQL语句里,保证被驱动表的连接列上有索引,这样JOIN执行效率最高。避免存在冗余索引,合理创建联合索引(避免冗余),如果表里已经存在key(a,b),则key(a)为冗余索引,需要删除key(a)。

•••展开全文