[试题] 110-1 孔令杰 数据库管理 期末考

楼主: unmolk (UJ)   2022-01-28 02:18:57
课程名称︰数据库管理
课程性质︰资管系必修
课程教师︰孔令杰
开课学院:管理学院
开课系所︰资管系
考试日期(年月日)︰110.12.29
考试时限(分钟):160
试题 :
1. 请依照如图1的关联式数据库纲要 (relational database schema) 以及各字段的叙述
,利用PostgresSQL语法手写建立三张资料表。
字段叙述:
(a) (5分) Name变动大小字符,最长10个字符、Ssn长度9的固定字符、Sex长度1的固定字
元、Dno整数。
(b) (5分) Pno整数、Essn长度9的固定字符、Hours整数。
(c) (5分) Pname变动大小字符、Pnumber长度5的固定字符、Dnum整数。
(d) (10分) 当一个员工的长官离职时,长官的社会安全码也就是Super_ssn会被设成NULL
EMPLOYEE
Name | \underline{Ssn} | Sex | Super_ssn | Dno
↑ ↑ ↑
│ └─────────┘

WORKS_ON │
\underline{Pno} | \underline{Essn} | Hours

└───────┐
PROJECT ↓
Pname | \underline{Pnumber} | Dnum
2. (5分) 图2有两张资料表,字段为:Eid销售员的id、Ename销售员姓名、Salary月薪、
Dep部门编号、Pid售出产品编号、Date售出日期。请写SQL语法找出哪位销售员(姓名)有
卖过Pid为2的产品。
Eid | Ename | Salary | Dep Eid | Pid | Date
E001 | Tom | 50000 | 2 E001 | 1 | 2021/8/9
E002 | Dennis | 30000 | 2 E001 | 2 | 2021/8/9
E002 | 1 | 2021/8/9
3. 请利用 ER diagram 针对下列情境进行数据库塑模 (database modeling)。
情境叙述:P. LEAGUE+ 为台湾去年新创的职业篮球联盟,执行长陈建州献声希望你为他建
立一个数据库,为台湾的职篮留下相关的纪录,下列为访谈后所得到的需求。
- A1: (5分) 每一位球员会纪录姓名以及背号,姓名跟背号可以用来识别该球员。
- A2: (5分) 一个球员同时间只会为一支球队打球,但可以转队且会纪录该名球员在某一
队打球开始以及结束的时间。
- A3: (5分) 每一支球队会有唯一的球队名称,一个球队会有多名球员效力。
- A4: (5分) 每一场比赛都会有该场次唯一的比赛编号,并且记录该场次的日期、时间、
场地,每一场比赛所有参与的球员都会被纪录。
4. (a) (10分) 请把 (31,35,7,42,6,24) 这个数列由左到右依序插入到一个原本是空的、
最多分支数为3的B+ tree中,并把最终结果画出来。
(b) (5分) 承上题,请再插入48,并且把更新后的最终结果画出来。
5. (15分) 当有两张资料表A跟B要互相 inner join 的时候,有一种说法是原则上“资
料笔数较少的表放左边、资料笔数多的表放右边”,例如如果A的资料笔数比B多,那就
应该写 Select * From A join B On ... 而非 Select * From B join A On ...。当然,
现代的DBMS基本上是不管你写哪一种,它都会自己帮妳评估谁放左边(做为 outer
table)效率会比较高。
请假设DBMS在做 nested loop join,用你自己的话说明为什么是小的表要放左边(当
outer table),而大的要放右边(inner table),这在simple (stupid) nested loop
join是否成立,在block nested loop join又是否成立。请限制你的答案在500字以内。
6. (20分;各10分) 请考虑以下 SQL query
Select C,CustomerID, S.SalesDate, S.ItemID
From Customer As C Join Sales As S On C.CustomerID = S.CustomerID
Where C.Birthday <= '1981-10-10'
And S.SalesDate >= '2021-10-10'
(a) 有一棵 query plan tree 如图三所示。请把它改得劲量有效率,换言之,你应该画出
一棵会产出一样的结果但效率尽量高的 query plan tree。
π C.CustomerID, S.SaleDate, S.ItemID

δ S.SalesDate >= '2021-10-10'

δ C.Birthday <= '1981-10-10'

∞ C.CustomerID = S.CustomerID
↗↖
Customer As C Sales As A
(b) 你可能有注意到,你并不知道Customer和Sales这两张表谁大(虽然如无意外应该是后
者),更不知道经过筛选后是谁大。此时如果要join这两张表,要如何决定把哪一张表当
做outer table呢?请救你上课所学说说看一个DBMS可以做些什么事情来安排一个有效
率的query plan,以及其步骤大致为何。请限制你的答案在500字以内。

Links booklink

Contact Us: admin [ a t ] ucptt.com