范式可以理解成在设计数据表时的规范级别,常见的范式有
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- BC范式(BCNF)
第一范式
要满足第一范式,要求数据表的每个属性无法再分,也就是需要满足原子性。可以把“不可再分”理解成无法用一个单独的值表示,比如说“系”这个属性,平时常说的“计算机系”,“化学系”实际上指的是系名,而系的管理者被称为系主任,所以对于“系”这个属性,只能通过将它拆分成若干属性的组合(系名,系主任,…)来表示。
所以如果数据表中某个属性指的是类似上面的“系”这样的属性,就不满足第一范式,解决办法就是将这个可以再分的属性继续分解
CREATE TABLE student (
id INT NOT NULL AUTO_INCREMENT, /* 学号 */
name VARCHAR(20) NOT NULL, /* 姓名 */
faculty /* 系,应该用什么类型表示?它包括系名,系主任等若干子属性 */
...
);
可以看到,如果某个属性可以继续分解,那么是无法在创建数据表时表示它的,所以一般可以成功创建的数据表(前提是语义正确)都是符合第一范式的要求的
CREATE TABLE student (
student_id INT,
student_name VARCHAR(20),
faculty_name VARCHAR(20),
faculty_boss