SSD7_EX1【关系型数据库】
第一部分(PART1):
1.按照以下要求标识出每个关系的关键字(主键、备用键、外键)。对于此练习,选择关键字的时候可以忽略性能因素。
- 1)标识出每个关系的主键,如果没有主键,做适当的论述证明你的答案。
- 2)标识出每个关系的备用键,如果没有备用键,做适当的论述证明你的答案。
- 3)标识出每个关系的外键和完整性约束,并做适当的论述证明你的答案。
2.列出每个关系的属性名,和每个属性的域(数据类型和格式),并做适当的论述证明你的答案。 在每一个HTML表格中,列出至少四行正确的数据(可自己假设,要求合理、符合实际即可),将你的答案书写在一个名为BookPublisher.html的HTML页面中提交: BookPublisher.html:
Books
Primary Author<varchar(20)>
Title<varchar(50)>
ISBN**(Primary Key)**<char(12)>
PublisherID**(FOREIGN Key)**
Edition<varchar(10)>
Date of Publication
Price<float(4, 2)>
Book Description<varchar(200)>
赵静
数学建模与数学实验
9787040400038
1
第4版
2000.11
22.00
指导数学建模与数学实验
许建平
英汉互译实践与技巧
9787302146728
2
第4版
2012.8
38.00
本书是为非英语专业的大学生及研究生编写的英汉互译教程。
庄茁
基于ABAQUS的有限元分析和应用
9787302188162
2
第2版
2006.5
69.00
《基于ABAQUS的有限元分析和应用》是基于ABAQUS软件6.7版本进行有限元分析与应用的入门指南和工程分析与科学研究教程
王正林
精通MATLAB
9787121187315
3
第3版
2013.1
69.00
紧密结合实例,对MATLAB的使用进行了全面且详尽的阐述,并通过大量的实例讲述如何实现MATLAB的基本操作和实际使用。
路遥
平凡的世界(套装共3册)
9787530212004
4
第1版
2012.3
26.60
《平凡的世界(套装共3册)》是一部现实主义小说,也是小说化的家族史。
books论述:
上面是Books表的数据,并在列名表明了数据类型及长度和主外键:
- **1.Primary Author <varchar(20)>**:可变字符串,最长20
完整性约束:PrimaryAuthor VARCHAR(20) NOT NULL DEFAULT “未知作者”,
- **2.Title <varchar(50)>**:可变字符串,最长50
Title VARCHAR(50) NOT NULL DEFAULT “默认标题”,
- 3.ISBN <char(12)>(Primary Key):主键,因为ISBN对于每本书是唯一的,满足主键是唯一且不为空的条件,用以标识唯一一本书。
ISBN CHAR(13) NOT NULL DEFAULT “0000000000000” PRIMARY KEY,
- 4.PublisherID
(FOREIGN Key): int类型、外键,
PublisherID INT(4) NOT NULL DEFAULT 0 , FOREIGN KEY (PublisherID) REFERENCES publisher(PublisherID) 因为Books和Publishers表拥有相同的属性PublisherID,并且PublisherID是Publishers表的主键,使用其作为外键,两个表就可以建立联系 ;
- 5.Edition<varchar(10)>:可变字符串,最长10
Edition VARCHAR(10) NOT NULL DEFAULT 0 ,
- 6.Date of Publication
: 日期类型
DateofPublication DATE NOT NULL DEFAULT ‘1970-01-01’ ,
- 7.Price<float(4, 2)>:float类型,小数点两位
Price float(4, 2) NOT NULL DEFAULT 0 ,
- 8.Book Description<varchar(200)>:可变字符串,最长200
BookDescription varchar(200) NOT NULL DEFAULT ‘描述为空’ , 主键(PK): ISBN,因为ISBN对于每本书是唯一的,满足主键是唯一且不为空的条件,用以标识唯一一本书。 外键(FK): PublisherID为Books和Publishers表拥有相同的属性PublisherID,并且PublisherID是Publishers表的主键,使用其作为外键,两个表就可以建立联系 ; 备用键(AK):没有备用键,除主键ISBN外其他列都无法唯一标识一本书,存在相同标题、出版社、价格、出版时间等的书籍。
Publishers
PublisherID (Primary Key)
Name<varchar(50)>
Address<varchar(100)>
04
高等教育出版社
北京市西城区德胜门外大街4号
302
清华大学出版社
北京市海淀区清华大学出版社
5053
电子工业出版社
北京市丰台区万寿路南口金家村288号华信大厦
5302
北京十月文艺出版社
北京市海淀区十月文艺出版社
- 1.PublisherID
(Primary Key): 主键,因为PublisherID可以唯一标识出版社; - 2.Name<varchar(50)>:可变字符串,最长50;
- 3.Address <varchar(100)>:可变字符串,最长100。
主键(PK):PublisherID,因为PublisherID可以唯一标识出版社; 外键(FK):显然没有; 备用键(AK):Name,出版社名可以唯一标识出版社。
第二部分(part-2)
按照要求书写SQL语句,将你的答案书写在一个名为createDB.Sql的文件中提交。 1)使用CREATE TABLE关键字创建两个关系,要求标识出每个关系的主键和备用键。 2)使用INSERT关键字向每个关系中插入四行数据(第一你部分列出的数据)。 3)书写SQL语句查询出某两个作者…… 4)书写SQL语句查询出某本书的出版社名字。
文件createDB.Sql:
CREATE TABLE `publisher` (
`PublisherID` int(4) NOT NULL DEFAULT 0 PRIMARY KEY ,
`Name` varchar(50) not NULL DEFAULT “未知出版社”,
`Address` varchar(100) NOT NULL DEFAULT “未知地址”
);
CREATE TABLE Books(
PrimaryAuthor VARCHAR(20) NOT NULL DEFAULT “未知作者”,
Title VARCHAR(50) NOT NULL DEFAULT “默认标题”,
ISBN CHAR(13) NOT NULL DEFAULT “9780000000000” PRIMARY KEY,
PublisherID INT(4) NOT NULL DEFAULT 1 ,
Edition VARCHAR(10) NOT NULL DEFAULT 0 ,
DateofPublication DATE NOT NULL DEFAULT ‘1970-01-01’ ,
Price float(4, 2) NOT NULL DEFAULT 0 ,
BookDescription varchar(200) NOT NULL DEFAULT “本书暂无描述”,
FOREIGN KEY (PublisherID) REFERENCES publisher(PublisherID)
);
INSERT INTO `publisher` (`PublisherID`, `Name`, `Address`)
VALUES (‘1’, ‘高等教育出版社’, ‘北京市西城区德胜门外大街4号’);
INSERT INTO `publisher` (`PublisherID`, `Name`, `Address`)
VALUES (‘2’, ‘ 清华大学出版社 ‘, ‘北京市海淀区清华大学出版社 ‘);
INSERT INTO `publisher` (`PublisherID`, `Name`, `Address`)
VALUES (‘3’, ‘电子工业出版社’, ‘北京市丰台区万寿路南口金家村288号华信大厦 ‘);
INSERT INTO `publisher` (`PublisherID`, `Name`, `Address`)
VALUES (‘4’, ‘北京十月文艺出版社’, ‘北京市海淀区十月文艺出版社’);
INSERT INTO Books(PrimaryAuthor,Title,ISBN,PublisherID,Edition,DateofPublication,Price,BookDescription)
VALUE(‘赵静’,’数学建模与数学实验’,’9787040400038’,1,’第4版’,’2000-11-01’,22.00,
‘指导数学建模与数学实验’);
INSERT INTO Books(PrimaryAuthor,Title,ISBN,PublisherID,Edition,DateofPublication,Price,BookDescription)
VALUE(‘许建平’, ‘英汉互译实践与技巧’,’9787302146728’,2,’第4版’,’2012-08-01’,38.00,
‘本书是为非英语专业的大学生及研究生编写的英汉互译教程.’);
INSERT INTO Books(PrimaryAuthor,Title,ISBN,PublisherID,Edition,DateofPublication,Price,BookDescription)
VALUE(‘庄茁’,’基于ABAQUS的有限元分析和应用’,’9787302188162’,2,’第2版’,’2006-05-01’,69.00,
‘基于ABAQUS软件6.7版本进行有限元分析与应用的入门指南和工程分析与科学研究教程’);
INSERT INTO Books(PrimaryAuthor,Title,ISBN,PublisherID,Edition,DateofPublication,Price,BookDescription)
VALUE(‘王正林’,’精通MATLAB’,’9787121187315’,3,’第3版’,’2013-01-01’,69.00,
‘ 紧密结合实例,对MATLAB的使用进行了全面且详尽的阐述,并通过大量的实例讲述如何实现MATLAB的基本操作和实际使用。 ‘);
INSERT INTO Books(PrimaryAuthor,Title,ISBN,PublisherID,Edition,DateofPublication,Price,BookDescription)
VALUE(‘路遥’,’ 平凡的世界(套装共3册) ‘,’9787530212004’,4,’第1版’,’2012-03-01’,26.60,
‘ 《平凡的世界(套装共3册)》是一部现实主义小说,也是小说化的家族史。 ‘);
SELECT Title,Price
FROM books
where PrimaryAuthor=’路遥’ OR PrimaryAuthor=’许建平’;
SELECT p1.Name
FROM publisher p1,books b1
where p1.PublisherID=b1.PublisherID AND b1.Title=’精通MATLAB’;
** 文件Rel-ops.txt:** [infobg class=”tips” closebtn=”” color=”” bgcolor=””] SELECT Title,Price FROM books where PrimaryAuthor=’路遥’ OR PrimaryAuthor=’许建平’; 此语句完成查询出某两个作者(例如”路遥” 、 “许建平”)出版的所有书的标题和价格; 解释:从books表中选择Title,Price两列,约束条件为作者是”路遥”或”许建平”。 SELECT p1.Name FROM publisher p1,books b1 where p1.PublisherID=b1.PublisherID AND b1.Title=’精通MATLAB’; 使用连接查询,p1、b1分别是publisher和books中的对象,使用PublisherID连接两者,令b1.Title=’精通MATLAB’,选择p1.Name得出查询结果 [/infobg]