本文对关系型数据库的相关概念做些解析。
关系型数据库(Relational Database)
由 Edgar.F.Codd 教授于 1969 年提出,是使用遵循一阶逻辑的语言和结构来管理数据的模型。
1970 年,Prof.Codd 提出第一范式(1NF,First Normal Form);
1971 年,Prof.Codd 提出第二范式(2NF,Second Normal Form)、第三范式(3NF,Third Normal Form)。
之后,陆续有人提出了 BCNF(3.5NF)、4NF、5NF 等。
范式之间的关系是递进(accumulative)的。即第二范式必须满足第一范式,依次类推。
范式(Normal Form)
第一范式:属性不可拆分。
第二范式:主键必须最小。
所有非主属性(主键外的属性)必须完全依赖主键,不能只依赖主键的某个子集。
如果存在这样的情况,就有冗余,需要拆分表。
第三范式:必须直接依赖主键。
所有非主属性必须直接依赖主键,不容许间接依赖。
如果存在这样的情况,就有冗余,需要拆分表。
这些范式的目的:消除冗余(eliminate redundancy),保证数据一致性(consistency)。
方式:通过外键(reference)来构建关系(relationship)。
缺点:一个业务逻辑很简单的操作,可能会涉及多个表,所以出现了反范式(Denormalization)。
反范式增加了冗余,但方便了业务开发。
Wikipedia 上对关系型数据库满足 normalized 的描述:
Informally, a relational database relation is often described as "normalized" if it meets third normal form.[7] Most 3NF relations are free of insertion, update, and deletion anomalies.
一般而言,一个关系型数据库只要满足 3NF,那么它就是规范化的(normalized)。
Normalized Data Models
由 reference 来描述 relationship。
使用外键来消除冗余和保持数据的一致性。
Replica Set
增加 redundancy,保证数据库的高可用性(high availability)。
OLTP,OLAP
OLTP(Online Transaction Processing):侧重交易,实时性要求高,处理少量数据。
OLAP(Online Analysis Processing):侧重分析,实时性要求不高,处理大量数据(通常是 BI 处理,对规范化要求不高)。