任务描述
本关任务:将 E-R 图 转换为关系模型,并创建这些转换的表。
相关知识
数据库数据模型通常可分为三种:关系模型、层次模型和网状模型。
关系模型是最重要的一种数据模型,下面我们就先来学习关系模型的相关知识。
关系型数据模型
用二维表表示实体类型及实体间联系的数据模型称之为关系数据模型。
关系型数据模型对应的数据库自然就是关系型数据库了,这是目前应用最多的数据库。
例如以学生选课系统为例进行说明:
学生选课系统的实体包括:学生、教师、课程;其联系一般为学生与课程之间是一种多对多的关系,教师与课程之间是多对多的关系。学生可以同时选择多门课程,一门课程也可以同时被多个学生同时选择;一位教师可以教授多门课程,一门可能可以由多个教师教授。因此他们之间的联系如下:
将该 E-R 图映射为关系数据模型中的表格如下:
- 学生
- 课程
- 教师
- 选课
- 教课
从中我们可以观察到学生与课程之间的联系以及教师和课程之间的多对多联系都被映射成了表格。其中选课表中的 stu_id 和 course_id 分别是引用学生表和课程表的 course_id 的外键,教课表也是如此。
关系模型基本术语
在关系模型种有以下术语:
-
关系:一个关系对应通常说的一张表。
-
元组:表中的一行即为一个元组。
-
属性:表中的一列即为一个属性,给每一个属性起一个名称即属性名。
-
码:也称码键,表中的某个属性组,它可以唯一确定一个元组。
-
域:是一组具有相同数据类型的值的集合,属性的取值范围来自某个域。
-
分量:元组中的一个属性值。
-
关系模型:对关系的描述,一般表示为:关系名(属性1,属性2,…,属性 n)
注意:关系必须是规范化的,满足一定的规范条件。最基本的规范条件:关系的每一个分量必须是一个不可分的数据项,不允许表中还有表。
关系模型的数据操纵与完整性约束
- 数据操纵
关系模型的数据操纵主要包括查询、插入、删除和更新数据,它的数据操纵是集合操作,操作对象和操作结果都是关系,如关系代数。
- 完整性约束
数据及其联系所具有的制约和依赖规则,保证数据的正确性、有效性和相容性
关系必须满足实体完整性、参照完整性和用户定义完整性约束
关系模型优缺点
- 优点
-
结构简单,都是一些表格的框架,实体的属性是表格中列的条目,实体之间的关系也是通过表格的公共属性表示,结构简单明了。
-
存取路径对用户而言是完全隐蔽的,使程序和数据具有高度的独立性,其数据语言的非过程化程度较高。
-
操作方便,操作的基本对象是集合而不是某一个元祖。
-
有坚实的数学理论做基础,包括逻辑计算、数学计算等。
- 缺点
-
查询效率低,关系数据模型提供了较高的数据独立性和非过程化的查询功能(查询的时候只需指明数据存在的表和需要的数据所在的列,不用指明具体的查找路径),因此加大了系统的负担。
-
由于查询效率较低,因此需要数据库管理系统对查询进行优化,加大了 DBMS 的负担。
编程要求
在右侧编辑器中的Begin-End
之间编写 SQL 语句,将 E-R 图 转换成二维表,创建这些转换的表。 E-R 图如下:
说明:一共涉及五张表,将表明分别确定为t_player
(参赛选手表)、t_school
(参赛学校表)、t_product
(参赛作品表)、t_player_product
(参赛选手与作品联系表)和t_school_player
(参赛选手与学校联系表),创表时除两张关联表外,各字段顺序按照图中标签顺序拟定,字段类型除编号、学号、得分、电话、大小为int(11)
,其他字段皆为varchar(32)
。
两张关联表字段顺序如下:
- t_player_product
字段 | 说明 |
---|---|
p_id | 选手编号 |
pr_id | 作品编号 |
pr_grade | 作品成绩 |
grade_rates | 获奖等级 |
- t_school_player
字段 | 说明 |
---|---|
s_name | 学校名称 |
p_id | 选手编号 |
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,并往你创建的表种添加数据,当你的结果与预期输出一致时,即为通
#请在此添加实现代码
########## Begin ##########
#在mydb库中创建表
create table t_player(
p_id int(11) NOT NULL,
p_name varchar(32) NOT NULL,
p_sex varchar(32) NOT NULL,
p_num int(11) NOT NULL,
p_email varchar(32) NOT NULL,
PRIMARY KEY (p_id)
);
create table t_school(
s_name varchar (32) NOT NULL,
s_address varchar(32) NOT NULL,
s_telephone int(11) NOT NULL,
s_email varchar (32) NOT NULL,
PRIMARY KEY (s_name)
);
create table t_product(
pr_id int(11) NOT NULL,
pr_name varchar(32) NOT NULL,
pr_kind varchar(32) NOT NULL,
pr_link varchar(32) NOT NULL,
pr_size int(11) NOT NULL,
PRIMARY KEY (pr_id)
);
create table t_player_product(
p_id int(11) NOT NULL,
pr_id int(11) NOT NULL,
pr_grade int(11) NOT NULL,
grade_rates varchar(11) NOT NULL,
CONSTRAINT fk_player_product1 FOREIGN KEY t_player_product(p_id) REFERENCES t_player(p_id),
CONSTRAINT fk_player_product2 FOREIGN KEY t_player_product(pr_id) REFERENCES t_product(pr_id)
);
create table t_school_player(
s_name varchar(32) NOT NULL,
p_id int(11) NOT NULL,
CONSTRAINT fk_school_stu1 FOREIGN KEY t_school_player(s_name) REFERENCES t_school(s_name),
CONSTRAINT fk_school_stu2 FOREIGN KEY t_school_player(p_id) REFERENCES t_player(p_id)
);
########## End ##########
过。