[说明]
图1是某医院组织的结构图。该医院分为多个病区,每个病区有一个唯一的编号,一个病区包括多个病房,多名医生;每位医生有一个唯一的编号,负责管辖其主治病人的所有病房;病人住院后给以一个唯一的编号,根据“患何病科”住在相应病区的某个病房里,有且仅有一位医生担任主治医生,除主治医生外其他医生不对其负责。
现假定病区名称有“内科”和“外科”,“内科”病区又细分为多个病区,以编号区分,名称都为“内科”;“外科”病区亦然。图2是经分析得到的E-R图。

图1

问答题 实体间的联系有“一对一”、“一对多”和“多对多”,指出图2中各联系分别属于哪一种。
【正确答案】QR:一对多,QS:一对多,RS:一对多
【答案解析】关系模型中实体间的联系有:一对一、一对多和多对多。一对一是指一个实体只与另一个实体相联系,一对多是指一个实体与多个实体相联系,多对多是指多个实体与多个实体间的联系。
在这个系统中,一个病人只在一个病区,一个病区有多个病人,因此联系QR是一对多联系;一个病人只有一个主治医生,一个医生显然可以医治多名病人,因此联系QS是一对多联系:一名医生只属于一个病区,一个病区有多名医生,故联系QS是一对多联系。
单选题 选出正确的关系代数表达式。
查询所有“外科”病区和“内科”病区的所有医生姓名:
A.σName="外科"ˇName="内科"((π4Q)) B.σName="外科"^Name="内科"4(Q))
C.π4Name="外科"ˇName="内科"(Q)) D.π4Name="外科"^Name="内科"(Q))
【正确答案】 C
【答案解析】基本的关系代数包括并、差、广义笛卡儿积、投影、选择,其他运算可以通过基本的关系运算导出。
关系R与S具有相同的关系模式,即R与S的结构相同,关系R与S的并由属于R或属于S的元组构成的集合组成,记做R∪S,其形式定义如下:R∪S={t|t∈Rˇt∈S},式中t为元组变量。
· 并(Union)。关系R与S具有相同的关系模式,即R与S的结构相同,关系R与S的并由属于R或属于S的元组构成的集合组成,记做R∪S,其形式定义如下:R∪S={t|t∈Rˇt∈S},式中t为元组变量。
· 差(Difference)。关系R与S具有相同的关系模式,关系R与S的差由属于R但不属于S的元组构成的集合组成,记做R-S,其形式定义如下:R∪S={t|t∈R^tS}。
· 广义笛卡儿积(Extended Cartesian Product)。两个元组分别为n目和m目的关系R和S的笛卡儿积是一个n+m列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组,记做R×S,其形式定义如下:R×S={t|t=<tn,tm>^tn∈R^tm∈S}。如果R和S中有相同的属性名,那么可在属性名前加关系名作为限定,以示区别。若R有k1个元组,S有k2个元组,则R和S的广义笛卡儿积有k1×k2个元组。
· 投影(Projection)。投影运算是从关系垂直方向进行运算的,在关系R中选择出若干属性列A组成新的关系,记做πA(R),其形式定义如下:πA(R)={f[A]|t∈R}。
· 选择(Selection)。选择运算是从关系的水平方向进行运算的,从关系R中选择满足给定条件的诸元组,记做σF(R),其形式定义如下:σF(R)={t|t∈R^F(r)=True}。其中,F中的运算对象是属性名(或列的序号)或常数。运算符是算术比较符(<,,>,
单选题 查询内科病区患胃病的病人的姓名。
A.σName="外科"ˇSC="胃病"2(R)) B.σName="内科"^SC="胃病"2(R))
C.π2Name="外科"ˇSC="胃病"(R)) D.π2Name="内科"^SC="胃病"(R))
【正确答案】 D
【答案解析】
问答题 层次模型不能直接表示多对多联系,为什么?可采用哪些方法进行多对多联系的表示。
【正确答案】层次模型采用树型结构表示数据与数据间的联系。在层次模型中,每一个节点表示记录类型(实体),记录之间的联系用节点之间的连线表示,并且根节点以外的其他节点有且仅有一个双亲节点。层次模型不能直接表示多对多联系,若要表示多对多的联系,可采用如下两种方法:
· 冗余节点法——两个实体的多对多的联系转换为两个一对多的联系,该方法的优点是节点清晰,允许节点改变存储位置,缺点是需要额外的存储空间,有潜在的数据不一致性。
· 虚拟节点分解法——将冗余节点转换为虚拟节点,虚拟节点是一个指引元,指向所代替的节点,该方法的优点是减少对存储空间的浪费,避免数据不一致性,缺点是改变存储位置可能引起虚拟节点中指针的修改。
【答案解析】