假设图书馆业务规则:读者需要凭借书证借阅图书,借书证有借书证号、姓名、年龄、单位等属性;每一本图书有书号、书名、作者、出版社等属性;每一本借出的图书有借书证号、书号、借出日期、应还日期。试根据上述业务规则:(1)设计E-R模型,要求E-R图中注明属性和联系的类型。(2)将E-R模型转换成关系模型,用SQL语句创建表、定义完整性规则(字段类型及长度等信息自定义即可)。

题目

假设图书馆业务规则:

读者需要凭借书证借阅图书,借书证有借书证号、姓名、年龄、单位等属性;

每一本图书有书号、书名、作者、出版社等属性;

每一本借出的图书有借书证号、书号、借出日期、应还日期。

试根据上述业务规则:

(1)设计E-R模型,要求E-R图中注明属性和联系的类型。

(2)将E-R模型转换成关系模型,用SQL语句创建表、定义完整性规则(字段类型及长度等信息自定义即可)。


相似考题
更多“假设图书馆业务规则:读者需要凭借书证借阅图书,借书证有借书证号、姓名、年龄、单位等属性; ”相关问题
  • 第1题:

    现有表:读者(读者姓名,读者单位,借书证号) 借阅(借书证号,图书名称,图书作者,出版单位) 从读者表和借阅表中查询借阅了两本及两本以上图书的读者姓名和读者单位,正确的SQL语句是( )。

    A. SELECT读者姓名,读者单位FROM读者WHERE借书证号IN; (SELECT借书证号FROM借阅GROUP BY借书证号HAVING COUNT(*)>=2)

    B. SELECT读者姓名,读者单位FROM读者WHERE借书证号EXISTS; (SELECT借书证号FROM借阅GROUP BY借书证号HAVING COUNT(*)>=2)

    C. SELECT读者姓名,读者单位FROM读者WHERE借书证号IN; (SELECT借书证号FROM借阅GROUP BY借书证号WHERE COUNT(*)>=2)

    D. SELECT读者姓名,读者单位FROM读者WHERE借书证号EXISTS; (SELECT借书证号FROM借阅GROUP BY借书证号WHERE COUNT(*)>=2)


    正确答案:A
    本题考查了SQL查询功能的嵌套查询和分组与计算查询。分组与计算查询中,利用HAVING进一步限定分组的条件。HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用 HAVING子句限定分组。

  • 第2题:

    查询借阅了两本和两本以上图书的读者姓名和单位,应使用SQL语句

    A.SELECT姓名,单位FROM读者; WHERE借书证号IN; (SELECT借书证号FROM借阅; GROUP BY借书证号HAVING COUNT(*)>=2)

    B.SELECT姓名,单位FROM读者; WHERE借书证号EXISTS; (SELECT借书证号FROM借阅; GROUP BY借书证号HAVING COUNT(*)>=2)

    C.SELECT 姓名,单位 FROM 读者; WHERE 借书证号 EXISTS; (SELECT 借书证号 FROM 借阅; GROUP BY 借书证号 WHERE COUNT(*)>=2)

    D.SELECT 姓名,单位 FROM 读者; WHERE 借书证号 IN; (SELECT 借书证号 FROM 借阅; GROUP BY 借书证号 WHERE COUNT(*)>=2)


    正确答案:A
    解析:本小题考查了SQL查询功能的嵌套查询和分组与计算查询,分组与计算查询中,利用HAVING进一步限定分组的条件。HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。

  • 第3题:

    对于图书管理数据库,分别求出各个单位当前借阅图书的读者人次。下面的SQL语句正确的是( )。

    A)SELECT单位,COUNT(借阅.借书证号)FROM借阅,读者WHERE;

    借阅.借书证号=读者.借书证号ORDERBY单位

    B)SELECT单位,COUNT(借阅.借书证号)FROM借阅,读者WHERE;

    借阅.借书证号=读者.借书证号GROUPBY单位

    C)SELECT单位,SUM(借阅.借书证号)FROM借阅,读者WHERE; &&

    借阅.借书证号=读者.借书证号HAVING单位

    D)SELECT单位,SUM(借阅.借书证号)FROM借阅,读者WHERE;

    借阅.借书证号=读者.借书证号GROUPBY单位


    正确答案:B
    要分别求出各个单位查询借阅图书人的读者人次,而单位信息在读者表中,借阅图书的信息在借阅表中,需要通过共同的借书证号属性把两个表联接起来,即将借阅.借书证号=读者.借书证号置于WHERE短语之后。把同借书号所借阅的图书数日都统计在内,所以不需要使用DISTINCT短语去掉重复值;需要按单位统计借阅图书的读者人次,通过GROUP BY命令实现按单位分组查询。

  • 第4题:

    以下2题使用如下图书管理数据库:

    图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2)) 读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20)) 借阅(借书证号C(4),总编号C(6);借书日期D(8))

    对于图书管理数据库,查询0001号借书证的读者姓名和所借图书的书名。 SQL语句正确的是 ______。 SELECT 姓名,书名 FROM 借阅,图书,读者WHERE; 借阅.借书证号="0001',AND; ______ ______

    A.图书.总编号=借阅.总编号AND读者.借书证号=借阅.借书证号

    B.图书.分类号=借阅.分类号AND读者.借书证号=借阅.借书证号

    C.读者.总编号=借阅.总编号AND读者.借书证号=借阅.借书证号

    D.图书.总编号=借阅.总编号AND读者.书名=借阅.书名


    正确答案:A
    解析:使用SQL命令进行查询。查询结果出自不同的表,即姓名出自读者表,书名出自图书表,该题是涉及多个表的连接查询。读者和借阅表通过共有属性借书证号进行连接,从而可以获得借阅了图书的读者姓名,图书表和借阅表通过共有属性总编号进行连接,从而可以获得借出图书的书名。由于要进行3个关系即借阅、图书和读者3个表的连接,必须将连接条件放在WHERE短语后面,两个连接条件即“图书.总编号:借阅.总编号”和“读者.借书证号:借阅.借书证号”由'AND运算符连接。

  • 第5题:

    查询没有借阅图书的读者的姓名和借书证号,应使用SQL语句

    A.SELECT 姓名 FROM 读者 WHERE NOT EXISTS; (SELECT 借书证号 FROM 借阅 WHERE 借阅.借书证号=读者.借书证号)

    B.SELECT 姓名,借书证号 FROM 读者 WHERE (SELECT*FROM 借阅 WHERE 借阅.借书证号=读者.借书证号)

    C.SELECT 姓名,借书证号 FROM 读者 WHERE NOT EXISTS; (SELECT*FROM 借阅 WHERE 借阅.借书证号=读者.借书证号)

    D.SELECT 姓名,借书证号 FROM 读者 WHERE 借阅=NULL (SELECT*FROM 借阅 WHERE 借阅.借书证号=读者.借书证号)


    正确答案:C
    解析:谓词EXISTS用来检验在于查询中是否有结果返同,本题中内层查询引用了外层查询的表,所以是内外层相关嵌套查询。