设有关系模式: 图书(书号,书名,出版日期,作者号,作者名,作者联系电话,图书价格)有如下语义: ●每个图书有唯一的作者,每个作者可以编写多部图书;● 每个图书有唯一的出版日期和价格;● 作者名可能有重复。 指出该关系模式的主键。 该关系模式属于第几范式?请说明原因。 若不是第三范式,请将其规范化为第三范式的关系模式,并说明规范化后各关系模式的主键和外键
时间: 2024-03-27 17:41:52 浏览: 121
该关系模式的主键是{书号}。因为一个图书的唯一标识应该是其书号,而不是出版日期或价格。
该关系模式不属于第三范式。原因是存在传递依赖,即{作者号}→{作者名,作者联系电话},而且{书号}→{作者号},因此{书号}→{作者名,作者联系电话},作者名和联系电话与书号之间存在传递依赖。
将其规范化为第三范式的关系模式如下:
图书(书号,书名,出版日期,作者号,图书价格)
作者(作者号,作者名,作者联系电话)
其中,图书关系模式的主键为{书号},作者关系模式的主键为{作者号}。图书关系模式的外键为{作者号},参照作者关系模式的主键{作者号}。
相关问题
关系模式:出版社(出版社名,地址,邮编,电话)出版社名为主键 书(书号,出版社名,读者号,书名,作者,ISBN,借出日期,应还日期)书号为主键,出版社名和读者号为外键, 借阅者(读者号,姓名,地址,性别,年龄,单位)读者号为主键 , 根据关系模式创建表
创建出版社表:
```
CREATE TABLE Publisher (
publisher_name VARCHAR(50) PRIMARY KEY,
address VARCHAR(100),
zip_code VARCHAR(10),
phone VARCHAR(20)
);
```
创建书表:
```
CREATE TABLE Book (
book_id INT PRIMARY KEY,
publisher_name VARCHAR(50),
reader_id INT,
title VARCHAR(100),
author VARCHAR(50),
isbn VARCHAR(20),
borrow_date DATE,
due_date DATE,
FOREIGN KEY (publisher_name) REFERENCES Publisher(publisher_name),
FOREIGN KEY (reader_id) REFERENCES Borrower(reader_id)
);
```
创建借阅者表:
```
CREATE TABLE Borrower (
reader_id INT PRIMARY KEY,
name VARCHAR(50),
address VARCHAR(100),
gender CHAR(1),
age INT,
company VARCHAR(100)
);
```
现有关系数据库如下: 图书表(书号,书名,作者,出版社,单价), 读者表(读者号,姓名,性别,电话), 借阅表(读者号,书号,借出日期,归还日期)查询出哪些图书小明借阅过,但是小红没有借阅过。列出对应书号,书名
根据提供的关系数据库,可以使用以下SQL查询语句来找出小明借阅过但小红没有借阅过的图书的书号和书名:
```sql
SELECT 图书表.书号, 图书表.书名
FROM 图书表
INNER JOIN 借阅表 ON 图书表.书号 = 借阅表.书号
INNER JOIN 读者表 ON 借阅表.读者号 = 读者表.读者号
WHERE 读者表.姓名 = '小明'
AND 图书表.书号 NOT IN (
SELECT 图书表.书号
FROM 图书表
INNER JOIN 借阅表 ON 图书表.书号 = 借阅表.书号
INNER JOIN 读者表 ON 借阅表.读者号 = 读者表.读者号
WHERE 读者表.姓名 = '小红'
)
```
这个查询语句使用了内连接(INNER JOIN)来连接图书表、借阅表和读者表,然后使用WHERE子句来筛选出小明借阅过但小红没有借阅过的图书。最后,SELECT语句选择了图书表中的书号和书名列。
阅读全文