数据库设计步骤:
1,数据结构设计:逻辑设计-“物理设计
2,实际工作:逻辑设计+物理设计
3,物理设计:表 名称+字段名称+字段类型
数据库设计的几个规范:
数据库命名规范,基本数据库设计规范,数据库索引设计规范,数据库字段设计规范,数据库SQL开发规范,代码 数据库操作指南
数据库命名规范
1。所有数据库对象名称都必须使用小写字母并用下划线分隔
不同的数据库名称DbName dbname
[h ]不同的表名表表选项卡
2,所有数据库对象名称均禁止使用MySQL保留关键字
select id,用户名,from,age from tb_user from是关键字,但可以使用 单个用引号引起来
3。数据库对象的命名应按名称识别,最好 不超过32个字符。
例如,用户数据库mc_userdb用户帐户表user_account
4,临时数据库表必须以tmp为前缀,并以date
5为后缀 。 备份数据库和备份表必须以bak为前缀,并以date
6为前缀,所有存储相同数据的列名称和列类型必须一致
基本数据库设计规范
1。 所有表都必须使用Innodb存储引擎,它是mysql 5.6之后的默认存储引擎,支持事务,行级锁,更好的可恢复性以及在高并发性下的更好性能
2。 UTF8统一用于数据库和表的字符集,以避免由于字符集转换而造成乱码。
mysql中utf8字符集汉字占3个字节,而ASCII码占1个字节
3。 所有表和字段都需要添加注释,使用comment子句添加表和列注释
4,尝试控制单个表数据的大小,建议控制在500万,500万和 不限制mysql数据库,
mysql中最多可以存储数千个数据? 目前没有任何限制。 此限制取决于存储设置和文件系统。
您可以使用历史数据存档,子数据库子表和其他方式来控制数据量。
5。 仔细使用mysql分区表
分区表在物理上显示为多个文件,但在逻辑上却不显示为一个表。
请仔细选择分区键,跨分区查询的效率可能会较低
[ h]建议通过物理拆分表来管理大数据[br]
6,尝试分离热数据和冷数据,减小表的宽度
mysql最多可限制4096列的存储 为了减少磁盘IO并确保热数据的内存高速缓存命中率,请更有效地使用高速缓存,以避免读取无用的冷数据
,将经常使用的列放在表
7中。 禁止在表中创建保留字段
很难通过名称区分保留字段的名称
保留字段无法确认所存储数据的类型,因此无法确定适当的类型
修改保留字段类型将锁定该表,并且修改字段类型的开销通常大于增加的开销。
8。 禁止将二进制图片(例如图片和文件)存储在数据库中。
9。 在线数据库压力测试
10。 禁止从开发环境和测试环境直接连接到生产环境数据库。
索引设计规范
索引对于数据库查询性能非常重要重要,查询,更新,禁止 滥用索引。
1。 限制每个表上的索引数。 建议单个表上的索引不超过5个。
索引应尽可能少。 索引可以提高效率,也可以降低效率
索引可以提高查询效率,但也会降低插入和更新的效率。
2。 禁止为表
3中的每个列创建单独的索引,Innodb按照主键索引
4的顺序组织表,每个Innodb表必须具有主键
不要使用频繁更新的列作为主键,不要使用多列主键
不要使用uuid,MD5,哈希,字符串列作为主键
[h ]建议主键使用主键自动递增
公用索引列建议:
select,update和delete语句的where子句中的列
包括的字段 排序依据,分组依据和目的地
多表联接的关联列
如何选择索引列的顺序:
联合索引从以下实现 正确顺序
1.辨别率最高的列位于联合索引的最左侧
2.尝试将字段长度最小的列置于索引的最左侧 联合索引
3.放置mos t联合索引左侧的常用列
5.避免创建冗余索引和重复索引
重复索引:例如主键(id),索引(id),唯一 index(id)
冗余索引:例如index(a,b,c)index(a,b)index(a)
6。 对于频繁查询,优先使用覆盖索引
覆盖索引:它是包含所有查询字段的索引
优点:避免在Innodb表中进行第二次搜索,您可以 将随机IO转换为顺序IO以加快查询效率
7.尽可能避免使用外键
不建议使用外键约束,但必须在表中 在与表相关的键上创建索引
外键可用于确保数据的引用完整性,但是建议在业务端实现
外键会影响 父表和子表的写操作,从而降低性能
数据库字段设计规范
1.优先选择满足存储需求的最小数据类型。
[ h]将字符串转换为数字类型以进行存储
对于非负数数据,请使用无符号整数进行存储
有符号 int -2147483648-2147483648
无符号int 0-2147483648
有符号的符号是无符号存储空间的两倍
varchar(n)n代表字符数,而不是 字节数,varchar(255)= 765字节
过多的长度将消耗更多的内存
2.避免使用text \ BLOB数据类型。
建议使用 将text \ BLOB列分隔为单独的扩展表。
text \ BLOB类型只能使用前缀索引。
3.避免使用枚举数据类型
修改枚举需要使用alter语句
枚举类型按操作顺序效率低下,需要额外的操作
禁止将数值用作枚举值
4。 尽可能将所有列定义为非null。
索引空列需要额外的空间来保存,因此会占用更多空间。
在比较和计算过程中应对空值进行特殊处理。
5
缺点1:不能将日期函数用于计算和比较
缺点2:使用字符串存储日期会占用更多空间
使用时间戳或日期时间类型存储时间,时间戳存储空间较小
4.将十进制类型用于财务相关金额。
十进制类型是精确的浮点数 数字,在计算
浮点数时不会丢失精度,双精度非浮点数
数据库SQL开发规范
1.建议使用准备好的语句 用于数据库操作。
优点:仅传递参数,这比传递SQL语句更有效。
同一条语句可以一次使用分析并多次使用 提高处理效率
2.避免数据类型的隐式转换
隐式转换将导致索引失败
3.使用表已存在的索引基本数据库设计规范
1。 所有表都必须使用Innodb存储引擎,它是mysql 5.6之后的默认存储引擎,支持事务,行级锁,更好的可恢复性以及在高并发性下的更好性能
2。 UTF8统一用于数据库和表的字符集,以避免由于字符集转换而造成乱码。
mysql中utf8字符集汉字占3个字节,而ASCII码占1个字节
3。 所有表和字段都需要添加注释,使用comment子句添加表和列注释
4,尝试控制单个表数据的大小,建议控制在500万,500万和 不限制mysql数据库,
mysql中可以存储成千上万的数据? 当前没有限制,此限制取决于存储设置和文件系统
您可以使用历史数据存档,子数据库子表和其他方式来控制数据量。
5, 仔细使用mysql分区表
分区表在物理上表示为多个文件,但在逻辑上未表示为表。
请仔细选择分区键。 跨分区查询效率可能较低。
建议通过物理拆分表来管理大数据。
6。 尽量分开热数据和冷数据,并减少表的宽度。
mysql限制最多存储4096列,以减少磁盘IO并确保热数据的内存高速缓存命中率, 更有效地使用缓存,以避免读取无用的冷数据[br]
经常将列放在表
7中。 禁止在表中创建保留字段
很难通过名称识别保留字段的名称
保留字段无法确认所存储数据的类型,因此不能指定适当的类型
修改保留字段类型将锁定该表。 修改字段类型的成本通常大于增加的成本。
8。 禁止将二进制图片(例如图片和文件)存储在数据库中。
9。 在线数据库压力测试
10。 禁止从开发环境和测试环境直接连接生产环境数据库。
索引设计规范
索引以检查数据库查询性能非常重要,查询,更新,禁止滥用索引
1,限制每个表的索引数量,建议单个表的索引不超过5
[h ]索引没有结束,索引越好,它可以提高效率,也可以降低效率。
索引可以提高查询效率,但也会降低插入和更新的效率。 >
2。 禁止给表中的每一列创建单独的索引
3,Innodb按照主键索引
4的顺序组织表,每个Innodb表必须具有主键
不要将频繁更新列用作主键,不要使用多列主键
不要将uuid,MD5,哈希,字符串列用作主键
[ h]建议主键使用主键自动递增
通用索引列建议:
select,update和delete语句的where子句中的列
字段 多表联接关联Column
如何选择索引列的顺序:
联合索引是在 向右排序
1.区分度最高的列放在联合索引中最左端的
2.尝试将字段长度最小的列放在字段的最左侧 联合指数
3.投放最频繁 联合索引
5左侧的常用列。 避免创建冗余索引和重复索引
重复索引:例如主键(id),索引(id),唯一索引(id)
冗余索引:例如索引(a,b ,c)index(a,b)index(a)
6。 对于频繁查询,首选覆盖索引
覆盖索引:它包括所有查询字段的索引
优点:避免在Innodb表中第二次查询索引,您可以将随机IO转换为顺序IO以提高查询效率
7.尝试避免使用外键
不建议使用外键约束,但必须在表之间的关联键上建立索引。
外键可用于确保数据的参照完整性,但它可以 建议在业务端实现它。
外键将影响父表和子表的写操作,从而降低性能。
数据库字段设计规范
[ h] 1.优先选择满足存储要求的最小数据类型
将字符串转换为数字类型进行存储
使用无符号整数存储非负数据
[h ] signed int -2147483648-2147483648
unsigned int 0-2147483648
Signed使unsigned
varch的存储空间增加了一倍 ar(n)n代表字符数,而不是字节数,varchar(255)= 765字节
过多的长度将占用更多的内存
2.避免使用text \ BLOB数据 type
建议将text \ BLOB列分隔到单独的扩展表中。
text \ BLOB类型只能使用前缀索引
3.避免使用枚举数据 type
修改枚举需要使用alter语句
枚举类型按操作的顺序效率低下,并且需要额外的操作
禁止将数值用作枚举枚举 values
4.尽可能将所有列定义为不为null的值。
索引空列需要额外的空间来保存,因此要占用更多空间
比较和计算需要对空值进行特殊处理
5.禁止将日期类型的数据存储在字符串中
缺点1:无法将日期函数用于计算和 比较
缺点2:使用字符串存储日期会占用更多空间
使用时间戳或datetime类型存储时间,时间戳存储空间较小
4.使用十进制表示 财务相关金额类型
十进制类型是精度浮点数,在计算过程中不会丢失精度。
浮点数,双精度非浮点数
数据库SQL开发规范
1.建议对数据库操作使用准备好的语句。
好处:仅传递参数比传递SQL语句更有效。
[h ]同一条语句可以被解析一次,并可以多次使用,以提高处理效率。
2.避免隐式转换数据类型
Im 重复转换将导致索引失败
3.使用表上的现有索引