APP下载

SQLServer数据表范式细化设计教学研究

2021-10-24陈伟莲

计算机时代 2021年10期
关键词:教学实例数据表范式

陈伟莲

摘要: 在数据库系统及应用教学中,传统教学采用数学公式对关系模型数据表范式设计进行定义和描述,使多数学生理解得不是很透彻。就此问题,文章通过实例探讨了关系数据库SQL Server数据表范式设计的教学,使得教师可以简单教学,学生易于理解,对于数据库设计能力有进一步的提高,对教学质量有进一步的提升。

关键词: 数据表; 范式; 教学实例; 设计能力

中图分类号:TP393.09          文献标识码:A     文章编号:1006-8228(2021)10-96-03

Research on the teaching of detailed design of SQL Server data table paradigm

Chen Weilian

(Information Technology Department of Guangdong Polytechnic College, Zhaoqing, Guangdong 526061, China)

Abstract: In the teaching of database system and application, the traditional teaching uses mathematical formulas to define and describe the design of data table paradigm of relational model, so that most students do not have a very thorough understanding of it. On this issue, this paper discusses the teaching of relational database SQL Server data table paradigm design through examples, so that teachers can simply teach, students are easy to understand, further improve their database design ability thereby the teaching quality.

Key words: data table; paradigm; teaching example; design ability

0 引言

在數据库系统及应用教学过程中,除了考虑教材因素还要考虑学生理解能力参差不齐的因素。在关系模型数据库SQL Server数据表范式设计上,传统教学采用数学公式进行定义和描述,多数学生理解得不是很清楚明白,为了使得老师可以简单教学,学生易于理解,对数据库设计能力有进一步的提高,本文就此问题,拟对关系数据库SQL Server数据表范式细化设计教学进行一些实例探讨。

本文在阐述关系数据库范式定义基础上,结合具体数据表结构,因SQL语言进行表述,并生成具体数据表。通过这些实例,教师会更容易传授模块知识,让学生摆脱数学公式的抽象感,用更接近实际应用的数据表进行理解,从而更好学习数据库基本原理。

1 关系数据库范式定义

根据通用教材定义,关系数据库范式一般被定义为,在关系数据库中的关系是需要满足一定条件的,满足这些不同程度的规范化就叫做范式,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法[1]。目前有迹可寻的共有八种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF),本文就探讨此三范式。

第一范式(1NF)是指如果一个关系的每一属性都是不可再分的,则该关系属于第一范式。也就是说,数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或不能有重复的属性[2]。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。

第二范式(2NF)是指如果关系模型为第一范式,并且关系中的每一个非主属性完全函数依赖于此关系的某个候选键,则称该关系为第二范式,第二范式是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF) [3]。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分,为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

第三范式(3NF)是指如果关系模型是属于第二范式,并且它的每个非主属性都不传递依赖于此关系的主属性,则称该关系是第三范式[4]。由此可见,第二范式(2NF)可从第一范式(1NF)消除非主属性对主属性的部分函数依赖后获得,而第三范式(3NF)可从第二范式(2NF)消除非主属性对主属性的传递函数依赖后获得。

2 数据表范式细化设计教学实例

2.1 第一范式(1NF)教学实例

根据定义可知,第一范式就是无重复的列。先列举一个实例,设有一个简明学生数据表stu1,由学号、姓名、性别、年龄、通讯方式组成的表,如表1。

由于表1中通讯方式列包括微信号或QQ号,有嵌套列,没有达到第一范式的基本要求见,在SQLSERVER无法实现数据表表述,此时需要将其规范化为第一范式。可以将通讯方式分为“微信号”和“QQ号”两个属性,即学生(学号,姓名,性别,年龄,微信号,QQ号),SQL语言描述如下:

create table stu2(学号 int,姓名 varchar(10),

性别 char(2),年龄 int, 微信号 int,QQ号 int)

insert into stu2 values

(202001,'小陈','男',16,1350103,3964531)

insert into stu2 values

(202002,'小李','男',15,1340203,4561326)

insert into stu2 values

(202003,'小黄','女',16,223583,4789561)

insert into stu2 values

(202004,'小何','女',17,1369874,6969583)

在SQL Server中实现数据表如表2,达到第一范式的基本要求。其中,在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

2.2 第二范式(2NF)教学实例

根据定义,第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,数据库表中非关键字段对任一候选关键字段的都不存在部分函数依赖[5]。即是认为,第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分,为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识,这个唯一属性列被称为主关键字或主键、主码。因此,当第一范式(1NF)设计中当主键为组合关键字时,必须将其规范化为第二范式(2NF),否则会导致数据表数据冗余及更新异常等问题。

列举一个实例,设定一个学生课程成绩表sci1,由学号、姓名、课程号、课程名称、成绩等项组成,关键字为组合关键字(学号,课程号),SQL语言描述如下:

create table sci1(学号 int,姓名 char(10), 课程号 int,

课程名称 char(10),成绩 int, primary key(学号,课程号))

