跳转至

2018-2019-1期末

一 选择题(30分)

  1. MongoDB 集合(Collection) sample中有如下的文档(Document):

  2. { "_id": 1, "a": 0, "c": 0, "b": 2 }

  3. { "_id": 2, "a": 2, "c": 0, "b": 1 }
  4. { "_id": 3, "a": 4, "c": 0, "b": 14 }
  5. { "_id": 4, "a": 5, "c": 0, "b": 17 }
  6. { "_id": 5, "a": 3, "c": 0, "b": 12 }
  7. { "_id": 6, "a": 1, "c": 1, "b": 5 }
  8. { "_id": 7, "a": 8, "c": 1, "b": 7 }
  9. { "_id": 8, "a": 11, "c": 1, "b": 0 }
  10. { "_id": 9, "a": 17, "c": 1, "b": 1 }
  11. { "_id": 10, "a": 3, "c": 1, "b": 1 }

下面查询语句的返回结果包含哪些文档(Document)? ( ) db.sample.find({ "$or": [ { "a": { "$in": [3, 10] } }, { "b": { "$lt": 2 } } ] }) A. 2, 5, 8, 9, 10 B. 3, 4, 7, 9, 10 C. 3, 4, 5, 7, 9 D. 5, 7, 8, 9, 10

  1. MongoDB 集合(Collection) sample上有如下的索引:
[
  {
    "v": 1,
    "key": {
      "_id": 1
    },
    "name": "_id_",
    "ns": "test.sample"
  },
  {
    "v": 1,
    "key": {
      "name": 1,
      "date": 1,
      "phone": 1
    },
    "name": "name_1_date_1_phone_1",
    "ns": "test.sample"
  }
]

下面哪个查询不能利用索引? ( )

A. db.sample.find({ _id: 22, date: ISODate("2012-07-04") })

B. db.sample.find({ date: ISODate("2019-01-01"), name: "Alice" })

C. db.sample.find({ name: "Bob" })

D. db.sample.find({ phone: "123-456-7890", info: "201-555-5792" })

  1. 为了在数据库出现故障时保证高可用性,应该使用MongoDB的下列哪个功能? ( )

A. 对所有文档(Document)建立索引

B. 选择合适的存储引擎

C. 复制(Replication)

D. 分片(Sharding)

  1. 设有关系模式 \(R(U,FD)\) 其中,属性为 \(U=\{A,B,C,D\}\),函数依赖为 \(FD=\{A \rightarrow C, C \rightarrow B, AC \rightarrow D\}\)。关系模式R的键为( )。

A. AC

B. A

C. AB

D. BC

  1. 下面字符串能与通配符表达式 A_a%b 进行匹配的是( )。

A. ABCDEb

B. Aaab

C. Aab

D. Aa%b

  1. 如果有6个实体,其关系如下图所示(**表示m:n关系,1*表示1:n关系,空心箭头指向父类):

image-20260519083722847

若需要为其设计数据库表结构,那么下列说法中错误的是( )

A. 可以在C表中有一列记录B表的外键

B. 可以用一张单独的关联表记录C表与D表的联系

C. 可以用一张单独的关联表记录A表与B表的联系

D. 可以只用1张表完整存储A, A1, A2 的数据

  1. A系统依赖数据库服务,当数据库吞吐能力变弱,大量操作延时,A系统会自动降级,人为降低数据库的负载,防止数据库宕机。A系统可以采取哪种手段降低数据库负载( )

A. 修改数据库表结构

B. 降低A系统对数据库的用户权限

C. 关闭数据库

D. 限制A系统对数据库的网络发包数

  1. 在使用 TPC-C 基准测试模型测试数据库系统tpmC性能时,我们可以通过调整哪个比率因素(scale factor)来调整 TPC-C 测试中数据集的大小。( )

A. 仓库(warehouse)的数量

B. 库存(stock)的数量

C. 区域(district)的数量

D. 客户(customer)的数量

  1. 在某书籍电商平台的数据库中有book 和 order 两张表。他们分别记录了书本信息和订单信息。查询18年下半年后以“PostgreSQL”为标题开头的书籍销售量,则下列那个选项中的SQL 最有可能消耗最短时间(book.name为varchar类型且在该列有索引,o_date为date 数据类型)。( )

A.

SQL

select count(1)
from book, order
where book.id = order.id
and book.name like 'PostgreSQL%'
and extract(month from order.o_date) > 6;

B.

SQL

select count(1)
from book, order
where book.id = order.id
and book.name like 'PostgreSQL%'
and order.o_date > to_date('2018-6-30', 'yyyy-mm-dd');

C.

SQL

select count(1)
from book, order
where book.id = order.id
and book.name >= 'PostgreSQL'
and book.name < 'PostgreSQM'
and extract(month from order.o_date) > 6;

D.

SQL

select count(1)
from book, order
where book.id = order.id
and book.name >= 'PostgreSQL'
and book.name < 'PostgreSQM'
and order.o_date > to_date('2018-6-30', 'yyyy-mm-dd');
  1. 以PostgreSQL 这样的磁盘数据库为例。当系统需要高并发地处理大量的短事务请求时,下列哪个选项中的系统配置的调整可能得到最优的系统吞吐率(throughput) ( )

