数据库三大范式
第一范式(确保每列保持原子性)
数据库表中的所有字段值都是不可分解的原子值。
- 比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。
- 但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。
第二范式(确保表中的每列都和主键相关)
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。比如:
- 订单信息表:订单编号,商品编号,商品名称,商品数量,商品单位,商品价格。联合主键为(订单编号,商品编号)
- 存在问题:
在该表中,商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。就需要单独存在另一张表里。而不应该在订单信息表里。 - 修正:
订单:订单编号,商品编号
商品:商品名称,商品数量,商品单位,商品价格
第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。比如:
- 学生信息表:学号,姓名,年龄,所在学院,学院联系方式,学院地点。主键:学号
- 存在问题:
存在依赖传递:学号 → 学院 → (学院地点,学院联系方式) - 修正:
学生信息表:学号,姓名,年龄,所在学院
学院信息表:学院,学院联系方式,学院地点
数据库三大范式
http://example.com/数据库三大范式/