表的关系
1 一对一:
一张表的一条记录 用户基础表 user_basic==用户信息表user_profile
2 一对多:
一张表中的记录对应另外一张表中的多条记录,用户基础表user_basic == 用户拉黑表user_blacklist
3 多对多:
一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录,同时B表找中的一条记录也能对应A表中的多条记录,多对多的关系。
注意: 在数据库设计的时候,当两张表存在多对多关系时,要设计第三张表将两张表多对多关系转换成一对多的关系。
反范式
概念:增加冗余数据或数据分组来提高数据库读性能的过程
目的:满足业务逻辑需求,提高查询速度
三范式
特点:字段具有原子性,不可拆分依赖于全部主键,而非部分主键,只依赖于主键,非主键字段互不依赖。
目的:减少冗余字段和重复的数据
表的字段类
int(3) 和int(6)区别:都可以显示6位以上的整数,但是当数字不足3位或6位时,int(3)会用0补齐,不占用空间,只影响显示的长度
bigint(n):多使用在主键上
tinyint(n):多用于逻辑删除字段,n表示显示几位长度
char 和varchar区别:前者不可变,查寻效率高,容易造成存储浪费。如果位数不够,会按照空字符串补齐。后者可变,查询效率不如前者,写几位显示几位。
索引
概念:索引可分为普通索引,唯一约束uniqu(不重复),联合索引(减少开销,提升效率)。
好处:增加查询速度
坏处:增加数据库存储空间,增删改查速度降低。
innodb
特点:
给mysql 提供了具有提交,回滚和崩溃恢复能力的事务安全存储引擎
支持行级锁/表级锁
并发访问时效率高(事务和行级锁的原因)
数据恢复可使用事务日志(undo redo log), 恢复速度快
支持外键约束
插入/更新/主键查询快
需要内存和硬盘多,相较耗费资源
MyiSAM
特点:
不支持事务
不支持外键约束
只支持表级锁
批量插入/查询/count( )速度快
简单, 适合小型项目/以批量插入和查询为主的系统(内部管理系统)