[关闭]
@rg070836rg 2016-11-07T20:34:12.000000Z 字数 2959 阅读 1305

数据库12.24实验

数据库实验


  1. 实验十五:T-SQL(13)
  2. 一个简化的图书馆信息管理系统,系统需求如下:
  3. 1.图书馆有若干管理员librarian,各自有员工号empid、姓名name、身份证号idno等属性。
  4. 2.图书馆有若干种图书booktype,每种图书有ISBN、名称title、出版社publisher、作者writers、价格price等属性,每种图书有唯一的ISBN号,同种图书可购入多本。
  5. 3.每一本图书book有唯一标记bookid和种类booktype
  6. 4.读者reader在办理借书证后方可借阅,一个读者有唯一的借书证号cardno,还有姓名name、身份证号idno、住址address、注销标记logoff等。每个读者最多可借20本书,读者在注销前,须归还所有已借图书或报失。
  7. 5.需处理以下基本业务:
  8. ①借书:在某时刻某读者通过某管理员借阅某一本书。
  9. ②还书:在某时刻通过某管理员归还某一本书,读者可以在借阅历史表中查阅自己以前所借的书。
  10. ③报失:在某时刻某读者向某管理员报失某一本书;报失之后该书不能再借;每一次还书和报失记录都须对应某一次借书记录,且可由不同管理员处理。
  11. E/R图建立该系统的概念模型如下:

187670B02AA84575AC18BD628EFDF806.png-23.7kB

  1. 请按要求完成如下工作:
  2. 1. 参考以上E-R图,设计关系模式,并确定各关系模式的属性应满足的数据完整性约束,然后定义表的参照完整性约束
  3. 2. 根据借还书流程设计相应的触发器.

0建库

  1. create database LIS
  2. on
  3. primary(name=LIS,
  4. filename='D:\test\test1.mdf',
  5. size=4mb,
  6. maxsize=10mb,
  7. filegrowth=2mb
  8. )
  9. log on
  10. (name=LISlog,
  11. filename='D:\test\testlog1.ldf',
  12. size=1mb,
  13. maxsize=5mb,
  14. filegrowth=1mb
  15. )
  16. use LIS;

1 librarian表

  1. --1.图书馆有若干管理员librarian,各自有员工号empid、姓名name、身份证号idno等属性。
  2. create table librarian
  3. (
  4. Lempid char(12) not null primary key,
  5. Lname char(15) null,
  6. Lidno char(18) null
  7. )

2 booktype表

  1. --2.图书馆有若干种图书booktype,每种图书有ISBN、名称title、出版社publisher
  2. --作者writers、价格price等属性,每种图书有唯一的ISBN号,同种图书可购入多本。
  3. create table booktype
  4. (
  5. ISBN char(20) not null primary key,
  6. title char(15),
  7. publisher char(15),
  8. writers char(15),
  9. price int
  10. )

3 book表

  1. --3.每一本图书book有唯一标记bookid和种类booktype
  2. create table book
  3. (
  4. bookid char(8) not null primary key,
  5. ISBN char(20) foreign key references booktype(ISBN),
  6. )

4 reader表

  1. --4.读者reader在办理借书证后方可借阅,一个读者有唯一的借书证号cardno
  2. --还有姓名name、身份证号idno、住址address、注销标记logoff等。
  3. --每个读者最多可借20本书,读者在注销前,须归还所有已借图书或报失。
  4. create table reader
  5. (
  6. cardno char(20) not null primary key,
  7. name char(15) null,
  8. idno char(18) null,
  9. address char(18) null,
  10. logoff char(1) not null,
  11. )

5 Record表

  1. --5.需处理以下基本业务:
  2. --①借书:在某时刻某读者通过某管理员借阅某一本书。
  3. --②还书:在某时刻通过某管理员归还某一本书,读者可以在借阅历史表中查阅自己以前所借的书。
  4. --③报失:在某时刻某读者向某管理员报失某一本书;报失之后该书不能再借;
  5. --每一次还书和报失记录都须对应某一次借书记录,且可由不同管理员处理。
  6. --用E/R图建立该系统的概念模型如下:
  7. create table Record
  8. (
  9. recid char(12) not null primary key,
  10. brwLempid char(12) foreign key references librarian(Lempid),
  11. cardno char(20) foreign key references reader(cardno),
  12. bookid char(8)foreign key references book(bookid),
  13. borrowdate DATETIME,
  14. status char(8) null,
  15. enddate DATETIME,
  16. endLempid char(12) foreign key references librarian(Lempid),
  17. )

6 根据借还书流程设计相应的触发器

  1. CREATE trigger borrow_record on book_record after insert
  2. as begin
  3. declare @bookid1 char(10)
  4. declare @empid1 int
  5. declare @borrow_time char(10)
  6. select @bookid1 = bookid ,@empid1 = empid ,@borrow_time = borrow_time
  7. from inserted
  8. insert into borrow_record values(@bookid1,@empid1,@borrow_time)
  9. end
  10. CREATE trigger return_record on book_record after insert
  11. as begin
  12. declare @bookid1 char(10)
  13. declare @empid1 int
  14. declare @return_time1 char(10)
  15. declare @return_flag1 char(4)
  16. select @bookid1 = bookid ,@empid1 = empid ,@return_time1 = return_time,@return_flag1 = return_flag
  17. from inserted
  18. insert into return_record values(@bookid1,@empid1,@return_time1,@return_flag1)
  19. end
  20. CREATE trigger lost_record on book_record after insert
  21. as begin
  22. declare @bookid1 char(10)
  23. declare @empid1 int
  24. declare @lost_time1 char(10)
  25. declare @lost_flag1 char(4)
  26. select @bookid1 = bookid ,@empid1 = empid ,@lost_time1 = lost_time,@lost_flag1 = lost_flag
  27. from inserted
  28. insert into lost_record values(@bookid1,@empid1,@lost_time1,@lost_flag1)
  29. end
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注