数据库表设计
1. 目标:最小时间>最小空间
实际项目中读操作的量要远远高于写操作。因此读性能的要优先于写性能
2. 传统设计范式有6种,实际使用中到3NF即可,甚至为了换取读性能可以反范式
- 1NF 第一范式
即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是==关系型==数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF
- 2NF 第二范式
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要我们设计一个主键来实现(这里的主键不包含业务逻辑)。如果没有显示的创建主键,数据库会隐式创建主键
- 3NF 第三范式
简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主键字段。
- BCNF 巴斯-科德范式
- 4NF 第四范式
- 5NF 第五范式
反范式
没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。