文章目录
一. 数据库设计
1.1 多表关系 (重点)
- 一对一
- 一对多
- 多对多
- 自关联
json
类型 保存封面图片
{
"count": 3,
"covers": ['http://xxx', '', '']
}
1.2 类型设计 (重点)
- 整型
bigint unsigned
- 主键
- tinyint
- 类型
- 状态
- bool
- bigint(5)
- 只是显示长度, 不额外占用空间
- 字符串
-
varchar
- 空间可变, 效率低
- 用户名
-
char
- 空间固定, 查询效率高
- 手机号
-
1.3 约束设计 (重点)
- NOT NULL
- 主键
- DEFAULT
- 状态
- 类型
字段尽量不用NULL
- 可空列会占用更多空间(多一个字节记录是否为null), 并且需要内部的额外处理
- 易出错
- count(字段1)统计时, 字段1为NULL的记录不会被统计
- timestamp类型
- not in / != 语句, 查询时不会被统计
- 索引不存储null值, 查询时不会被统计
- UNIQUE
- 主键约束
- NOT NULL + UNIQUE
外键约束
不使用SQL建立外键
, 而是定义普通的键去记录主键- 仍然可以多表联查
- 删除/更新效率高
- 有出错的风险, 由程序逻辑来控制
create table t_user(
id bigint not null auto_increment, # 非空约束
mobile char(11),
leaderid bigint,
type tinyint default 0, # 默认值约束
unique (mobile), # 唯一约束
primary key (id), # 主键约束
# foreign key (leaderid) references t_user(id) # 外键约束
)
1.4 索引设计
- 为了提高查询速度提供的一种数据结构, 类似书的目录, 方便快速查询出数据, 而不是从头到尾的依次比对
- 优点
- 增加查询速度
- 缺点
- 增加数据库的存储空间
- 减慢增删改速度(索引需要随之改变)
- 创建索引
create table t_user(
id int not null,
mobile char(10) not null,
key (mobile) # 设置索引
)
alter table t_user add nickname varchar(20);
alter table t_user add key (nickname);
-
查看索引
show keys from t_user;
-
查看查询是否使用了索引
explain select * from t_user where nickname = 'zs';
-
索引分类
- 普通索引 index
- 不要用可空列作为索引, 易出错
- 适合的字段
- 数据量超过300的表应该有索引;
- 经常与其他表进行连接的表,
- 普通索引 index