一、数据库表设计三范式
- 三范式
- 第一范式理解
关键点:列都是不可再分,第一范式的目标是确保每列的原子性,每列都是不可再分的最小数据单元
- 不满足第一范式举例
- 满足第一范式举例
- 第二范式理解
关键点:首先满足第一范式,并且表中非主键列不存在对主键不依赖或者部分依赖,确保每个列都和主键相关。一般因为是存在多个主键,或者存在复合主键,因此需要拆表
- 不满足第二范式举例
- 满足第二范式举例
- 第三范式理解
关键点:满足第二范式,并且表中的列不存在对非主键列的传递依赖,每列都和主键列直接相关,而不是间接相关
- 不满足第三范式举例
- 满足第三范式举例
二、表设计类型定义几个点区别
- 字符类型和长度整数类型长度区别
- 带符号和不带符号区别
- tinyint(1)还是选择tinyint(4)
情况 | 介绍 | 场景 |
tinyint(1) unsigned | 可以存储0,1,2,3....9 | 使用boolean类映射:0映射为false,1-9映射为true只存储0和1,表示true或false,则使用tinyint(1)。 例如:业务字段中存在是否XX,即可这么设计 |
tinyint(4) unsigned zerofill | 在一定范围内可以存储,只不过这里4代表显示4位,只有带zerofill 时,查询的时候会自动向左边补0。例如: 如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充 | 如果存储的数值有拓展,可以设置为tinyint(指定显示长度)。 |
三、列类型类型和表设计规范
- 列类型和Java类型转换:参考MySql官网
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html
- 表设计规约:参考阿里巴巴编码规约