Line
Line_ID[PK]
Title
Type
Stations
Station_ID[PK]
Name
City_ID[PK]
Line_Stations
Line_ID[FK][PK]
Station_ID[FK][PK]
No
Distance
Cities
Name
Province
PK 表示主键,FK 表示外键 箭头表示多对一关系
数据字典 Lines(线路表)
列名
Line_ID
Title
Type
数据类型
varchar2(5)
varchar2(20)
varchar2(5)
注释
线路 ID
线路名称
类型
数据字典 Line_Stations(线路站点表)
列名
Line_ID
Station_ID
No
Distance
数据类型
varchar2(5)
varchar2(4)
int
int
注释
线路 ID
车站 ID
序号(始发站序号为 1)
距始发站的距离
数据字典 Stations(始发站)
列名
Station_ID
Name
City_ID
数据类型
varchar2(5)
varchar2(20)
varchar2(5)
注释
站点 ID
站名
城市 ID
数据字典 Cities(城市表)
列名
City_ID
Name
Province
数据类型
varchar2(3)
varchar2(20)
varchar2(10)
注释
城市 ID
城市名称
所属省份
1、查询类型为“高铁”的线路总数(3 分)
Select count(*)
From Lines
Where Type = ‘高铁’;
3、将线路 ID 为“ZI”的序号大于 1 的线路站点序号都增加 1(3 分)
Update Line_Stations
Set No= No+ 1
Where Line_ID=’ZI’;
4、增加一个新的站点,“湘潭北站”,站点 ID 为“XTNN”,所在城市为“湘潭”(3 分)
Insert into Stations
Values(‘湘潭北站’,’XTNN’,’湘潭’);
5、查询途经湘潭的所有线路 ID,线路名称,线路类型(3 分)
Select Line_ID, Title, Type
From Lines natural join Line_Stations natural join Station natural join Cites
Where No >1 and Cities.name = ‘湘潭’;
6、建立一个视图 VI(Province,City,Station,Type,Nam)表示所有始发站的不同类型线
路的数量统计情况,列对应为省份,城市,站点,类型,线路数量(5 分)
Create view VI (Province,City,Station,Type,Nam)as
Select Province,City.NAME,Station,Type,distinct count(Line_ID)
From Stations natural left outer join Cities natural left outer join Line_Stations natural left outer
join Lines
Group by Station_ID,TYPE
7、查询从长沙到北京的所有线路的 ID,名称,类型,并按类型,线路 ID 排序(5 分)
(Select ID, Title, Type
From Lines natural left outer join Line_Stations natural left outer join Stations natural left outer
join Cities
Where Cities.name = ‘长沙’
Group by Line_ID, Type
Order by Line_ID, Type)
Intersect
(Select ID, Title, Type
From Lines natural left outer join Line_Stations natural left outer join Stations natural left outer
join Cities
Where Cities.name = ‘北京’
Group by Line_ID, Type
Order by Line_ID, Type);
8、查询线路数最多的城市的名称和省份,提示:可能存在多个这样的城市(5 分)
Select Cites.NAME,Province
from
(Select Province,City.NAME,Station,Type,distinct count(Line_ID) as count_L
From Cities natural left outer join Stations natural left outer join Line_Stations natural left outer
join Lines
Group by Station_ID,TYPE) as M
Where count_L= (Select max(count_L)
From M)
9、请使用标量子查询查询按行驶里程从高到低排序,最长的 5 条路线 ID。(7 分)
Select Line_id ,rank()over (order by (max(Distance)) desc)as dis_rank
From Line_Stations
Group by Line_id
Limit 5;
10、查询通过直达车,能到达湖南省所有已开通铁路城市的城市名称。(7 分)
11、查询所有城市的始发站高铁线路数,途径高铁线路数,始发普通线路数,途径普通线路
数,结果列依次为省份,城市,站点,始发高铁线路数,途径高铁线路数,始发普通线路数,
途径普通线路数。
select Province,City.NAME,Station.name,
distinct count(case when no= 0 and type= ‘高铁‘ then Line_id else null end) as num_no1GT ,
distinct count(case when no= 0 and type= ‘普通‘ then Line_id else null end) as num_no1PT ,
distinct count(case when no>0 and type= ‘高铁‘ then Line_id else null end) as num_noGT ,
distinct count(case when no>0 and type= ‘普通‘ then Line_id else null end) as num_noPT ,
From Stations natural left outer join Cities natural left outer join Line_Stations natural left outer
join Lines
group by Station_ID,TYPE;
二 范式理论
1、关系模型 R=(A,B,C,D,E,G)其上存在函数依赖集 F=(BC->D,CD->AE,AG->CE,AB->GE)
a. 证明 BC 为候选键(5 分)
因为 R=(A,B,C,D,E,G),BC->D,CD->AE,AB->GE,AG->CE
所以 BC 为候选键
b.将 R 分解为 R1=(ACDE),R2=(BCDG),请问 R2 是否满足 BCNF?(5 分)
R2 的子集有(B),(C),(D),(G)等,每一个子集 a 都满足 a+要么不包含 R2-a 的任何属性,要么包含 R2 的所有属
性,所以满足 BCNF
c.对于上面的分解,测试 AG->CE,这个函数依赖是否被保持?(5 分)
result=AG
t=(result∩R1)+ ∩R1=(A)
result=result∪t=(AG)
result 不包含(CE)
result=AG
t=(result∩R2)+ ∩R2=(G)
result=result∪t=(AG)
result 不包含(CE)
所以不被保持
d.请将 R 分解,使分解后的所有模式 Rd 至少满足 3NF(6 分)
正则覆盖为(BC->D,CD->AE,AG->CE,AB->G)
分解为 BCD,ADCE,AGCE,ABG
e.将 R 分解,使分解后所有 Rd 满足(6 分)
分解为 BCD,ADCE,AGCE,ABG
三、数据库设计
1、 某比赛积分系统的部分数据库需求如下:选手具有唯一的 ID,注册邮箱,昵称,真实姓名,学校,国
籍:选手的积分与对应的头衔可以通过积分区间对应得到:需要记录选手参加比赛的详细情况,包括比赛
的名称,时间,比赛的名次,获得积分,积分和头衔的变化。请参照显示情况,画出以上需求的 ER 图。(12
分)
2、请将上面的 ER 图转换成对应的数据库模型图。(10 分)