第一范式:
1.内容相似的数据列必须消除(“消除”的办法是再创建一个数据表来存放它们)
2.必须为每一组相关数据分别创建一个数据表 3.每条数据记录必须用一个主键标识
第二范式:
1.只要数据列里的内容出现重复,就意味着应该把数据表拆分为多个表
2.拆分形成的数据表要用外键关联起来
第三范式:
1.与主键没有直接关系的数据列必须消除(“消除”的办法是再创建一个数据表来存放)
范式的优点:
冗余意味着存储空间的浪费。事实上一个大的数据库往往同时也是一个慢的数据库(至少在数据库的大小超出了计算机内存容量的时候会如此) 一般而言,严格安装范式设计出来的数据库能够提供最丰富、最灵活的查询选项。(人名等到必须使用一种新的查询或是必须对数据库进行一种新的分类时才会真正意识到这一点,但可惜的是这些新的需求总是出现在数据库已经投入运行几个月之后,那时再去改动数据库设计方案的代价是令人难以接受的。)
范式的缺点:
范式再好也只是一种手段,它可以帮人们又快又好的设计数据库,但不能代替人们思考,在某些场合,机械的按照范式把所有的冗余清除干净并不能获得最佳效果。 数据表的个数越多,把从网页上的表单输入的数据分门别类的存入这些数据表的复杂性就越大。这种复杂性不仅会给程序员带来烦恼,也会给最终用户带来不便。 不仅如此,数据表的个数越多,从中提取相关数据生成查询结果的复杂性也越大。为了提高查询的效率,适度的冗余有时反而是必要的。从多个数据库表提取数据往往要比从单个数据表提取数据来得慢;这对那些已不再需要或是很少需要修改但经常需要对复杂查询作出快速响应的数据库来说更加如此。(数据库世界里面有一个领域叫做“数据仓库”。在设计数据仓库的时候,人们往往会有有意识的增加一些冗余度以获得更好的响应。)