问答题

【说明】
图书管理系统详细记录图书库存情况、读者信息及读者借阅记录(包括借书日期和还书日期)。
新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号”区分。
系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。
一个读者最多可以同时借阅5本图书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“false”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。
如图9-17所示为该系统的E-R图。


【问题2】
由于同一个分类目录号(同一种图书)有多个副本,若用表Book(图书流水号,分类目录号,书名,作者,内容摘要,价格,购书日期)存储图书信息则有很多的冗余信息,该如何分解使之满足BCNF,并指出分解后的关系模式的主键。

【参考答案】

图书(分类目录号,书名,作者,内容摘要,价格,购书日期),主键:分类目录号
副本(图书流水号,分类目录号),主......

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

问答题
【说明】 本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个: creatList(): 创建从小到大的有序链表。 multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。 print(): 打印链表。 【C++代码】 #include <iostream> using namespace std; class List; class Node friend class List; public: Node(int data) (1) ; private: int data; Node *next; ; class List public: List()list=NULL; void multiplyList(List L1, List L2); void creatList(); void print(); private: Node *list; ; void List::creatList() Node *p, *u, *pre; int dara; list=NULL; wbile(1) cout<< 输入链表的一项: (小于零,结束链表) <<endl; cin>>data; if(dara<0)break; 小于零,结束输入 p=list; while(p !=NULL && dara>p->data) 查找插入点 pre=p; p=p->next; u= (2) ; if(p==list)list=u; else pre->next=u; (3) ; void List::multiplyList(List L1, List L2) Node *pL1, *pL2, *pL, *u; list = NULL; pL1 = L1.list; pL2 = L2.11st; while(pL1 != NULL && pL2 != NULL) if(pL1->data < pL2->data) u = new Node(pL1->data); pL1 = pL1->next; else u = new Node(pL2->data); pL2 = pL2->next; if(list == NULL) list = (4) ; else pL->next=u; pL=u; pL1 = (pL1 != NULL) pL1:pL2; while(pL1 != NULL) u= (5) ; pL1 = pL1->next; if(list == NULL) list=pL=u; else pL->next=u; pL=u; void List::print() Node *p; p = list; while(p !=NULL) cout<<p->data<< t ; p=p->next; cout<<end1; void main() List L1, L2, L; cout<< 创建第一个链表 n ;L1.creatList(); cout<< 创建第二个链表 n ;L2.creatList(); L1.print();L2.print(); L.multiplyList(L1,L2); L.print();