问答题


【说明】
设有下列关于图书借阅系统的E—R图。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列SQL语言建立了基本表:
CREATE TABLE Readers
(Rao CHAR(6) PRIMARY KEY,
Rname CHAR(20) NOT NULL,
Raddress CHAR(200),
Rphone CHAR(15));
CREATE TABLE Books
(Brio CHAR(6) PRIMARY KEY,
Rname CHAR(50) NOT NULL);
CREATE TABLE Administrators
(Ano CHAR(6) PRIMARY KEY,
Aname CHAR(20) NOT NULL);
CREATE TABLE Borrows
(Rno CHAR(6) NOT NULL,
Bno CHAR(15) NOT NULL,
Ano CHAR(6) NOT NULL,
Bdate DATE,
Rdate DATE,
PRIMARY KEY(Rno,Bno,Ano),
FOREGIN KEY(Rno) REFERENCE Readers(Rno),
FOREGIN KEY(Bno) REFERENCE Book(Bno)
FOREGIN KEY(Ano) REFERENCE Administrators(Ano));
CREATE TABLE Readers
(Rao CHAR(6) PRIMARY KEY,
Rname CHAR(20) NOT NULL,
Raddress CHAR(200),
Rphone CHAR(15));
CREATE TABLE Books
(Brio CHAR(6) PRIMARY KEY,
Rname CHAR(50) NOT NULL);
CREATE TABLE Administrators
(Ano CHAR(6) PRIMARY KEY,
Aname CHAR(20) NOT NULL);
CREATE TABLE Borrows
(Rno CHAR(6) NOT NULL,
Bno CHAR(15) NOT NULL,
Ano CHAR(6) NOT NULL,
Bdate DATE,
Rdate DATE,
PRIMARY KEY(Rno,Bno,Ano),
FOREGIN KEY(Rno) REFERENCE Readers(Rno),
FOREGIN KEY(Bno) REFERENCE Book(Bno)
FOREGIN KEY(Ano) REFERENCE Administrators(Ano));
为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只需写出英文名即可。
【系统E-R图】
【问题2】
对于说明中建立的基本表,是否允许同一读者从同一管理员处多次(两次和两次以上)借阅同一本书为什么

【参考答案】

不能。表Borrow中,借书证号Rno、管理员工作证号Ano和图书书号Bno共同组成主码,因此不允许有两个在主码上完全相......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
阅读下列函数说明,将应填入 (n) 处的字句写在答卷纸的对应栏内。 【函数1说明】 函数compare(SqList A,SqList B)的功能是:设A=(al,…,am)和B=(b1,…,bn)均为顺序表,“比较”两个顺序表A和B的大小。设A’和B’分别为A和B中除去最大共同前缀后的子表(例如,A=(y,X,X,Z,X,Z),B=(y,x,x,z,y,x,x,2),则两者中最大的共同前缀为(y,x,x,2),在两表中除去最大共同前缀后的子表分别为A’=(X,Z)和B’=(y,x,x,2))。若A’=B’=空表,则 A=B:若A’=空表,而B’≠空表,或者两者均不为空表,且A’的首元小于B,的首元,则A<B;否则A>B。 提示:算法的基本思想为:若相等,则j+1,之后继续比较后继元素:否则即可得山比较结果。显然,j的初值应为0,循环的条件是j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有3种可能出现的情况需要区分。 【函数1】 int compare(SqList A,SqList B) { 若A<B,则返回-1;若A=B,则返回o:若A>B,则返回1 j=0; while(j< (1) &&j<B.1ength) if( A.elem[j] < B.elem[j] ) return(-1); else if( A.elem[j] > B.elem[j] ) return(i); else (2) ff (A.length == B.length) return (0); else fi(A.length < B.length ) return(-1); else return(1); } compare 函数1的时间复杂度是 (3) 【函数2说明】 函数 exchange_L( SLink &L, int m )的功能是:用尽可能少的辅助空间将单链表中前 m个结点和后 n 个结点的互换。即将单链表(a1,a2,...,am,b1,b2,...,bn) 改变成 (b1,b2,...,bn,a1,a2,…,am)。 【函数2】 void exchange_L( SLink &L, int m ) { if( (4) && L->next) 链表不空且 m!=0 { p = L->next; k = 1; while( k< m && p ) 查找am所在结点 { p = (5) ; ++k; } if( (6) &&p->next) n!=0 时才需要修改指针 { ha = L->next; 以指针ha记a1 结点的位置 L->next = p->next; 将b1结点链接在头结点之后 p->next = NULL; 设am的后继为空 q: (7) ; 令q 指向b1结点 while(q->next)q= (8) ; 查的bn结点 q->next = (9) ; 将a1 结点链接到bn 结点之后 } } } 函数2的时间复杂度是 (10) 。