1. Relational Design Theory
1.1 Relation model introduction
在ER model之外,最流行的数据模型是relation model,它大大简化了传统网络模型/层次模型的coding工作量。同时能够评估schema的优劣,使得数据存储更加简洁,关系更加清晰。
一个好的database应该使用最小的存储空间体现所有的必要attributes,规避数据冗余。数据冗余最直接的弊端就是难以操作数据库,任何一个点的数据update,都要找到所有重复该数据的位置进行更新。所以database的design要尽可能减少tables之间的overlap,同时一个table实现一个功能,不要复合在一起。通常一个table只能含有一个entity。
相比于ER model,relation model能够保证minimal redundancy,它可以深入到non-key的relation进行设计,但是ER model做不到。
1.2 Notation/Terminology
Relation schemas: upper-case letters, denoting set of all attributes (e.g. R, S, P, Q )
Relation instances: lower-case letter corresponding to schema (e.g. r(R), s(S), p(P), q(Q) )
Tuples: lower-case letters (e.g. t, t', t1, u, v )
Attributes: upper-case letters from start of alphabet (e.g. A, B, C, D )
Sets of attributes: simple concatenation of attribute names (e.g. X=ABCD, Y=EFG )
Attributes in tuples: tuple[attrSet] (e.g. t[ABCD], t[X])
重要概念:functional dependencies are constraints between attributes within a relation.
A relation instance r(R) satisfies a dependency X → Y if
--for any t,u ∈ r, t[X]=u[X] → t[Y]=u[Y]
Y is functionally dependent on X, OR X determines Y
schema-based dependency:
--for any t, u ∈ any r(R), t[X] = u[X] → t[Y] = u[Y]
Inference Rules:
-Reflexivity, X -> X
-Augmentation, X -> Y --> XZ -> YZ
-Transitivity, X -> Y, Y -> Z --> X -> Z
-Additivity, X -> Y, X -> Z --> X -> YZ
-Projectivity, X -> YZ --> X -> Y, X -> Z
-Pseudotransitivity, X -> Y, YZ -> W --> XZ -> W
重要概念:Closures - The largest collection of dependencies that can be derived from F is called the closure of F and is denoted F+.
1.3 Normalization
Normalization是为了减少data/relation redundancy。共有6个normal forms(NF): 1NF, 2NF, 3NF, BCNF, 4NF, 5NF,前述顺序是redundancy从大到小。
(1)1NF
要求所有的attribute都是atomic的,所以任何composite的attribute都要把最细节的信息当做attribute,比如name中必须把所有first, middle, last放在attribute中,不能放入一个name作为attribute,而实际上name又分为first, middle, last。
(2)2NF
所有的非primary key都要完全depend on primary key,没有partial dependencies。
(3)3NF
所有的non-key attributes不能determine other non-key attributes。
(4)BCNF
所有的non-key attributes不能反过来决定primary key。
4NF和5NF极少使用,因为redundancy的减少往往要以牺牲performance为代价,最常用的是3NF和BCNF。