数据库三大范式

第一范式(确保每列保持原子性)

数据库表中的所有字段值都是不可分解的原子值。

  • 比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。
  • 但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。

第二范式(确保表中的每列都和主键相关)

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。比如:

  • 订单信息表:订单编号,商品编号,商品名称,商品数量,商品单位,商品价格。联合主键为(订单编号,商品编号)
  • 存在问题:
    在该表中,商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。就需要单独存在另一张表里。而不应该在订单信息表里。
  • 修正:
    订单:订单编号,商品编号
    商品:商品名称,商品数量,商品单位,商品价格

第三范式(确保每列都和主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。比如:

  • 学生信息表:学号,姓名,年龄,所在学院,学院联系方式,学院地点。主键:学号
  • 存在问题:
    存在依赖传递:学号 → 学院 → (学院地点,学院联系方式)
  • 修正:
    学生信息表:学号,姓名,年龄,所在学院
    学院信息表:学院,学院联系方式,学院地点

数据库三大范式
http://example.com/数据库三大范式/
作者
Panyurou
发布于
2022年5月24日
许可协议