数据三大范式:建立科学的,规范的的数据库是需要满足一些条件。
理解三大范式
第一范式
第一范式是表中的所有字段值都是不可分解的原子值。否则,将有很多基本操作在这样的关系模式中实现不了。
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城 市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算 满足了数据库的第一范式。
第二范式【对象的单一性】
确保表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。在一个表中,一个表中只能保存一种数据。
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。
这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。
第三范式[对象的纯粹性]
每个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c 属性之间含有这样的传递关系,是不符合第三范式的。
比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话),学号--> 所在院校 --> (院校地址,院校电话)
这样的表结构,我们应该拆开来,如下。(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)