0

我在这个问题上有一个主要的大脑放屁,我希望有人可以看看这个并提供一些关于如何做到这一点的线索。

我有 4 个表 - 用户、book_copies、图书馆位置、书籍。

Create table book 
( id int not null auto incre, 
  name varchar(55), 
primary key(id) );

Create table book_copies 
( id int not null auto incre, 
  number of copies), 
primary key(id) );

Create table location 
( id int not null auto incre, 
  address varchar(55), 
primary key(id) );

Create table users 
( id int not null auto incre, 
  name varchar(55), 
primary key(id) );

我在 book_copies 和位置、 bookcopies 和用户、 book 和 book 副本之间有很多关系,并添加了 many-many 表

Create book_copies_locations 
( locationid int (11) not null, 
  bookcopyid int (11) not null, 
primary key(locationid,bookecopyid) , 
foreign key (locationid) references locations.id, 
foreign key (bookcopyid) references book_copies.id) );

Create table borrow 
( userid int (11) not null, 
  bookcopyid int (11) not null, 
  checkoutdate varchar(55), 
  duedate varchar(55), 
primary key(userid,bookecopyid) , 
foreign key (userid) references users.id, 
foreign key (bookcopyid) references book_copies.id) );

Create table book_copies_books 
( booksid int (11) not null, 
  bookcopyid int (11) not null, 
  checkoutdate varchar(55), 
  duedate varchar(55), 
primary key(booksid,bookecopyid) , 
foreign key (booksid) references books.id, 
foreign key (bookcopyid) references book_copies.id) );

我想做的是跟踪每本书的副本,并告诉它在什么位置?以及哪个用户检查了它?以及什么日期?

我添加了类似的东西

insert into borrow (userid,bookcopyid, checkoutdate, duedate) values( '1', '1', 'dec 18', 'jan 11')

insert into users (id,name) values( '1', 'bob')

insert into book_copies (id,number_of_copies) values( '2', '33')

insert into books (id,name) values( '1', 'harry potter')

insert into locations (id,address) values( '1', 'health science public library')

我将如何查询以返回有 2 份哈利波特的副本,于 12 月 18 日退房并于 1 月 11 日到期,并且位于健康科学公共图书馆?

我是否使用多对多表正确设置表?我应该这样做吗?

4

1 回答 1

0

我宁愿看到你的架构是这样的:

book (id, name)
book_copy (id, location_id, book_id, status)

请注意,要计算给定书籍的副本,请查看 book_copy。在您的示例中, book_id = 1 将有两行。

status将是一个非规范化的值,以使您不必从结帐历史记录中确定最新状态。

用户然后签出这本书的副本:

book_checkout (id, user_id, book_copy_id, checkout_date, due_date)

添加你的userlocation表,你应该都准备好了。

正如其他人所指出的,让您的 UNIQUE 索引设置好。

于 2012-11-30T05:35:17.223 回答