Departments Dno Dptname Mrgno Employees Eno Ename Salary Dno Includes Ono Ino Quantity Dependents Eno Dname ReltoEmp Birthday Orders Ono Date Cno Customers Items Ino Iname Stocks Dno Supplies Sno Ino Quantity Suppliers Sno Sname Saddress Cno Cname Caddress Balance 图3.1 某公司数据库系统的数据库模式图
3.8 得到的一组关系模式如下:
客户(客户ID,姓名,地址,电话)
汽车(车辆编号,车型,出厂年份,车主ID) 事故(事故编号,发生时间,事故地点)
发生(驾照号,车辆编号,事故编号,损坏估计)
其中,客户与汽车之间的联系已经合并到关系模式“汽车”中,并将“客户ID”改为“车主ID”。
3.9 由实体集得到如下关系模式:
账户(账号,余额)
支行(支行名称,城市,街道,资产) 客户(客户ID,姓名,地址,联系电话) 贷款(贷款号,贷款日期,贷款金额) 由联系得到如下关系模式:
账户-支行(账号,支行名称) 贷款-支行(贷款号,支行名称) 借贷(客户ID,贷款号)
存取款(客户ID,账号,存取金额,存取日期) 属于(账号,客户ID) 合并具有相同码的关系模式:
账户、账户-支行、属于具有相同码,合并成一个关系模式账户,并用开户行替换支行名称,开户人替换客户标识。合并后的关系模式如下:
账户(账号,余额,开户行,开户人)
贷款和贷款-支行具有相同码,合并成一个关系模式贷款,并用贷款支行替换支行名称。合并后的关系模式如下:
贷款(贷款号,贷款日期,贷款金额,贷款支行) 最后得到的一组关系模式如下:
账户(账号,余额,开户行,开户人) 支行(支行名称,城市,街道,资产) 客户(客户标识,姓名,地址,联系电话)
贷款(贷款号,贷款日期,贷款金额,贷款支行) 借贷(客户ID,贷款号)
存取款(客户ID,账号,存取金额,存取日期)
3.10 电话号码是多值属性,需要创建一个关系模式。我们称该关系模式为电话,它的码为电话号码。该关系模式定义如下:
电话(电话号码,办公室名称) 由强实体集得到如下关系模式: 部门(部门号,部门名称,预算) 项目(项目名称,项目预算) 办公室(办公室名称,位置)
职工(职工号,姓名,地址,电话号码) 由弱实体集“工作简历”得到如下关系模式:
工作简历(职工号,开始时间,任务,工资,截止时间) 由联系集得到如下关系模式: 承担(项目名称,部门号) 部-办(办公室名称,部门号) 管理(职工号,部门号) 参加(职工号,项目名称) 工作(职工号,部门号)
职-办(职工号,办公室名称) 合并具有相同码的关系模式:
项目与承担具有相同码,合并为项目,并将部门号改为承担部门,得到: 项目(项目名称,项目预算,承担部门)
办公室与部-办具有相同码,合并为办公室,并将部门号改为所属部门,得到: 办公室(办公室名称,位置,所属部门)
管理有两个码,可以与职工合并(有利于回答“某职工的经理是谁”这类问题),也可以与部门合并(有利于回答“某部门的经理是谁”这类问题)。考虑“某部门的经理是谁”这类问题更常出现,决定于部门合并,并将职工号改为经理,得到:
部门(部门号,部门名称,预算,经理)
职工、参加、工作和职-办都具有相同码,合并为职工,得到:
职工(职工号,姓名,地址,电话号码,项目名称,部门号,办公室名称) 最后,我们得到如下关系模式:
部门(部门号,部门名称,预算,经理) 项目(项目名称,项目预算,承担部门) 办公室(办公室名称,位置,所属部门)
职工(职工号,姓名,地址,电话号码,项目名称,部门号,办公室名称) 工作简历(职工号,开始时间,任务,工资,截止时间) 电话(电话号码,办公室名称)
3.11
(1) 求上海的所有供应商的信息。
?Scity=?上海?(Suppliers)
(2) 求位于郑州的所有工程的信息。
?Jcity=?上海?(Projects)
(3) 求数量在100~150之间的供应。
?Quantity?100 ? Quantity?150(SPJ) (4) 求为工程J1提供零件的供应商号。
?Sno (?Jno=?J1? (SPJ))
(5) 求供应工程J1红色零件的供应商号。
?Sno(?Jno=?J1? ?Color=?红色?(SPJParts)) (6) 求至少提供一种红色零件的供应商名称。
?Sname(?Color=?红色?(SuppliersSPJParts)) (7) 求不提供零件P2的供应商名称
?Sname(Suppliers) ? ?Sname(?Pno=?P2?(SuppliersSPJ)) (8) 求没有使用天津供应商生产的红色零件的工程号。
使用了天津供应商生产的红色零件的工程号
?Jno(?Scity=?天津?(Suppliers)SPJ? Color=?红色?(Parts)) 该题的解
?Jno(Projects) ? ?Jno(?Scity=?天津?(Suppliers)SPJ? Color=?红
色?
(Parts))
(9) 求使用了本地供应商提供的零件的工程号和工程名称。
?Jno,Jname(?Scity=Jcity(ProjectsSPJSuppliers))
(10) 求未使用本地供应商提供的零件的工程号和工程名称。
?Jno,Jname(Projects)
?Jno,Jname(?Scity=Jcity(ProjectsSPJSuppliers)) (11) 求至少用了供应商S1所供应的全部零件的工程号。
?Jno,Pno(SPJ)? ?Pno(?Sno=?S1?(SPJ)) (12) 求提供所有零件的供应商名称。
?Sname?Sno,Pno(SPJ)? ?Pno (Parts))Suppliers)
3.12对于供应商-工程-零件数据库,用元组/域关系演算表示习题3.9中的查询 (1) 求上海的所有供应商的信息。
{t | Suppliers(t) ? t[Scity]=?上海?)}
(2) 求位于郑州的所有工程的信息。
{t | Projects(t) ? t[Jcity]=?郑州?)}
(3) 求数量在100~150之间的供应。
{t | SPJ(t) ? t[Quantity]?100 ? t[Quantity]?150)}
(4) 求为工程J1提供零件的供应商号。
{t(1) | (?u)(SPJ(u) ?u[Jno]=?J1? ? t[Sno]=u[Sno])}
(5) 求供应工程J1红色零件的供应商号。
{t(1) | (?u)( ?v)(SPJ(u) ? Parts(v) ? u[Pno]=v[Pno] ?
u[Jno]=?J1? ? v[Color]=?红色? ? t[Sno]=u[Sno])}
(6) 求至少提供一种红色零件的供应商名称。
{t(1) | (?u)(?v)(?w)(Suppliers(u) ? SPJ(v) ? Parts(w) ? u[Sno]=v[Sno] ?
v[Pno]=w[Pno] ? v[Color]=?红色? ? t[Sname]=u[Sname])}
(7) 求不提供零件P2的供应商名称
{t(1) | (?u) (Suppliers(u) ? t[Sname]=u[Sname] ?
?(?v)(SPJ(v) ? u[Sno]=v[Sno] ? v[Pno]=?P2? ))}
(8) 求没有使用天津供应商生产的红色零件的工程号。
{t(1) | (?u) (Projects (u) ? t[Jno]=u[Jno] ?
? ((?v1)(?v2)(?v3) (Suppliers(v1) ? SPJ(v2) ? Parts(v3) ?
u[Jno]=v2[Jno] ?v1[Sno]=v2[SnoO] ? v2[Pno]= v3[Pno] ?
v1[Scity]=?天津? ? v3[Color]=?红色?))} (9) 求使用了本地供应商提供的零件的工程号和工程名称。
{t(2) | (?u)(?v)(?w) (Projects(u) ? SPJ(v) ? Suppliers(w) ?
u[Jno]=v[Jno] ?v[Sno]=w[Sno]?u?Jcity]=w[Scity]? t[Jno]=u[Jno] ?t[Jname]=u[Jname])}
(10) 求未使用本地供应商提供的零件的工程号和工程名称。
{t(2) | (?s)(Projects(s)
?
? ((?u)(?v)(?w) (Projects(u) ? SPJ(v) ? Suppliers(w) ? u[Jno]=v[Jno] ?v[Sno]=w[Sno]?u?Jcity]=w[Scity]? t[Jno]=u[Jno] ?t[Jname]=u[Jname])
(11) 求至少用了供应商S1所供应的全部零件的工程号。 {t(1) | (?u) (Projects(u) ? t[Jno]=u[Jno] ? ? (?v)(SPJ(v) ? v[Sno]=?S1? ? ? (?w)(SPJ(w) ? u[Jno]=w[Jno] ? v[Sno]=w[Sno])))} (12) 求提供所有零件的供应商名称。 {t(1) | (?u) (Suppliers(u) ? t[Sname]=u[Sname] ? ? (?v)(Parts(v) ? (?w)(SPJ(w) ? u[Sno]=w[Sno] ? v[Pno]=w[Pno])))}
3.13用域关系演算完成例3.12和例3.13中的查询 例3.12
(1) 列出系编号为MA(数学系)的所有学生的详细信息。
{(x1, x2,x3,x4,x5,?MA?) | Students(x1,x2,x3,x4,x5,?MA?) }
(2) 列出所有课程的课程号、课程名和学分。
{(x1,x2,x3) | (?y)(Courses(x1,x2,y,x3))}
(3) 列出年龄不超过45岁的所有副教授的姓名、性别和年龄。
{(x1,x2,x3) | (?y1,y2) (Teachers(y1,x1,x2,x3,?副教授?,y2))}
(4) 列出选修了课程号为CS201的课程的所有学生的学号。
{(x) | (?y) (SC(x,?CS201?, y))} ? 例3.13
(1) 列出选修了课程号为CS201的课程的所有学生的学号和姓名。
{(x1,x2) | (?x3,x4,x5,x6)(?y)(Students(x1,x2,x3,x4,x5,x6) ? SC(x1,?CS201?,y))}
(2) 列出每个学生选修的每门课程的成绩,要求列出的学号、姓名、课程名和成绩。
{(x1,x2,x3,x4) | (?(y1,y2,y3,y4)(?z)(?w1,w2,w3,w4)(Students(x1,x2, y1,y2,y3,y4) ?
SC(x1,w1,z) ? Courses(w1,w2,w3,w4)}
(3) 求评估得分高于90分的教师所在院系名称、教师姓名、课程名和评估得分。
{(x1,x2,x3,x4) | (?(y1,y2)(?z1,z2,z3,z4,z5)(?w1,w2,w3) (?v)(Departments (y1,x1, y2) ? Teachers(z1,x2,z2,z3,z4,z5) ? Courses(w1,x3,w2,w3) ?
Teaches(x1, w1, v))}
3.14
(1) 求提供了零件的供应商的个数。
gcount-distinct(Sno) (SPJ)
(2) 求所有零件的平均重量。
gavg(Weight) (Parts)
(3) 求供应商S1提供的每种零件的总数量。