目录
一.需求分析
二.概念结构设计
三.逻辑结构设计
四.物理结构设计
图书(Book)信息包括图书编号(BookID)、图书名称(BookName)、图书类别(BookType)、作者姓名(Author)、出版社编号(PublishID)、单价(Price)、图书总量(BookSum)、在馆数量(Stock);读者(Reader)信息有:读者编号(ReaderID)、读者姓名(ReaderName)、性别(Sex)、专业(Subject)、在借书数(BorrowNum);出版社(Publisher)信息有:出版社编号(PublisherID)、出版社姓名(PublisherName)、电话(Phone)、地址(Address)。
任何读者可以借阅(Borrow)多本书,任何一种书可为多人借阅;借阅每本图书时,需要登记借书时间(BorrowTime),且该书的在馆数量减一;归还图书时,需要登记还书时间(ReturnTime),且该书的在馆数量加一;
一个出版社可以出版(Publish)多种图书,一种图书可由多个出版社出版,出版时登记每本书的出版数量(PublishNum)和出版时间(PublishTime)。
Book(BookID,BookName,BookType,Author,PublishID,Price,BookSum,Stock)。
Reader(ReaderID,ReaderName,Sex,Subject,BorrowNum)。
Publisher(PublisherID,PublisherName,Phone,Address)。
Borrow(ReaderID ,BookID,BorrowTime,ReturnTime)。
Publish(PublisherID,BookIDPublishNum,PublishTime)。
表1:图书信息表结构
字段名 |
数据类型 |
长度 |
是否允许为空 |
备注 |
BookID |
VARCHAR |
20 |
否 |
主键 |
BookName |
VARCHAR |
100 |
否 |
非空 |
BookType |
VARCHAR |
100 |
否 |
非空 |
Author |
VARCHAR |
100 |
否 |
非空 |
PublishID |
VARCHAR |
20 |
否 |
非空 |
Price |
DECIMAL |
(7,2) |
否 |
非空 |
BookSum |
INT |
是 |
||
Stock |
INT |
是 |
表2:读者信息表结构
字段名 |
数据类型 |
长度 |
是否允许为空 |
备注 |
ReaderID |
VARCHAR |
20 |
否 |
主键 |
ReaderName |
VARCHAR |
100 |
否 |
非空 |
Sex |
VARCHAR |
20 |
否 |
检查 |
Subject |
VARCHAR |
100 |
否 |
非空 |
BorrowNum |
INT |
是 |
表3:出版社信息表结构
字段名 |
数据类型 |
长度 |
是否允许为空 |
备注 |
PublisherID |
VARCHAR |
20 |
否 |
主键 |
PublisherName |
VARCHAR |
200 |
否 |
非空 |
Phone |
VARCHAR |
20 |
否 |
非空 |
Address |
VARCHAR |
200 |
否 |
非空 |
表4:借阅信息表结构
字段名 |
数据类型 |
长度 |
是否允许为空 |
备注 |
ReaderID |
VARCHAR |
20 |
否 |
主键 外键 |
BookID |
VARCHAR |
20 |
否 |
主键 外键 |
BorrowTime |
DATE |
是 |
||
ReturnTime |
DATE |
是 |
表4中ReaderID与bookID作为联合主键
表5:出版信息表结构
字段名 |
数据类型 |
长度 |
是否允许为空 |
备注 |
PublisherID |
VARCHAR |
20 |
否 |
主键 |
BookID |
VARCHAR |
20 |
否 |
主键 |
PublishNum |
INT |
否 |
非空 |
|
PublishTime |
DATE |
否 |
非空 |
3、创建数据库与数据表
(1)创建名为“Library”的数据库;
(2)根据逻辑设计中的表结构,创建该数据库的所有数据表;
CREATE DATABASE Library;
USE Library;
-- 创建该数据库的所有数据表;
#图书信息表
CREATE TABLE Book
(
BookID VARCHAR(20) PRIMARY KEY,-- 书编号
BookName VARCHAR(100) NOT NULL,-- 图书名称
BookType VARCHAR(100) NOT NULL,-- 图书类别
Author VARCHAR(100) NOT NULL,
PublishID VARCHAR(20) NOT NULL,
Price DECIMAL(7,2) NOT NULL,
BookSum INT,
Stock INT-- 在馆数量
);
#读者信息表
CREATE TABLE Reader
(
ReaderID VARCHAR(20) PRIMARY KEY,
ReaderName VARCHAR(100) NOT NULL,
Sex VARCHAR(20)NOT NULL,
`Subject` VARCHAR(100) NOT NULL,-- 专业
BorrowNum VARCHAR(20),-- 在借书数
CHECK(Sex IN('男','女'))
);
#出版社(Publisher)信息表
CREATE TABLE Publisher
(
PublisherID VARCHAR(20) PRIMARY KEY,
PublisherName VARCHAR(200) NOT NULL,
Phone VARCHAR(20) NOT NULL,
Address VARCHAR(200) NOT NULL
);
#借阅信息表Borrow
CREATE TABLE Borrow
(
ReaderID VARCHAR(20),
BookID VARCHAR(20),
BorrowTime DATE,
ReturnTime DATE,
PRIMARY KEY(ReaderID,BookID),
FOREIGN KEY(ReaderID)
REFERENCES Reader(ReaderID),
FOREIGN KEY(BookID)
REFERENCES Book(BookID)
);
#出版信息表
CREATE TABLE Publish
(
PublisherID VARCHAR(20),
BookID VARCHAR(20),
PublishNum INT NOT NULL,
PublishTime DATE NOT NULL,
PRIMARY KEY(PublisherID,BookID),
FOREIGN KEY(PublisherID)
REFERENCES Publisher(PublisherID),
FOREIGN KEY(BookID)
REFERENCES Book(BookID)
);
SHOW TABLES;
实施结果:
4、表数据添加与处理
INSERT INTO Book VALUES
('b001', '《MySQL数据库技术及应用》', '计算机类', '苗雪兰', 'p003', 29.50, 10, 4),
('b002', '《软件工程》', '计算机类', '李建中', 'p003', 48.00, 8, 2),
('b003', '《MySQL数据库技术与应用》', '计算机类', '张素青,翟慧,黄静 ', 'p002', 42.00, 15, 8),
('b004', '《WEB技术》', '计算机类', '汤惟', 'p004', 32.00, 12, 4),
('b005', '《自动控制原理》', '自动化类', '胡寿松', 'p005', 52.00, 15, 8),
('b006', '《线性控制理论》', '自动化类', '郑大钟', 'p005', 32.50, 10, 2),
('b007', '《计算机导论》', '计算机类', '袁方', 'p003', 49.8, 15, 5),
('b008', '《计算机导论》', '计算机类', '王玉龙', 'p004', 46.00, 10, 3),
('b009', '《算法导论》', '计算机类', '科曼', 'p005', 128, 10, 2),
('b010', '《数学之美》', '基础类', '吴军', 'p002', 35.00, 10, 0),
('b011', '《计算机网络技术》', '网络技术类', '施晓秋', 'p001', 23.70, 10, 4);
SELECT * FROM Book;
INSERT INTO Reader VALUES
('r001','李芳芳','女','软件工程', 3),
('r002','刘钦','男','自动化', 2),
('r003','王琳','女','自动化', 3),
('r004','张芬芳','女','网络工程', 4),
('r005','陈丽丽','女','软件工程', 5);
SELECT * FROM Reader;
INSERT INTO Publisher VALUES
('p001', '高等教育出版社', '028-83203676', '四川省成都市成华区建设北路'),
('p002', '人民邮电出版社', '13504411556', '北京市大兴区育祥街2号'),
('p003', '清华出版社', '13219096229', '北京市海淀区清华科技园学研大厦a'),
('p004', '电子工业出版社', '010-88254338', '北京丰台区金家村288号'),
('p005', '机械工业出版社', '010-88379033', '北京西城区百万庄大街22号院3');
SELECT * FROM Publisher;
INSERT INTO Borrow VALUES
('r001','b001',"2022-04-19 09:58:03","2022-05-19 08:38:23"),
('r001','b002',"2022-07-01 15:28:12","2022-07-18 09:14:02"),
('r001','b007',"2022-07-01 15:28:12","2022-07-18 09:14:02"),
('r001','b010',"2022-10-01 16:06:02",NULL),
('r002','b005',"2022-07-03 15:28:30","2022-07-17 19:10:32"),
('r002','b006',"2022-07-03 15:28:30",NULL),
('r002','b010',"2022-09-09 16:06:02",NULL),
('r003','b001',"2022-05-01 11:28:24",NULL),
('r003','b005',"2022-11-01 10:43:12","2022-12-01 14:09:56"),
('r003','b006',"2022-05-01 11:28:24",NULL),
('r004','b003',"2022-11-11 16:06:02",NULL),
('r004','b010',"2022-11-11 10:43:12","2022-12-01 14:09:56"),
('r004','b011',"2022-11-01 16:06:02",NULL),
('r005','b003',"2022-10-15 16:06:02","2022-12-01 14:09:56"),
('r005','b004',"2022-10-15 10:43:12","2022-12-01 14:09:56"),
('r005','b010',"2022-11-01 16:06:02",NULL);
SELECT * FROM Borrow;
INSERT INTO Publish VALUES
('p001','b011',50,'2021-09-02'),
('p002','b003',40,'2020-07-06'),
('p002','b010',100,'2021-09-25'),
('p003','b001',120,'2020-11-02'),
('p003','b002',50,'2021-07-03'),
('p003','b007',120,'2020-03-02'),
('p004','b004',100,'2022-01-12'),
('p004','b008',120,'2022-05-19'),
('p005','b005',120,'2020-03-02'),
('p005','b006',100,'2021-11-12'),
('p005','b009',120,'2022-07-16'),
('p005','b004',120,'2022-07-16');
SELECT * FROM Publish;
实施结果:
2. 编写SQL语句实现以下操作要求:
5、数据查询
6、数据库对象的创建
7、数据库安全管理与维护
(1)用户管理
(2)权限管理
(3)数据备份与恢复
本次实训就到这里结束啦!
有什么疑问可以在评论区提,文章中若有不当之处,也恳请各位帮忙指正
如果本文对铁子们有所帮助的话,可以一键三连哦