insert into sci1 values(202001,'小陈',101,'中文',76)

insert into sci1 values(202002,'小李',101,'中文',80)

insert into sci1 values(202003,'小黄',101,'中文',91)

insert into sci1 values(202001,'小陈',102,'数学',66)

在SQL Server中实现数据表如表3,该表符合第一范式(1NF)定义,但是存在如下决定关系:(课程号)→(课程名称);(学号)→(姓名)。存在组合关键字中的字段决定非关键字的情况,由于非主属性课程名称仅依赖于课程号,对关键字(学号,课程号)只是部分的依赖,而不是完全依赖,不符合2NF的基本要求。

要将上述数据表规范为第二范式(2NF),可以根据定义,为数据表增加一列ID,作为各个实例的唯一主键,ID为自增序列数,SQL语言描述如下:

create table sci2(ID int identity(1,1) primary key,

学号int,姓名 char(10), 课程号 int, 课程名称 char(10),

成绩 int)

insert into sci2 values(202001,'小陈',101,'中文',76)

insert into sci2 values(202002,'小李',101,'中文',80)

insert into sci2 values(202003,'小黄',101,'中文',91)

insert into sci2 values(202001,'小陈',102,'数学',66)

上述设计的数据库表是符合第二范式的,部分消除了更新异常、插入异常和删除异常。但是如此设计的学生课程成绩表会导致数据冗余:同一门课程号由多个学生选修,课程名称就重复学生数减1次;同一个学号选修了多门课程,姓名就重复学生数减1次,所以有必要进一步优化。

2.3 第三范式(3NF)教学实例

在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A→B→C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应不存在如下依赖关系:关键字段→非关键字段x→非关键字段y。简单来说,就是非主键字段不能相互依赖[6]。

基于上述表4学生课程成绩表(ID,学号,姓名,课程号,课程名称,成绩)关系分析,关键字为单一关键字“ID”,存在如下决定关系:

(ID)→(学号)→(姓名)

(ID)→(课程号)→(课程名称)

即存在非关键字段“姓名”、“课程名称”对关键字段“ID”的传递函数依赖,以不属于第三范式,会存在数据冗余、更新异常、插入异常和删除异常的情况。

在细化教学案例中,要把表4学生课程成绩表sci2改为如下三个表:学生表:stu(学号,姓名);课程表:cou(课程号,課程名称);成绩表:rep(学号,课程号,成绩)。

细化后的学生表见表5,SQL语言描述如下:

create table stu(学号 int,姓名 char(10),primary key(学号))

insert into stu values(202001,'小陈')

insert into stu values(202002,'小李')

insert into stu values(202003,'小黄')

细化后的课程表见表6,SQL语言描述如下:

create table cou(课程号 int, 课程名称 char(10),

primary key (课程号))

insert into cou values(101,'中文')

insert into cou values(102,'数学')

细化后的成绩表见表7,SQL语言描述如下:

create table rep(学号 int,课程号 int, 成绩 int,

primary key (学号,课程号))

insert into rep values(202001,101,76)

insert into rep values(202002,101,80)

insert into rep values(202003,101,91)

insert into rep values(202001,102,66)

如此设计的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常,但是实际应用中太过细化的设计会造成查询连接的复杂度。

3 结束语

通过对关系数据库SQL Server数据表范式实例化细化教学,让教师在教学上有具體应用例子,易于将理论融入实践教学,易将数学公式用实际数据库表呈现;而学生由于有实际应用例子作为参照物,容易理解几种关系数据库范式,在数据库实际应用中有一定直观的认识,在此认识基础上获得一定的设计经验,能更好的投入到符合实际需要的设计,对数据表设计的能力会有进一步的提高。将数据表范式设计实例化模式取得了一定的实际教学效果,获得了大多数学生的肯定,希望这对同类高校数据库原理及应用课程教学改革有一定的参考意义。

参考文献(References):

[1] 史嘉权.数据库系统教程[M].清华大学出版社,2001.

[2] 刘世峰.数据库基础与应用[M].中央开放大学出版社,2004.

[3] 王珊,萨师煊.数据库系统概论[M].高等教育出版社,2006.

[4] 孙俊吾.浅析关系数据库中关系模式的规范化理论[J].职业技术,2009.7.

[5] 马雪英.基于函数依赖的模式分解方法[J].计算机应用与软件,2004.4:31-33

[6] 季飞.关系数据库规范化应用研究[J].科技资讯,2007.36.

猜你喜欢

教学实例数据表范式
以写促读:构建群文阅读教学范式
范式空白:《莫失莫忘》的否定之维
孙惠芬乡土写作批评的六个范式
湖北省新冠肺炎疫情数据表
基于列控工程数据表建立线路拓扑关系的研究
管窥西方“诗辩”发展史的四次范式转换
例谈初中化学实验教学的认识和实践
简析初中英语语法教学对于学生成绩提高的重要性
学用批注“石”,巧搭能力“梯”
图表