数据库设计与SQL实践:Exercise翻译及解答

需积分: 10 3 下载量 119 浏览量 更新于2024-07-26 收藏 177KB DOC 举报
"ssd7 exercise 中文翻译" 在SSD7的学习中,这个练习主要涉及关系型数据库的设计和SQL操作。练习分为两部分,分别关注数据库表的结构设计和SQL语句的编写。 第一部分涉及到关系的关键字、属性及数据类型的定义。在这个练习中,我们有两个关系:`BOOK` 和 `PUBLISHER`。 1. 对于`BOOK` 关系,主键是 `ISBN`,因为它能唯一标识一本书。没有备用键,因为即使`PrimaryAuthor`和`PublisherID`可能唯一,但考虑到它们可能有多个作品或出版书籍,所以不足以作为主键。`PublisherID`是外键,它引用了`PUBLISHER`表的`PublisherID`,确保数据完整性。 2. `PUBLISHER` 关系,主键是 `PublisherID`,同样没有备用键。`PublisherID`在外键场景中用于`BOOK`表,确保关联的出版社信息正确。 每个关系的属性名和数据类型如下: - `BOOK`: PrimaryAuthor (字符串),Title (字符串),ISBN (字符串),PublisherID (整数),Edition (整数),DateofPublication (日期),Price (浮点数),BookDescription (字符串) - `PUBLISHER`: PublisherID (整数),Name (字符串),Address (字符串) 每个关系应包含至少四行示例数据,例如: ``` BOOK: | PrimaryAuthor | Title | ISBN | PublisherID | Edition | DateofPublication | Price | BookDescription | |---------------|----------------------|----------------|-------------|---------|------------------|-------|----------------------------------------| | John Doe | Database Systems | 978-1234567890 | 1 | 2nd | 2020-01-01 | 39.99 | 介绍数据库系统的基础知识 | | Jane Smith | Programming Fundamentals | 978-9876543210 | 2 | 1st | 2019-06-30 | 49.99 | 学习编程的入门指南 | | Alice Johnson | Advanced SQL | 978-0987654321 | 1 | 3rd | 2021-03-15 | 59.99 | 高级SQL查询和优化技术的深入探讨 | | Bob Brown | Web Development | 978-1111222233 | 2 | 4th | 2020-11-20 | 34.99 | 教程涵盖了网页开发的各个方面 | PUBLISHER: | PublisherID | Name | Address | |-------------|------------------|--------------------------------| | 1 | AddisonWesley | 123 Main St, Anytown, USA | | 2 | McGraw Hill | 456 High Rd, Othertown, USA | | 3 | Penguin Books | 789 Bridge St, Anothercity, USA| | 4 | HarperCollins | 1010 Park Ave, Somewhere, USA | ``` 第二部分主要涉及SQL操作: 1. 使用`CREATE TABLE`语句创建`BOOK` 和 `PUBLISHER` 表,指定`ISBN` 和 `PublisherID`为主键。 2. 使用`INSERT`语句向两个表中插入上述示例数据。 3. 查询语句如下,找出"AddisonWesley" 和 "McGraw Hill" 出版的所有书的标题和价格: ```sql SELECT Title, Price FROM Book WHERE PrimaryAuthor IN ('AddisonWesley', 'McGraw Hill'); ``` 这使用了选择操作(SELECT),根据作者筛选记录。 4. 查询"FundamentalsofDatabase Systems"的出版社名字: ```sql SELECT P.Name FROM Book B JOIN Publisher P ON B.PublisherID = P.PublisherID WHERE B.Title = 'FundamentalsofDatabase Systems'; ``` 这里使用了选择(SELECT)、投影(projection,即只选取`Name`列)和连接(JOIN)操作,通过`PublisherID`关联`Book`和`Publisher`表。 练习二要求创建一个图书馆数据库,其中`Book`表表示书的副本。例如,如果有三本"DBMS",`Book`表会包含三行数据。以下是一些可能的SQL操作示例: 1. 添加新书到库存: ```sql INSERT INTO Book (Title, ISBN, PublisherID, Edition, DateofPublication, Price) VALUES ('DBMS', '978-9999999999', 3, 1st, '2022-06-01', 29.99); ``` 2. 更新某本书的价格: ```sql UPDATE Book SET Price = 34.99 WHERE ISBN = '978-1234567890'; ``` 3. 删除已售罄的书副本: ```sql DELETE FROM Book WHERE ISBN = '978-9999999999' AND Edition = 1st; ``` 4. 查找所有出版社为"Penguin Books"的书籍: ```sql SELECT * FROM Book B JOIN Publisher P ON B.PublisherID = P.PublisherID WHERE P.Name = 'Penguin Books'; ``` 这些操作展示了如何使用SQL来管理图书馆数据库中的数据。