oracle三级项目Word格式.docx
《oracle三级项目Word格式.docx》由会员分享,可在线阅读,更多相关《oracle三级项目Word格式.docx(29页珍藏版)》请在冰点文库上搜索。
(1)表的设计
1.管理员体集可以转换为关系:
ADMINISTRATOR(ADMIN_ID,ADMIN_NAME,PASSWORD,TELEPHONE,EMAIL,ADDRESS)
ADMIN_ID表示管理员用户ID,ADMIN_NAME表示姓名,PASSWORD表示密码,TELEPHONE表示管理员电话,EMAIL表示管理员邮箱地址,ADDRESS表示联系地址
2.图书详细信息可以转换为关系
BOOK_DETAILS(BOOK_ID2,BOOK_NAME,KIND_ID,WRITER,PUBLISHER_ID,INTRODUCTION,PUBLISH_DATE,IN_DATE,ACCOUNT)
BOOK_ID2表示书号,BOOK_NAME表示书名,KIND_ID表示借阅量,WRITER表示最大借阅量,PUBLISHER_ID出版社号,INTRODUCTION表示读者名,PUBLISH_DATE表示借出日期,IN_DATE表示归还日期,ACCOUNT表示书的状态
3.图书管理记录可以转换为关系
BOOK_MANAGE_RECORDS(ADMIN_ID,BOOK_ID,ACTION,TIME)
ADMIN_ID表示管理员号,BOOK_ID表示图书号,ACTION表示开始状态,TIME表示借阅时间
4.图书分类可以转换为关系
BOOKKINDS(KIND_ID,KIND_NAME,FATHER_TYPE,)
KIND_ID表示索书号,KIND_NAME表示索书名,FATHER_TYPE表示上次借书记录
5.出版社实体可以转化的关系
PUBLISHER("
PUBLISHER_ID"
"
TELEPHONE"
"
FAX"
EMAIL"
"
ADDRESS"
PUBLISHER_NAME"
)"
出版社ID"
电话"
传真"
邮箱"
地址"
出版社名字
6.读者实体可以转化为
READERS("
READER_ID"
,"
READER_NAME"
,"
PASSWORD"
COMPANY"
SEX"
IN_DATE"
)
"
读者号"
读者名称"
密码"
电话"
公司"
性别"
日期
7.图书预约转化表为
RESERVATIONS("
BOOK_ID2"
R_DATE"
)"
读者ID"
书ID"
8.图书实体转化为
BOOKS("
BOOK_ID"
"
STATE"
)"
书号"
检索书号"
书的状态
9.借阅记录
BORROW_RECORDS("
,"
BORROW_DATE"
RETURN_DATE"
RENEWABLE"
)
读者号"
借书日期"
还书日期"
书的状态"
续订
10.图书荐购
BUY_RECOMMENDATION("
RECOMMENDATION_ID"
BOOK_NAME"
WRITER"
SUMMARY"
)"
荐购号"
读者号"
书名"
作者"
出版社名"
总价
(2)序列的设计
创建一个名为“TUSER_SEQ”的序列,用于产生读者学号,起始值为307,步长为1,不缓存,不循环。
创建一个名为“TBOOK_SEQ”的序列,用于产生部门编号,起始值为380,步长为10,最大值为9990,不缓存,不循环.
创建一个seq_Borrow,用于产生读者编号,起始值为1,步长为1,不缓存,不循环。
(3)视图的设计
读者当前借阅
新进书目
图书推荐
图书视图
(4)索引的设计
在图书表上创建唯一性索引
在读者表表上的sex列上创建一个位图索引
4.数据库实施
(1)创建用户,并给用户授权
insertinto"
WIN2008"
."
ADMINISTRATOR"
values('
070411'
'
admin'
123456789'
,'
121212@com'
’大连’);
(2)创建表
1.管理员表
ADMINISTRATOR
("
ADMIN_ID"
CHAR(10)NOTNULLENABLE,
"
ADMIN_NAME"
CHAR(50)NOTNULLENABLE,
VARCHAR2(20)NOTNULLENABLE,
NUMBER,
VARCHAR2(50),
VARCHAR2(100),
CONSTRAINT"
PRIMARY_ADMIN_ID"
PRIMARYKEY("
2.读者表
READERS
VARCHAR2(50)NOTNULLENABLE,
CHAR(13),
CHAR(3)NOTNULLENABLE,
DATE,
PRIMARY_READER_ID"
3.借阅记录表
BORROW_RECORDS
CHAR(10)DEFAULT1NOTNULLENABLE,
DATENOTNULLENABLE,
CHAR
(1)DEFAULT1NOTNULLENABLE,
PRIMARY_RECORD_ID"
4.图书预约表
RESERVATIONS
PRIMARY_KEY_1"
5.图书荐购表
BUY_RECOMMENDATION
VARCHAR2(1000),
PRIMARY_REC_ID"
6.图书表
BOOKS
CHAR
(1)NOTNULLENABLE,
PRIMARY_KEY"
7.图书管理记录表
BOOK_MANAGE_RECORDS
ACTION"
TIME"
PRIMARY_BOOK_MANAGE_RECORDS"
8.图书详细信息表
BOOK_DETAILS
KIND_ID"
INTRODUCTION"
PUBLISH_DATE"
TIMESTAMP(6)NOTNULLENABLE,
ACCOUNT"
PRIMARY_BOOK_ID2"
9.图书分类表
BOOKKINDS
KIND_NAME"
FATHER_TYPE"
PRIMARY_KIND_ID"
10.出版社表
PUBLISHER
CHAR(13)NOTNULLENABLE,
VARCHAR2(20),
VARCHAR2(100)NOTNULLENABLE,
PRIMARY_PUBLISHER_ID"
(3)创建序列
CREATESEQUENCETUSER_SEQSTARTWITH307INCREMENTBY1NOCACHENOCYCLE;
CREATESEQUENCETBOOK_SEQSTARTWITH380INCREMENTBY10MAXVALUE9990NOCACHENOCYCLE;
创建一个seq_Borrow,用于产生读者编号,起始值为1,步长为1
Createsequenceseq_Borrowstartwith1incrementby1nocycle
(4)创建索引
CreateuniqueindexBook_cBooksTypeonBOOKS(BOOK_ID)tablespaceusers;
CreatebitmapindexREADERS_sexonREADERS(sex)tablespaceusers;
(5)创建视图
createorreplaceviewcurrent_borrow_viewas
select"
fromborrow_records
wherestate='
1'
createorreplaceviewnew_coming_booksas
selectbook_id2,book_name,writer,publisher_name
frombook_details,publisher
wherebook_details.publisher_id=publisher.publisher_idandbook_details.in_date>
add_Months(sysdate,-1)
createorreplaceviewgb_recas
selectid,book_name,publisher_name,writer,b_numfrom
(selectbooks.book_id2id,count(*)b_num
fromborrow_records,books
whereborrow_records.book_id=books.book_id
groupbybooks.book_id2
),books_view
wherebooks_view.BOOK_ID2=id
orderbyb_numdesc
CREATEORREPLACEFORCEVIEW"
BOOKS_VIEW"
("
AVAILABLE_ACCOUNT"
)AS
selectdistinctbook_details.BOOK_ID2,BOOK_NAME,WRITER,PUBLISHER_NAME,ACCOUNT,(selectcount(*)frombookswherebooks.book_id2=book_details.book_id2andbooks.state='
groupbybooks.book_id2)AVAILABLE_ACCOUNT,INTRODUCTION
frombooks,book_details,publisher
wherebooks.book_id2=book_details.book_id2andbook_details.publisher_id=publisher.publisher_id
;
5.PL/SQL程序设计
(1)存储过程的设计
创建一个名为proc_Due的存储过程,实现还书操作
创建一个名为trg_BorrowBook的存储过程,返回某个学生当前没有归还的所有图书
创建名为“Pro_secure_dml”的存储过程,检查当前用户操作时间是否为工作时间,即非周六周日,时间为08:
00~18:
00
(2)函数的设计
创建一个名为func_dept_book的函数,以读者号为参数,查看借阅的书号:
创建一个名为fun_DEPT_RECORDS的函数,以图书号为参数,查看还书的日期:
(3)触发器的设计
创建名为check_borrow_book的触发器,实现读者借书时更新书的可借与不可借状态。
创建名为check_BORROW_RECORDS的触发器,当插入、删除或修改借阅信息时,统计人数,并输出
创建名为check_BORROW_number的触发器,当插入一条借书记录,保证单个人不超过10本书。
(4)包的设计
创建book_manage包,用于存储图书入库,借书,还书,时间等信息,实现获取图书,插入图书,借书,还书,续借书,更新借书记录的功能。
创建reader_manage包,用于存储读者信息,读者的借书信息,实现查询借阅信息,查询历史借阅信息,插入新读者,更新读者信息的功能。
6.PL/SQL程序开发
(1)存储过程的实现
CREATEORREPLACEPROCEDUREproc_due(
P_borrowCardIdVARCHAR2,p_ISBNVARCHAR2,p_dueDateDATEDEFAULTSYSDATE)
AS
V_numberNUMBER;
BEGIN
SELECTcount(*)INTOv_numberFROMborrow_records
WHEREREADER_ID=p_borrowCardIdANDBOOK_ID=p_isbn;
IFv_number=0THEN
RAISE_APPLICATION_ERROR(-20000,'
对不去,没有相应借书记录!
'
);
ENDIF;
UPDATEborrow_recordsSETRETURN_DATE=p_dueDateWHEREREADER_ID=p_borrowCardIdANDBOOK_ID=p_isbn;
END;
CREATEORREPLACEPROCEDUREproc_BorrowBook(
P_borrowCardIdVARCHAR2,p_bookCurssorOUTsys_refcursor)
OPENp_bookCurssorFORSELECTbooks.book_id,BORROW_DATE,RETURN_DATEFROMbooks,borrow_records
WHEREbooks.book_id=borrow_records.book_idANDREADER_ID=p_borrowCardIdANDRETURN_DATEISNULL;
createorreplaceprocedurePro_secure_dml
is
begin
ifto_char(sysdate,'
HH24:
MI'
)notbetween'
08:
00'
and'
18:
orto_char(sysdate,'
DY'
'
NLS_DATE_LANGUAGE=AMERICAN'
In('
SAT'
SUN'
)thenraise_application_error(-20205,'
只能在正常的工作时间内改变。
endif;
endPro_secure_dml;
(2)函数的实现
CREATEORREPLACEFUNCTIONfunc_dept_book(
p_deptnoreaders.reader_id%type)
returnborrow_records.book_id%type
as
v_maxsalborrow_records.book_id%type;
selectbook_idintov_maxsalfromborrow_recordswhereborrow_records.reader_id=p_deptno;
returnv_maxsal;
exception
whenno_data_foundthen
dbms_output.put_line('
nodata'
endfunc_dept_book;
CREATEORREPLACEFUNCTIONfun_DEPT_RECORDS(
p_bookidBORROW_RECORDS.BOOK_ID%type)
returnborrow_records.return_date%type
v_dateborrow_records.return_date%type;
selectreturn_dateintov_datefromborrow_recordswhereborrow_records.book_id=p_bookid;
returnv_date;