• 数据库-关系代数作业


    题目

    现有一产品数据库,该数据库模式由四个关系组成,这四个关系的模式如下:

    (Product(maker,model,type))

    (PC(model,speed,ram,hd,price))

    (Laptop(model,speed,ram,id,hd,screen,price))

    (Printer(model,color,type,price))

    试写出下列查询的关系代数表达式,并针对下面数据样例,给出查询的结果。(你的答案应该在任何数据上都能正确工作,而不仅限于图中的数据)

    a)哪种PC模型具有最少3.00的速度?

    b)哪个生产厂商的笔记本电脑(笔记本)的硬盘容量至少100GB?

    c)查询厂商B生产的所有产品的型号和价格。

    d)查询所有彩色激光打印机的型号。

    e)查询那些只出售笔记本电脑,不出售PC的厂商。

    f)查询在一种或者两种PC机中出现过的硬盘的容量。

    g)查询有同样处理速度和同样内存大小的PC对。每对只被列表一次,即列表给出((i,j))但不给出((j,i))

    h)查询那些至少生产两种处理速度大于2.80的PC或者笔记本电脑的厂商。

    i)查询平均处理速度(PC或者是笔记本电脑)最高的所有厂商。

    j)查询至少生产三种不同处理速度电脑的厂商。

    k)查询恰好出售三种型号的PC厂商。

    四个关系的数据样例如下图所示:
    四个关系的数据样例

    a)哪种PC模型具有最少3.00的速度?

    1.要操作的表:(PC)

    2.要进行的操作:选择、投影

    3.各操作的对象和顺序

    1. 选择关系(PC)(speedge3.0)的元组:(R_1:=sigma_{speedge3.0}(PC))
    2. (R_1)投影到属性(model)上:(R_2:=pi_{model}(R_1))

    4.关系代数表达式

    • (pi_{model}(sigma_{speedge3.0}(PC)))

    5.数据样例查询结果

    (model)
    1005
    1006
    1013

    b)哪个生产厂商的笔记本电脑(笔记本)的硬盘容量至少100GB?

    1.要操作的表:(Laptop)(Product)

    2.要进行的操作:选择、自然连接、投影、差

    3.各操作的对象和顺序

    1. 选择关系(Laptop)(hd<100)的元组(R_1)(R_1:=sigma_{hd<100}(Laptop))
    2. 将关系(Product)和关系(R_1)自然连接(R_2:=R_1owtie Product)
    3. (R_2)投影到属性(maker)上:(R_3:=pi_{maker}(R_2))
    4. 将关系(Product)和关系(Laptop)自然连接(R_4:=Productowtie Laptop)
    5. 将关系(R_4)投影到属性(maker)上:(R_5:=pi_{maker}(R_4))
    6. 求关系(R_5)和关系(R_3)(R_6:=R_5-R_3)

    4.关系代数表达式

    • (Productowtie Laptop-pi_{maker}(sigma_{hd<100}(Laptop)owtie Product))

    5.数据样例查询结果

    (maker)
    B
    G

    c)查询厂商B生产的所有产品的型号和价格。

    1.要操作的表:(Product)(PC)(Laptop)(Printer)

    2.要进行的操作:选择、投影、自然连接、并

    3.各操作的对象和顺序

    1. 选择关系(Product)(maker='B')的元组:(R_1:=sigma_{maker='B'}(Product))
    2. 将关系(R_1)投影到属性(model)上:(R_2:=pi_{model}(R_1))
    3. 将关系(R_2)和关系(PC)自然连接(R_3:=R_2owtie PC)
    4. 将关系(R_2)和关系(Laptop)自然连接(R_4:=R_2owtie Laptop)
    5. 将关系(R_2)和关系(Printer)自然连接(R_5:=R_2owtie Printer)
    6. 将关系(R_3)投影到属性组({ model,price })上:(R_6:=pi_{model,price}(R_3))
    7. 将关系(R_4)投影到属性组({ model,price })上:(R_7:=pi_{model,price}(R_4))
    8. 将关系(R_5)投影到属性组({ model,price })上:(R_8:=pi_{model,price}(R_5))
    9. 将关系(R_6)(R_7)(R_8)起来:(R_9:=R_6cup R_7cup R_8)

    4.关系代数表达式

    • (R_9),该表达式展开写会太长,因此省略其展开式。

    5.数据样例查询结果

    (model) (price)
    1004 649
    1005 630
    1006 1049
    2007 1429

    d)查询所有彩色激光打印机的型号。

    1.要操作的表:(Printer)

    2.要进行的操作:选择、投影

    3.各操作的对象和顺序

    1. 选择关系(Printer)(color=true)并且(type='laser')的元组:(R_1:=sigma_{color=truewedge type='laser'}(Printer))
    2. 将关系(R_1)投影到属性(model)上:(R_2:=pi_{model}(R_1))

    4.关系代数表达式

    • (pi_{model}(sigma_{color=truewedge type='laser'}(Printer)))

    5.数据样例查询结果

    (model)
    3003
    3007

    e)查询那些只出售笔记本电脑,不出售PC的厂商。

    20200320更新:经网友@我要我觉得提醒,发现下边的(R_1)(R_2)有点错误,具体可看本文评论和我修改后的答案(想看修改后的答案的话继续往下看就找到了)

    1.要操作的表:(Product)(PC)(Laptop)

    2.要进行的操作:自然连接、投影、差

    3.各操作的对象和顺序

    1. 将关系(Product)与关系(Laptop)自然连接(R_1:=Productowtie Laptop)
    2. 将关系(Product)与关系(PC)自然连接(R_2:=Productowtie PC)
    3. 将关系(R_1)投影到属性(maker)上:(R_3:=pi_{maker}(R_1))
    4. 将关系(R_2)投影到属性(maker)上:(R_4:=pi_{maker}(R_2))
    5. 求关系(R_3)(R_4)(R_5:=R_3-R_4)

    4.关系代数表达式

    • (pi_{maker}(Productowtie Laptop)-pi_{maker}(Productowtie PC))

    5.数据样例查询结果

    (maker)
    F
    G

    20200320将(R_1)(R_2)的错误修改后,正确答案应该如下:

    1.要操作的表:(Product)

    2.要进行的操作:选择、投影、差

    3.各操作的对象和顺序

    1. 选择属性(type)的值为(laptop)(Product)(R_1:=sigma_{type=laptop}(Product))
    2. 选择属性(type)的值为(pc)(Product)(R_2:=sigma_{type=pc}(Product))
    3. 将关系(R_1)投影到属性(maker)上:(R_3:=pi_{maker}(R_1))
    4. 将关系(R_2)投影到属性(maker)上:(R_4:=pi_{maker}(R_2))
    5. 求关系(R_3)(R_4)(R_5:=R_3-R_4)

    4.关系代数表达式

    • (pi_{maker}(sigma_{type=laptop}(Product))-pi_{maker}(sigma_{type=pc}(Product)))

    5.数据样例查询结果

    (maker)
    F
    G

    f)查询在一种或者两种PC机中出现过的硬盘的容量。

    1.要操作的表:(PC)

    2.要进行的操作:重命名、( heta)连接、投影、差

    3.各操作的对象和顺序

    1. 将关系(PC)通过重命名复制:(R_1:= ho_{PC1(model_1,speed,ram,hd,price)}(PC))

    2. 将关系(PC)通过重命名复制:(R_2:= ho_{PC2(model_2,speed,ram,hd,price)}(PC))

    3. 将关系(R_1)(R_2)进行( heta)连接(R_3:=R_1owtie_{R_1.hd=R_2.hdwedge R_1.model_1 eq R_2.model_2}R_2)

    4. 将关系(R_3)(PC)进行( heta)连接(R_4:=PCowtie_{PC.hd=R_3.hdwedge PC.model eq R_3.model_1wedge PC.model eq R_3.model_2}R_3),由此得到至少出现三次的(hd)

    5. 将关系(R_4)投影到属性(hd)上:(R_5:=pi_{hd}(R_4))

    6. 将关系(PC)投影到属性(hd)上:(R_6:=pi_{hd}(PC))

    7. 求关系(R_6)(R_5)(R_7:=R_6-R_5)

    4.关系代数表达式

    • (R_7),该关系代数表达式展开长度太长,略

    5.数据样例查询结果

    (hd)
    80
    320
    200
    300
    160

    g)查询有同样处理速度和同样内存大小的PC对。

    1.要操作的表:(PC)

    2.要进行的操作:重命名、( heta)连接、投影

    3.各操作的对象和顺序

    1. 将关系(PC)通过重命名复制:(R_1:= ho_{PC1(model_1,speed,ram,hd,price)}(PC))
    2. 将关系(PC)通过重命名复制:(R_2:= ho_{PC2(model_2,speed,ram,hd,price)}(PC))
    3. 将关系(R_1)(R_2)进行( heta)连接(R_3:=R_1owtie_{R_1.speed=R_2.speedwedge R_1.ram=R_2.ramwedge R_1.model_1 eq R_2.model_2}R_2)
    4. 将关系(R_3)投影到属性组({ model_1,model_2 })上:(R_4:=pi_{model_1,model_2}(R_3))

    4.关系代数表达式

    • (R_4),该关系代数表达式展开长度太长,略

    5.数据样例查询结果

    (model_1) (model_2)
    1004 1012

    h)查询那些至少生产两种处理速度大于2.80的PC或者笔记本电脑的厂商。

    1.要操作的表:(PC)

    2.要进行的操作:选择、并、投影、自然连接、重命名、( heta)连接

    3.各操作的对象和顺序

    1. 选择关系(PC)中属性(speed>2.80)的元组:(R_1:=sigma_{speed>2.80}(PC))
    2. 选择关系(Laptop)中属性(speed>2.80)的元组:(R_2:=sigma_{speed>2.80}(Laptop))
    3. 将关系(R_1)(R_2)起来,并求其在属性(model)上的投影(R_3=pi_{model}(R_1cup R_2))
    4. 将关系(R_3)(Product)自然连接,并求其在属性组({ maker,model })上的投影(R_4:=pi_{maker,model}(R_3owtie Product))
    5. 将关系(R_4)通过重命名复制:(R_5:= ho_{R_5(maker,model_5)}(R_4))
    6. 将关系(R_4)通过重命名复制:(R_6:= ho_{R_6(maker,model_6)}(R_4))
    7. 将关系(R_5)(R_6)进行( heta)连接(R_7:=R_5owtie_{R_5.maker=R_6.makerwedge R_5.model_5 eq R_6.model_6}R_6)
    8. 将关系(R_7)投影到属性(maker)上:(R_8:=pi_{maker}(R_7))

    4.关系代数表达式

    • (R_8),该关系代数表达式展开长度太长,略

    5.数据样例查询结果

    (maker)
    B

    i)查询平均处理速度(PC或者是笔记本电脑)最高的所有厂商。

    1.要操作的表:(PC)(Laptop)(Product)

    2.要进行的操作:投影、重命名、( heta)连接、差、自然连接

    3.各操作的对象和顺序

    1. 将关系(PC)(Laptop)投影到属性组({ model,speed })上并将两者起来:(R_1:=pi_{model,speed}(PC)cuppi_{model,speed}(Laptop))
    2. 通过重命名复制关系(R_1)(R_2:= ho_{R_2}(R_1))
    3. 关系(R_1)(R_2)进行( heta)连接(R_3:=R_1owtie_{R_1.speed<R_2.speed} R_2),求出(speed)小于最大值的元组
    4. 求关系(R_1)(R_3)(R_4:=R_1-R_3)
    5. 关系(R_4)(Product)自然连接(R_5:=R_4owtie Product)

    4.关系代数表达式

    • (R_5),该关系代数表达式展开长度太长,略

    5.数据样例查询结果

    (maker)
    B

    j)查询至少生产三种不同处理速度电脑的厂商。

    1.要操作的表:(PC)(Product)

    2.要进行的操作:自然连接、投影、重命名、( heta)连接

    3.各操作的对象和顺序

    1. 关系(Product)(PC)自然连接投影到属性组({ maker,speed })上:(R_1:=pi_{maker,speed}(Procuctowtie PC))
    2. 复制并重命名关系(R_1)(R_2:= ho_{R_2(maker,speed_2)}(R_1))
    3. 复制并重命名关系(R_1)(R_3:= ho_{R_3(marker,speed_3)}(R_1))
    4. 关系(R_1)(R_2)进行( heta)连接(R_4:=R_1owtie_{R_1.maker=R_2.makerwedge R_1.speed eq R_2.speed_2}R_2)
    5. 关系(R_3)(R_4)进行( heta)连接(R_5:=R_3owtie_{R_3.maker=R_4.makerwedge R_4.speed eq R_3.speed_3 /wedge R_4.speed_2 eq R_3.speed_3}R_4)
    6. 将关系(R_5)投影到属性(maker)上:(R_6:=pi_{maker}(R_5))

    4.关系代数表达式

    • (R_5),该关系代数表达式展开长度太长,略

    5.数据样例查询结果

    (maker)
    A
    D
    E

    k)查询恰好出售三种型号的PC厂商。

    1.要操作的表:(PC)(Product)

    2.要进行的操作:自然连接、投影、重命名、( heta)连接、差

    3.各操作的对象和顺序

    1. 关系(Product)(PC)自然连接投影到属性组({ maker,model })上:(R_1:=pi_{maker,model}(Procuctowtie PC))
    2. 复制并重命名关系(R_1)(R_2:= ho_{R_2(maker,model_2)}(R_1))
    3. 复制并重命名关系(R_1)(R_3:= ho_{R_3(marker,model_3)}(R_1))
    4. 复制并重命名关系(R_1)(R_4:= ho_{R_4(marker,model_4)}(R_1))
    5. 关系(R_1)(R_2)进行( heta)连接(R_5:=R_1owtie_{R_1.maker=R_2.makerwedge R_1.model eq R_2.model_2}R_2)
    6. 关系(R_3)(R_5)进行( heta)连接(R_6:=R_3owtie_{R_3.maker=R_5.makerwedge R_5.model eq R_3.model_3 /wedge R_5.model_2 eq R_3.model_3}R_5)
    7. 关系(R_4)(R_6)进行( heta)连接(R_7:=R_4owtie_{R_4.maker=R_6.makerwedge R_6.model e R_4.model_4 wedge R_6.model_2 e R_4.model_4 wedge R_6.model_3 e R_4.model_4}R_6)
    8. 求关系(R_6)(R_7)(R_8:=R_6-R_7)
    9. 将关系(R_8)投影到属性(maker)上:(R_8:=pi_{maker}(R_8))

    4.关系代数表达式

    • (R_8),该关系代数表达式展开长度太长,略

    5.数据样例查询结果

    (maker)
    A
    B
    D
    E

    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    Parrot虚拟机
    JAVA数据结构二叉排序树
    mysql基本操作
    ruby数组操作
    JAVA核心技术之球体碰撞多线程版
    JAVA数据结构选择排序
    JAVA的线程让步
    Perl 与数学:一份快速参考
    科学计算软件包python(x,y)简介
    JAVA数据结构解析数学表达式
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/11664142.html
Copyright © 2020-2023  润新知