A. 适当调低日志缓冲区的大小,适当调低日志缓冲区数据刷入磁盘的时间间隔,适当调粗锁的粒度。

B. 适当调高日志缓冲区的大小,适当调高日志缓冲区数据刷入磁盘的时间间隔,适当调细锁的粒度。

C. 适当调高日志缓冲区的大小,适当调高日志缓冲区数据刷入磁盘的时间间隔,适当调粗锁的粒度。

D. 适当调低日志缓存区的大小,适当提高日志缓冲区数据输入磁盘的时间间隔,适当调细锁的粒度。

  1. 关于数据仓库的星型模式(Star Schema)和雪花型模式(Snowflake Schema),下面哪些说法是不正确的?( )

A. 雪花型模式是星型模式的进一步范式化。

B. 事实表(Fact) 通常比维表(Dimension)更大。

C. SQL 不支持雪花型模式上的 CUBE 操作。

D. 它们都是ROLAP的数据模式。

  1. 关于事务处理的ACID性质,下面哪些说法是不正确的?( )

A. A是原子性,需要日志机制和并发控制机制共同保障。

B. C是一致性,通过约束机制保障。

C. I是隔离性,通过并发控制机制保障。

D. D是持久性,需要日志机制和并发控制机制共同保障。

  1. 使用事务的正确原则不包括( )

A. 尽量避免使用长事务。

B. 尽量避免事务之间的冲突(即同时访问同一项数据)。

C. 尽量避免事务过程中的人机交互。

D. 尽量避免分布式事务。

  1. 关于并行数据库的架构,正确说法是( )

A. Shared Memory 架构比 Shared Nothing 架构扩展能力更强。

B. Shared Disk架构中,所有节点都可以访问其他节点的缓存。

C. Shared Nothing 架构有利于减少节点间的通信。

D. Shared Memory 架构是最常用的架构。

  1. 关于CAP 理论的正确说法是( )

A. 现有的数据库系统可以分为CP、AP、CA三种类型。

B. 传统的关系数据库(比如Oracle)是CP型系统。

C. MongoDB 是AP型系统。

D. 当P发生时,C和A可以同时得到某种程度的兼顾。


二 简答题(15分)

在设计 MongoDB 数据库文档(Document)结构时,需要考虑是使用嵌套型的文档(如 Figure 1),还是使用引用型的文档(如Figure 2)。

image-20260519084706692

image-20260519084731117

考虑微信朋友圈的例子(忽略好友关系),用户可以发朋友圈消息,朋友可以评论和点赞。一条朋友圈信息包含发表作者,发表内容,发表时间,哪些朋友赞或评论了这条朋友圈消息;评论消息中包含评论作者,评论内容,评论时间。请为微信朋友圈设计 MongoDB 数据库:

(1) 如果使用嵌套型文档结构,应该如何设计?(只有用户信息1个集合)

(2) 如果使用引用型文档结构,应该如何设计?(用户信息,朋友圈消息,评论消息3个集合)

(3) 哪种设计更合理?为什么?


三. 简答题(15分)

用SQL 语句描述以下关系数据库的查询:

  • Student (Sid, Sname, Sage, Ssex)
  • Course (Cid, Cname, Tid)
  • SC (Sid, Cid, score)
  • Teacher (Tid, Tname)

(1) 列出在每一门课程上的成绩都高于该课程平均成绩的学生

(2) 求每门课程最好成绩和最差成绩的分差

(3) 列出各科成绩前三名的学生id,姓名,课程和课程成绩


四. 简答题(10分)

image-20260519084950168

上图给出了数据库系统中应用、功能组件以及硬件资源之间的大致关系。

(1) 请阐述:在分析型负载(OLAP)和交易型负载(OLTP)下易发生性能瓶颈的系统组件和硬件资源有什么不同。

(2) 请针对这些性能瓶颈给出适当的调优方案。


五. 简答题(20分)

请利用 ER 图设计以下场景的数据库:

快递公司旗下有很多快递员和派送中心,向用户提供快递服务。用户向系统发送投递请求;系统收到用户请求后,联系就近快递员去用户指定地点取包裹;快递员取到包裹后向系统确认,然后将包裹送到任意一个派送中心;派送中心收到包裹后,再次向系统确认,系统收到确认后立即通知用户。

整个快递投递过程需要使用哪些事务?请描述每一个事务的简单过程。


六. 简答题(10分)

在社交媒体上发表的文章可能被众多用户转发。一个社交媒体平台允许用户删除自己的文章;一旦文章被删除,所有的转发记录会被连带删除。我们可以用单个事务实现整个删除过程。然而,该社交媒体平台使用了分布式数据库,转发记录分布在不同节点上,一次性删除需要借助分布式事务,性能无法保障。请问:怎么设计删除过程的逻辑,既能避免分布式事务,又能实现删除过程的原子性(即文章一旦被删除,其转发记录就不再可见)?