哈工大数据库系统作业一--关系代数

作业内容
在关系代数运算器 RelaX 中(https://nireas.iee.ihu.gr/relax/calc.htm)选择数据集“Database Systems The Complete Book - Excercise 2.4.3”,并用关系代数表示查询。

该数据库包含 4 个关系:

Classes(class, type, country, numGuns, bore, displacement)
关系 Classes 记录了舰船级别的信息,包含以下属性:

class:舰船级别(class)的名称,通常是这个级别的第一艘船的名字。
type:该级别舰船的类型,取值为 bb 或 bc,其中 bb 表示战列舰(battleship),bc 表示巡洋舰(battle cruiser)。
country:该级别舰船的制造国家。
numGuns:该级别舰船的主炮(main gun)数量。
bore:该级别舰船的主炮口径。
displacement:该级别舰船的排水量。
Ships(name, class, launched)
关系 Ships 记录了舰船的信息,包含以下属性:

name:舰船的名字。
class:舰船的级别。
lauched:舰船的下水日期。
Battles(name, date)
关系 Battles 记录了舰船参与的海战,包含以下属性:

name:海战的名称。
date:海战的时间。
Outcomes(ship, battle, result)
关系 Outcomes 记录了舰船在海战中取得的结果,包含以下属性:

ship:舰船的名字。
battle:海战的名称。
result:舰船在海战中取得的结果,取值为 sunk(沉没)、damaged(负伤)或 ok(完好)。
在该数据库上用关系代数完成下列查询:

(20 分)查询在 1921 年以前下水且没有参加过海战的舰船的名字。
(20 分)查询参加了 Guadalcanal 海战的舰船的名字、排水量和主炮数量。
(20 分)查询只包含 2艘舰船的级别,列出级别的全部属性。
(20 分)查询既有战列舰又有巡洋舰的国家。
(20分)查询沉船数量最多的战斗,列出战斗的名称。
思考题:查询在某次战斗中负伤,但随后又参加了其他战斗的舰船,列出舰船的名称。(不用在作业中回答。因为数据集小,可能没有查询结果。)

要求:

不允许使用赋值运算(=)。
在关系代数运算器 ReleX 中完成并验证你给出的查询表达式,并将你书写的表达式填写在作业答案中。
提示:日期型属性值的表示方法如下:例如,1941 年 5 月 24 日表示为 date('1941-05-24')。

答案:

1.π name (σ launched < 1921 (Ships)) - π ship (Outcomes)

2.π ship,displacement,numGuns σ ship=name ((Classes⨝Ships) ⨝ battle='Guadalcanal' Outcomes)

3.π class,type,country,numGuns,bore,displacement Classes⨝(σ Amt=2 (γclass;count(*)->Amt (Classes⨝Ships)))

4.π country ( σ type='bb' (Classes)) ∩ π country ( σ type='bc' (Classes))

5.πbattle (γ max(Amt) -> Amt ((γ battle; count(*) -> Amt (σ result='sunk' Outcomes)))⨝(γ battle; count(*) -> Amt (σ result='sunk' Outcomes)))

注:非最佳答案,本人自己写的,仅用于备份

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值