DB设计的范式(Normal Form)
- 第一范式(1NF):
- 每一个字段都应当是原子性的,不可再分为多个列;
- 每一行必须唯一,即要有主键
- 第二范式(2NF):
- 在1NF的前提下,非主属性非部分依赖于主键(即非主属性必须完全依赖于主键(主键可由多个键共同构成),而不能只依赖主键中的某一部分)
- 第三范式(3NF):
- 在2NF的前提下,非主属性必须依赖主键,而不能出现传递依赖(即不能出现:非主属性A依赖非主属性B,非主属性B依赖主键C)
MySQL主键的设计
原则
- 主键对用户来讲,应当是没有意义的
- 主键应是单列的,以便提高连接或通过二级索引查询(Innodb下,二级索引一定会包含聚簇索引)的效率
- 主键不应当修改
常用的主键
- 自增id
优点:
数据库自动编号,速度快,聚集型主键按顺序存放,对于检索非常有利。
占用空间少,方便传递
缺点
不支持水平分片架构,水平分片的设计当中,这种方法显然不能保证主键的全局唯一 - UUID
优点:
可以保证产生一个全局唯一主键,也可以使用Redis来产生
缺点:
占用空间大,可以使用uuid_short()替代产生一个bigint