第2关:层次模型

任务描述

本关任务:将层次模型转化为关系模型。

相关知识
层次型数据模型

层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。它采用树形结构来表示各类实体以及实体间的联系。

其实层次数据模型就是的图形表示就是一个倒立生长的树,由基本数据结构中的树(或者二叉树)的定义可知,每棵树都有且仅有一个根节点,其余的节点都是非根节点。每个节点表示一个记录类型对应与实体的概念,记录类型的各个字段对应实体的各个属性。各个记录类型及其字段都必须记录。

上图中,R1、R2 等表示实体类型,也叫做结点,每个实体类型可包含若干个属性,也叫做字段。R1 结点和 R2 结点之间的关系叫做实体间联系。R1 结点叫做根结点,R2 结点和 R3 结点叫做 R1 结点的子节点。R1 结点叫做 R2 结点的双亲结点。没有子结点的结点也叫做叶结点,如 R3 、R4和 R5。

以学校某个系的组织结构为例:

  • 实体系是根结点,由系编号和系名2个属性(字段)组成。它有两个子结点,分别是教研室实体和学生实体。

  • 实体教研室是系的子结点,它由教研室编号和教研室名2个属性(字段)组成。

  • 实体学生是系的子结点,它由学号、姓名和成绩这3个属性(字段)组成,由于它没有子结点,所以也叫叶结点。

  • 实体教师是教研室的子结点,它由教师编号、教师姓名和研究方向组成,由于它没有子结点,所以也叫叶结点。

层次模型的数据操纵与完整性约束
  • 数据操纵

层次模型的数据操纵主要有查询、插入、删除和更新,进行插入、删除、更新操作时要满足其完整性约束条件。

  1. 无相应的双亲结点值就不能插入子女结点值

  2. 如果删除双亲结点值,则相应的子女结点值也被同时删除

  3. 更新操作时,应更新所有相应记录,以保证数据的一致性

  • 完整性约束
  1. 数据及其联系所具有的制约和依赖规则

  2. 保证数据库中数据的正确性、有效性和相容性

  3. 通过指针维护父子关系

层次模型优缺点
  • 优点
  1. 层次模型的数据结构比较简单清晰

  2. 查询效率高,性能优于关系模型,不低于网状模型

  3. 层次数据模型提供了良好的完整性支持

  • 缺点
  1. 结点之间的多对多联系表示不自然

  2. 对插入和删除操作的限制多,应用程序的编写比较复杂

  3. 查询子女结点必须通过双亲结点

  4. 层次命令趋于程序化

层次模型转化为关系模型

关系模型是现在数据库的主流模型,要想把层次模型转化为关系模型,只需把层次模型中的各个实体通过外键关联即可。

现有一个层次模型如下:

该层次模型有三个实体,分别是系、教研室和学生。我们可以把它转化为如下图的关系模型:

可以看出转化为关系模型后,依旧有3个实体,各实体之间通过系编号这一属性形成关联,这一属性体现在建表语句中就是添加外键。

编程要求

在右侧编辑器中的Begin-End之间编写 SQL 语句,将指定的层次模型转换为相应的关系模型后创建表并插入数据。具体要求如下:

  • 层次模型图

将学生表命名为 student,教研室表命名为 edu,院系表命名为 dept,职工表命名为 emp。其中表中字段解释如下:

字段名建表用字段名
系号dept_id
系名dept_name
地址addr
教研室号edu_id
教研室名edu_name
学号student_id
姓名student_name
年级level_class
职工号emp_id
姓名emp_name
职称title

注意:创表时外键字段名和主键字段名一致

插入数据如下图:

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

#请在此添加实现代码
########## Begin ##########
#在mydb库中创建表并插入数据
CREATE TABLE dept (dept_id CHAR (3) PRIMARY KEY,dept_name VARCHAR (20) NOT NULL,addr VARCHAR (100)
);
CREATE TABLE edu (edu_id CHAR (3) PRIMARY KEY,edu_name VARCHAR (20),dept_id CHAR (3),FOREIGN KEY (dept_id) REFERENCES dept (dept_id)
);
CREATE TABLE student (student_id CHAR (10) PRIMARY KEY,student_name VARCHAR (10),level_class CHAR (3),dept_id CHAR (3),FOREIGN KEY (dept_id) REFERENCES dept (dept_id)
);
CREATE TABLE emp (emp_id CHAR (10) PRIMARY KEY,emp_name VARCHAR (10),title VARCHAR (10),edu_id CHAR (3),dept_id CHAR (3),FOREIGN KEY (edu_id) REFERENCES edu (edu_id),FOREIGN KEY (dept_id) REFERENCES dept (dept_id)
);
INSERT INTO dept VALUES ('D02', '计算机', 'R1101');
INSERT INTO edu VALUES ('R01', '数据库', 'D02'),('R02', '网络', 'D02'),('R03', '人工智能', 'D02');
INSERT INTO student VALUES ('S0012', '王明','G1','D02'),('S0020', '郑直','G2', 'D02'),('S0199', '周密','G3', 'D02');
INSERT INTO emp VALUES ('E1101', '何璧','教授','R01', 'D02'),('E3721', '刘新','讲师','R01', 'D02'),('E1234', '王思','教授','R03', 'D02'),('E3722', '付弈','助教','R03', 'D02');



########## End ##########

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小珠佩奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值