0
点赞
收藏
分享

微信扫一扫

数据建模——三范式#yyds干货盘点#

三范式

数据建模三范式是关系型数据库设计中的规则和标准,用于确保数据的正确性和一致性。

根据三范式规则,一个关系型数据表必须符合以下三个范式:

  1. 第一范式(1NF):表中每个单元格必须是不可分割的原子值,即每个列必须是一个单一的属性,不允许多个值存储在同一个单元格中。
  2. 第二范式(2NF):表中的每个非主键列都必须完全依赖于主键,即每个表的每个非主键列都必须依赖于主键的全部属性。
  3. 第三范式(3NF):表中不能存在传递依赖关系,即非主键列不应该依赖于其他非主键列。

通过遵循三范式规则,可以确保表格设计合理、可扩展性好,并且数据存储和检索高效。

三范式的规范化流程通常由以下步骤组成:

  1. 第一步是确定实体和属性:确定每个表所涉及的实体和属性。实体指代信息系统中的基本对象,属性指代实体的属性或特征。
  2. 第二步是制定未规范化的表:用所有属性列列出所有实体的表。每个行应包含一个实体的所有属性。
  3. 第三步是应用第一范式:对表进行规范化,将每个表中的所有属性原子化,确保每个属性都是不可分割的原子值。
  4. 第四步是应用第二范式:将表规范化成第二范式,确保非主键列对主键完全依赖。删除含有部分依赖的表的非主键列。
  5. 第五步是应用第三范式:将表规范化为第三范式,确保表中不存在传递依赖。如果存在传递依赖,那么将这些属性移动到一个单独的表中,并用主键连接两个表。
  6. 第六步是检查规范化的表:确保规范化的表不会过于复杂且有意义,并且确保它们之间存在适当的联系和关联。

通过以上六个步骤,您可以应用三范式规则来规范化您的数据,并确保数据的正确性和一致性。

第一范式(1NF)

第一范式(1NF)是关系型数据库设计中的第一个范式,它是一个通过要求每个列中只包含单一值而解除重复数据的过程。

具体来说,第一范式要求每列必须是一个单一的属性,不允许多个值存储在同一个单元格中。 如果某一列包含多个值,则需要将其分成多个列来确保每个列中只包含单一值。另外,一个表中一定要有主键来确保每行数据的唯一性。

例如,考虑一个“学生”表格,其中的“课程”列包含多个值。使用第一范式,我们需要将“课程”拆分出来,行数据会变为每个学生与每个课程的单一组合:

学生 课程1 课程2 课程3
Tom Yes No No
Jerry Yes Yes Yes
Angela No Yes No

使用第一范式可以确保数据不重复,也可以更轻松地进行检索和比较,是一种合理和实用的数据库设计范式。

第二范式(2NF)

第二范式(2NF)是关系型数据库设计中的第二个范式,它是通过消除非主键列对主键部分依赖来优化数据库设计的过程。 首先得满足第一范式, 如果非主键属性只依赖于主键的一部分,则需要移出创建新表 。

在一个表中,如果某个非主键列的值与主键的一部分有关,则该列对主键有部分依赖。使用第二范式,我们需要将这样的列从主表中移除,创建一个新的表,并将这个列连接到新表中的主键。

例如,一个包含订单和订单条目信息的“订单”表中,如果订单下的每个条目可以有不同的地址,则收货地址通过订单号部分依赖于主键。在这种情况下,使用第二范式需要将收货地址从“订单”表中移至一个新的地址表中,在新表中创建新的主键,并从订单表中用外键来引用这些地址数据。

使用第二范式可以避免数据库中的数据冗余和更新异常,提高数据库的灵活性和可维护性。

第三范式 (Third Normal Form, 3NF)

第三范式 (Third Normal Form, 3NF)是关系型数据库设计中的一种范式。如果一个关系模式R已经满足第二范式(2NF),并且对于非主属性对于候选关键字是非传递的,那么它就符合了第三范式 (3NF)。

简洁来说,第三范式的目的是消除非主属性之间的依赖关系,减少数据冗余,提高数据存储的效率和一致性。 首先得满足第二范式, 如果非主键属性还依赖其他非主属性,则需要移出创建新表。

举个例子:

假设有一个订单项表,其中包含订单号,产品编号,产品名称,以及产品描述。其中,产品名称和产品描述是根据产品编号所确定的。这时候,产品名称和产品描述就与订单号不直接相关了,只与产品编号相关。这种设计存在冗余,因为每次新增或修改订单,产品名称和产品描述都需要被更新。这个问题可以通过将产品名称和产品描述移动到一个单独的产品表中解决。这样,订单只需要记录产品编号,而不是完整的产品信息,就可以避免数据冗余并提高数据一致性。

因此,使用第三范式可以提高数据库的性能和减少数据冗余。但是,需要注意的是,过分地追求范式并不一定是最好的选择,而是应该根据实际的需求来设计数据库。

举报

相关推荐

0 条评论