数据库范式举例理解应用?

数据库三范式

三范式详细内容

阅读 1.8k
avatarAI BotBETA

数据库范式(Database Normalization)是关系型数据库设计的基础理论,用于指导如何构建无冗余和结构良好的数据库。三范式是数学定理在数据库设计中的应用,它们分别是:

  1. 第一范式(1NF):
* **定义**:每个列都不可再分,即列中存储的都是原子值,不可再分的数据项。
* **理解**:在关系型数据库中,每个字段都应该只包含一个值,不应该有集合、数组或记录等复杂的数据结构。
* **举例**:假设有一个字段用于存储用户的地址,它包含了省、市、区和详细地址等多个信息。这违反了1NF,应该将这个字段拆分为多个字段,如`province`、`city`、`district`和`address`。
  1. 第二范式(2NF):
* **定义**:满足第一范式,并且每个表只描述一件事情。即每个非主属性都完全函数依赖于整个主键。
* **理解**:如果一个表有一个复合主键,则该表的每一个非主属性都应该依赖于这个复合主键的整个部分,而不仅仅是部分。
* **举例**:考虑一个订单明细表,其中有一个复合主键(订单ID,产品ID)。如果只有订单ID决定了某些列(如订单日期、客户名等),而产品ID决定了其他列(如产品名称、价格等),那么这个表就违反了2NF。应该将这个表拆分为两个表:订单表和产品表。
  1. 第三范式(3NF):
* **定义**:满足第二范式,并且非主属性之间没有传递依赖。即非主属性不应该依赖于其他非主属性。
* **理解**:如果一个非主属性依赖于另一个非主属性,那么这个表就违反了3NF。
* **举例**:考虑一个员工表,其中有一个字段是员工的部门名称,而这个部门名称是由另一个表的部门ID决定的。这就是一个传递依赖,因为员工表依赖于部门ID,而部门ID又决定了部门名称。为了满足3NF,应该删除员工表中的部门名称字段,并在需要时通过连接操作从部门表中获取。

通过遵循三范式,可以确保数据库的结构清晰、冗余度低,并且易于维护。然而,在某些情况下,为了查询性能和其他的优化,设计者可能会故意违反三范式。这种情况下,设计者需要仔细权衡规范化的好处和潜在的缺点,并做出明智的决策。

2 个回答

1.第一范式(1NF)
表中各字段不可再分
eg:学生信息表
image.png
在此表中,可以看到联系方式一列又分为qq,微信,不符合第一范式
解决:如下图
image.png
2.第二范式(2NF)
不存在非关键字段对关键字段的部分依赖
eg:
image.png
这张表中,学号和课程编号为联合主键,即为关键字段,其他为非关键字段,通过学号,可以查出姓名,年龄,,通过课程编号,可以查出课程名称,存在非关键字段对关键字段的部分依赖,不符合第二范式
解决:将各主键单独列出来,再将组合的主键列出来(三张表)
1.image.png
2.image.png
3.image.png
3.第三范式(3NF)
不存在非关键字段的传递依赖
eg:
image.png
此表中学号为主键,学号可以确定这个学生在哪个学院,学院编号依赖PK,学院编号有唯一确定学院名称,存在传递依赖,所以不符合第三范式
解决:将关键字段和被依赖的非关键字段分别作为主键,依次检查所有的非关键字段的依赖关系
1.image.png
2.image.png

宣传栏