DBMS中1NF和2NF的区别

  • Post category:database

DBMS(数据库管理系统)是一种计算机软件,用于创建、管理和操作数据库。在数据库设计中,1NF (第一范式)和2NF (第二范式)是非常重要的概念,用于保证数据规范化和数据完整性,下面将详细讲解1NF和2NF的区别,并给出实际的例子。

1NF

1NF是指一个关系中所有的属性都是原子性的,不可分解的。在表格中,每列(属性)必须都是单一的,不包含重复值和群组值,这样才能保证数据的规范化。例如,如果我们有一个包含学生姓名、课程名称和成绩的表格,如果我们把学生姓名和课程名称都放在同一个列中,如“学生:数学”,那么这样并不符合第一范式的要求。

2NF

2NF的定义是在1NF的基础上,任何非主属性都必须完全依赖于主键。 换句话说,一个表格中的每一列都必须直接或间接地依赖于主键,这样才能避免数据冗余和数据不一致。例如,如果我们有一个包含订单编号、产品名称、产品价格和产品类别的表格,用订单编号作为主键,那么产品名称、产品价格和产品类别只需要和订单编号联系,就可以确定它们各自的值。如果我们用产品名称作为主键,那么这个表格就无法达到2NF。

现在,我们来看一下一个案例,输入一本书籍信息的表格,包含以下列:书名、作者、作者国籍、作者出生日期、ISBN号。 这个表格的主键是ISBN号。以下是表格的实例:

ISBN Book Title Author Author Nationality Author Birthday
1234 Book A John USA 01/01/1980
1234 Book A Lucy Canada 03/05/1978
5678 Book B Ann USA 07/10/1990

在这个表格中,主键是ISBN号,每个行都唯一确定,而书名和作者的关系是一对多的(即一本书可以有多个作者),使用书名和作者作为复合主键可能不合适,因为一个作者可能为多本书作家,这样就造成了数据冗余。如果我们将这个表格规范化为1NF,每个作者将在不同的行中出现,我们将会得到以下内容。

ISBN Book Title Author Author Nationality Author Birthday
1234 Book A John USA 01/01/1980
1234 Book A Lucy Canada 03/05/1978
5678 Book B Ann USA 07/10/1990

在1NF表格中,每行只描述一个作者的信息,包括ISBN号、书名、作者、作者国籍和作者出生日期的列都是原子性的,符合第一范式的要求,但并不满足第二范式的要求。因为在这个表格中,非主属性“作者国籍”和“作者出生日期”并不完全依赖于主键“ISBN”,而是只依赖于外键“作者”的列。 如果我们将表格规范化到第二范式,我们将找到合适的分析对象,此例中的分析对象是“书”和“作者”。我们可以把它们分开成两张表格:

Books:

ISBN Book Title
1234 Book A
5678 Book B

Authors:

ISBN Author Author Nationality Author Birthday
1234 John USA 01/01/1980
1234 Lucy Canada 03/05/1978
5678 Ann USA 07/10/1990

现在,每个表格都符合第一范式和第二范式,没有数据冗余和数据不一致的问题。在Books表格中,ISBN号是主键,每个行都唯一确定。在Authors表格中,每个行都描述一个作者,其中ISBN号作为外键,联系到Books表格中对应的行。

综上所述,1NF和2NF是非常重要的概念,用于保证数据规范化和数据完整性。要想判定一个表格是否符合1NF和2NF的要求,需要理解这些概念的定义、理解主键和外键的概念,并且考虑每列以及它们之间的关系。