这看起来适合SQL吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这看起来适合SQL吗?相关的知识,希望对你有一定的参考价值。
提示:图书馆为借书人提供书籍。每本书均按书名,版本和出版年份进行描述,并使用ISBN进行唯一标识。每个借方都用其姓名和地址来描述,并使用借方编号进行唯一标识。图书馆提供每本书的一个或多个副本,并且使用副本编号,指示该图书是否可借出的状态以及给定副本的允许借阅期限来唯一标识每本副本。借款人可以借出一本书或多本书,并记录每本书借出并归还的日期。贷款编号唯一地标识了每本书的贷款。
DROP DATABASE IF EXISTS library;
CREATE DATABASE library;`
USE library;
`DROP TABLE IF EXISTS book CASCADE;
CREATE TABLE book (
title varchar(30) not null,
edition varchar(10),
year char(4),
ISBN char(13),
primary key (ISBN),
);
DROP TABLE IF EXISTS loan CASCADE;
CREATE TABLE loan (
return date varchar(10) not null,
leave date varchar(10),
primary key (copy_num),
);
DROP TABLE IF EXISTS borrower CASCADE;
CREATE TABLE borrower (
Name_first varchar(25) not null,
Name_last varchar(25) not null,
Address varchar(20),
borrow_num char(14),
primary key (borrow_num),
);
DROP TABLE IF EXISTS copy CASCADE;
CREATE TABLE copy (
status varchar(25) not null,
loan period varchar(2),
copy_num char(13),
primary key (copy_num),
);
答案
尽管不一定要怎么做,但要求非常明确:
ISBN_detail(ISBN*,title, edition,year)
((如果我们可以访问外部维护的目录,则实际上不需要存储它)
borrower (borrower_number*,name,address)
((如果我们决定更改借款人的编号系统,我会在此处使用代理ID。我也想记录有关借款人状态的更多信息,例如加入日期)
book (copy_number*, isbn*, status, loan_period)
(再次,我将使用代理ID-我认为副本数是一个较弱的概念。Loan_period是可以借书的期限(以天为单位),请注意,在现实生活中,有时允许某些借阅者借书比其他人更长,但这是另一天)
loans(loan_number*,borrower_number,copy_number,ISBN,loaned_date [not null],returned_date [null])
这就是为什么我要有一个book_id !!!
此表本来可以...
loans(borrower_id*,book_id*,loan_date*,returned_date)
...但是规范不允许这样做。
请注意,借款人通常一次只能借用有限数量的书籍,但同样,这也不是这项作业的一部分。
* = (component of) PRIMARY KEY
另一答案
我认为这是有效的SQL,但是在删除整个数据库时,不需要分别删除这些表,因此其中的表也将被删除。
以上是关于这看起来适合SQL吗?的主要内容,如果未能解决你的问题,请参考以下文章
HibernateCallback 最适合执行 SQL/过程吗?