Mysql数据库命名
- 所有数据库对象名称必须使用小写英文单词,中间用下划线分割 user_name
- 临时表以tmp_前缀,备份表以bak_作为前缀,以日期时间作为后缀
- 禁止使用mysql保留字,最长不要超过32个字符
Mysql数据库设计
- 尽量用少的存储空间来存储数据,即能用int就不要用char,varchar;能用tinyint就不用int
- 非负数使用unsigned关键字,ip地址使用unsigned int类型,可以使用inet_aton和inet_ntoa两个函数相互转换
- 将常用的字段放在一个表上,不常用的数据较大的字段(例如text等)放在一个表上
- 数据库的范式
- 第一范式:字段值具有院子性,不能再分(所有关系数据库系统都满足第一范式);
- 第二范式:一个表不许具有主键,即每行数据都能被唯一区分
- 第三范式:一个表中不能包含其他相关表中非关键字段的信息,即数据表不能有冗余字段
- 控制列数量,虽然mysql限制最多存储4096列,但是还是尽量将不常用的字段放在一个表上,以减少表的字段数
- 控制表大小(尽量500万以内),过大的表运用数据归档(像日志等),分库分表(业务数据)等方式
- 考虑效率,平衡范式与冗余,不要过于复杂的sql语句,不在数据库做运算
数据库设计
- 一对一可以直接作为字段加在原表上,一对多和多对多建立新的表,并设置好主键(有时候即原子表的主键)
- 尽量满足第三范式,但是有时候为了效率可以牺牲空间,即允许冗余字段的存在