• 关系代数表达式练习(针对难题)


    教师关系T(T#,TNAME,TITLE)
    课程关系C(C#,CNAME,TNO)
    学生关系S(S#,SNAME,AGE,SEX)
    选课关系SC(S#,C#,SCORE)

    检索至少选修了C2,C4两门课程的学生学号:

    这里的下标可以这样理解,课程表C取了别名SC1,SC2,SC1的第一个元素(学生学号)和SC2的第一个元素 (学生学号)相等(1=4),且(SC1的第二个元素(课程号)=C2,SC2的第二个元素(课程号)=C4)

    C#CNAMETNO

    涉及减法相关

    检索不学C2课的学生姓名和年龄

    最后并上S,是因为S中才有AGE属性

     涉及除法相关:

    检索学习全部课程的学生姓名

     检索所学课程包含学生S3所学全部课程的学生学号

    进阶:

    供应商关系S(SNO,SNAME,SADDR)
    零件关系P(PNO,PNAME,COLOR.WEIGHT)
    工程项目关系J(JNO,JNAME,JCITY,BALANCE)
    供应关系SPJ(SNO,PNO,JNO,PRICE,QTY)

    检索使用了编号为P3零件的工程编号和名称

    检索供应零件给工程J1,且零件颜色为红色的供应商名称和地址

    检索使用了零件编号为P3或P5零件的工程编号JNO

    πJNo(\sigmaPNO='P3'VPNO='P5'(SPJ))

    检索至少使用了编号为P3和P5零件的工程编号JNO

    πз(\sigma _{3=8\wedge 2='p3'\wedge 7='p5'}(SPJxSPJ))

    检索不使用编号为P3零件的工程编号JNO和工程名称JNAME

    或者 

    πJNO,JNAME((πJNO(J) - JNO(σPNO=’P3‘(SPJ)) )\bowtie J)

     检索使用了全部零件的工程名称JNAME 

     检索使用零件包含编号为S1的供应商所供应的全部零件的工程编号JNO

    💖💖在做题过程中我有一下感悟,可以跟大家分享一下💖💖

    1.相同属性才能相减,例如:

    ● 检索不学C2课的学生姓名和年龄

    ●检索不使用编号为P3零件的工程编号JNO和工程名称JNAME

    πJNO,JNAME((πJNO(J) - JNO(σPNO=’P3‘(SPJ)) )\bowtie J)

    2.什么时候要使用数字代替呢?

    当两个相同的属性出现在要求中时:例如

    ●检索至少使用了编号为P3和P5零件的工程编号JNO

    πз(\sigma _{3=8\wedge 2='p3'\wedge 7='p5'}(SPJxSPJ))

    ● 检索至少选修了C2,C4两门课程的学生学号: 

     但是这两个都是\wedge(并)的关系,如果是(或)的关系,就不需要使用数字了,例如:

    检索使用了零件编号为P3或P5零件的工程编号JNO

    πJNO(\sigmaPNO='P3'VPNO='P5'(SPJ))

    :同时注意后面需要跟(SPJ\timesSPJ),后面只用(SPJ)

    3.如果要求的属性有联系的属性之间不相关,那么就先用要求的属性的表有联系的属性,例如,下面的JNAME和全部零件没有关联,那么就要用JNO,通过SPJ,关联PNO:

     ●检索使用了全部零件的工程名称JNAME 

    4.在进行除法时,要求是什么属性(或者与该属性相关)就留下什么属性,例如:

     ● 检索所学课程包含学生S3所学全部课程的学生学号

     ●检索使用了全部零件的工程名称JNAME 

    JNO,PNO/PNO=JNO

    5.在含有“全部”字样的关系代数表达式中,包含单个属性的要用无关联的表,并且“全部”后面跟的属性为除数的属性,例如:

      ●检索使用了全部零件的工程名称JNAME 

    其中检索PNO用的是P表,而不是SPJ表,并且除数的属性为零件编号PNO

    ● 检索学习全部课程的学生姓名

    其中C#用的是C表
    并且除数的属性为课程号C#

    但是有关联其他表中属性的则例外:

        ●检索所学课程包含学生S3所学全部课程的学生学号

    6.如果要求中存在多个表的属性,一定要加入关联表进行关联,例如:

        ● 检索供应零件给工程J1,且零件颜色为红色的供应商名称和地址

    SPJ就是其中关联PNO和SNO的表

    7.在有两个或者两个以上属性时,通常有两种写法:

    1.第一种是先拉一个属性进行条件限制,再关联其他属性

    2.直接通过条件判断,然后把两个表关联起来

        ●检索不使用编号为P3零件的工程编号JNO和工程名称JNAME

    或者 

    πJNO,JNAME((πJNO(J) - JNO(σPNO=’P3‘(SPJ)) )\bowtie J)

        ● 检索使用了编号为P3零件的工程编号和名称

    其实做题的时候,想一下写数据库语句的时候是怎么做的,就比较容易相通了,各位今天也要努力学习呀!!(^o^)/(^o^)/

  • 相关阅读:
    计算机毕业设计Java校园社团信息管理(系统+源码+mysql数据库+lw文档)
    CVPR2022-不对称分辨率图像的立体匹配
    【JS高级】ES5标准规范之数组高阶函数的应用_11
    MicroPython开发板:pyboard快速参考
    手把手教你配置Jenkins自动化邮件通知
    通过DIN算法进行深度特征组合商品推荐 数据+代码(可作为毕设)
    四、图片特效
    ChatGPT4实现前一天
    抖音微短剧小程序源码搭建:实现巨量广告数据高效回传
    [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板
  • 原文地址:https://blog.csdn.net/weixin_69884785/article/details/131048117