【问题标题】:Does this look right for SQL?这看起来适合 SQL 吗?
【发布时间】:2020-05-17 16:37:31
【问题描述】:

提示: 图书馆向借书者提供书籍。每本书都按标题、版本和出版年份进行描述,并使用 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),
);

【问题讨论】:

  • 我投票结束这个问题,因为它属于Code Review

标签: mysql sql


【解决方案1】:

我认为这是有效的 SQL,但您不需要单独删除这些表,因为您正在删除整个数据库,因此其中的表也会被删除。

【讨论】:

    【解决方案2】:

    虽然不一定我会怎么做,但要求非常明确:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2014-02-28
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2017-06-17
      • 1970-01-01
      相关资源
      最近更新 更多