作者unmolk (UJ)
看板NTU-Exam
标题[试题] 110-1 孔令杰 资料库管理 期末考
时间Fri Jan 28 02:18:57 2022
课程名称︰资料库管理
课程性质︰资管系必修
课程教师︰孔令杰
开课学院:管理学院
开课系所︰资管系
考试日期(年月日)︰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字以内。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.73.129 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/NTU-Exam/M.1643307540.A.CA1.html
1F:推 wwwh0225 : 齁 小杰P粉,怎麽不出T1呢XD 01/28 23:25
2F:推 yutaitai : P+ 是合授老师出的 XD 前三题都是 01/29 17:47
3F:推 aristoIris : 第三题是不是错字了 XD 01/31 02:50
4F:→ aristoIris : 献声 -> 先生 01/31 02:50
5F:→ unmolk : 懒得改了不过还是感谢楼上xd 02/02 15:41