Sistema de préstamo de libros para proyecto de formación de bases de datos

Tabla de contenido

1. Análisis de la demanda

2. Diseño de estructura conceptual

3. Diseño de estructura lógica 

4. Diseño de la estructura física


1. Análisis de la demanda

La información del libro (Book) incluye el número del libro (BookID), el nombre del libro (BookName), la categoría del libro (BookType), el nombre del autor (Author), el número de la editorial (PublishID), el precio unitario (Price), el número total de libros (BookSum), y cantidad de la biblioteca (existencia); la información del lector incluye: ID del lector (ReaderID), nombre del lector (ReaderName), sexo (sexo), especialización (tema), número de libros prestados (BorrowNum); la información del editor (Publisher) incluye: Publisher ID (PublisherID), Nombre del editor (PublisherName), Teléfono (Teléfono), Dirección (Dirección).

Cualquier lector puede tomar prestado (Borrow) varios libros, y cualquier tipo de libro puede ser prestado por varias personas; al tomar prestado cada libro, es necesario registrar el tiempo de préstamo (BorrowTime), y se reduce el número del libro en la biblioteca por uno; al devolver el libro, se debe registrar el tiempo de devolución (ReturnTime), y el número de libros en la biblioteca se incrementa en uno;

Una editorial puede publicar (Publish) muchos tipos de libros, y un tipo de libro puede ser publicado por varias editoriales. Al publicar, registre el número de publicaciones (PublishNum) y el tiempo de publicación (PublishTime) de cada libro.

2. Diseño de estructura conceptual

3. Diseño de estructura lógica 

Libro(BookID,BookName,BookType,Autor,PublishID,Precio,BookSum,Stock)。

Lector ( ID del lector , Nombre del lector, Sexo, Asunto, Número de préstamo)。

Editor ( ID del editor , Nombre del editor, Teléfono, Dirección)。

Préstamo ( ReaderID, BookID , BorrowTime, ReturnTime)。

Publicar ( ID de editor, número de publicación de ID de libro, hora de publicación)。

4. Diseño de la estructura física

Tabla 1: Estructura de la tabla de información del libro

  nombre del campo

 tipo de datos

  longitud

¿Se permite estar vacío?

Observación

ID del libro

VARCHAR

2 0

    No

Clave primaria

Nombre del libro

VARCHAR

100

No

no vacío

Tipo de libro

VARCHAR

100

No

no vacío

Autor

VARCHAR

100

No

no vacío

ID de publicación

VARCHAR

2 0

No

no vacío

Precio

DECIMAL

(7,2)

No

no vacío

LibroSuma

EN T

Existencias

EN T

   Tabla 2: Estructura de la tabla de información del lector

  nombre del campo

   tipo de datos

  longitud

¿Se permite estar vacío?

Observación

ID del lector

VARCHAR

2 0

 No

Clave primaria

Nombre del lector

VARCHAR

100

No

no vacío

Sexo

VARCHAR

2 0

No

examinar

Sujeto

VARCHAR

100

No

no vacío

PréstamoNúm

EN T

Tabla 3: Estructura de la tabla de información del editor

  nombre del campo

   tipo de datos

  longitud

¿Se permite estar vacío?

Observación

ID de editor

VARCHAR

2 0

 No

Clave primaria

Nombre del editor

VARCHAR

200

No

no vacío

Teléfono

VARCHAR

2 0

No

no vacío

DIRECCIÓN

VARCHAR

20 0

No

no vacío

Tabla 4: Estructura de la tabla de información sobre préstamos 

  nombre del campo

   tipo de datos

  longitud

¿Se permite estar vacío?

Observación

ID del lector

VARCHAR

2 0

No

Clave primaria

clave externa

ID del libro

VARCHAR

2 0

No

Clave primaria

clave externa

BorrowTime

FECHA

hora de retorno

FECHA

En la Tabla 4, ReaderID y bookID se utilizan como clave primaria conjunta

Tabla 5: Estructura de la tabla de información de publicación 

  nombre del campo

   tipo de datos

  longitud

¿Se permite estar vacío?

Observación

ID de editor

VARCHAR

2 0

No

Clave primaria

ID del libro

VARCHAR

2 0

No

Clave primaria

PublishNum

EN T

No

no vacío

Tiempo de publicación

FECHA

No

no vacío

3. Crear base de datos y tabla de datos

(1) Cree una base de datos llamada "Biblioteca" ;

(2) De acuerdo con la estructura de la tabla en el diseño lógico , cree todas las tablas de datos de la base de datos ;

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;

Resultados de la implementación:

4. Adición y procesamiento de datos de tabla

  1. Agregar registros iniciales a la tabla de datos
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;

Resultados de la implementación:

2. Escriba sentencias SQL para cumplir con los siguientes requisitos operativos:

  • 图书馆新购买了5本“清华出版社”出版的“计算机类”的“严蔚敏”编写的图书《数据结构》,单价“35”元,现需要录入到系统中。
  • 增加一条读者借阅记录,借阅时间为当前时间(自动获取系统时间),归还时间为空,内容自定。
  • 修改一条图书信息,如,修改某本图书(图书编号)的单价,内容自定。
  • 删除“xx”作者编写的所有图书,作者姓名自行确定。

5、数据查询

  1. 编写SQL语句实现以下查询要求:
  • 查询图书名称以“论”结束的所有图书信息。
  • 查询所有“在馆数量”小于3的图书信息。
  • 查询“人民邮电出版社”出版的图书包括哪些类别。
  • 查询读者中男女生的人数和总人数。
  • 查询借阅图书次数最多的前三名学生的姓名。
  • 查询最受读者喜欢(借阅次数最多)的图书名称和被借阅的次数。
  • ​​​​​​​
  • 查询所有超过60天未归还的图书的读者姓名、图书名称、借阅时间。
  • 查询每种图书的所有出版社名称和单价,并按单价从低到高的顺序排序(图书名称相同表示同一种图书)。
  • 统计每个读者借阅图书的总数量,降序排序,并输出前5名
  • 查询借阅了“b005”这本图书的所有读者的姓名(使用exists)。

 

  • 查询借阅了图书编号“b001”和“b003”的读者的学号(图书编号可根据具体添加的图书信息进行修改)。

 

6、数据库对象的创建

  • 在出版社表上创建关于“出版社姓名”列的一个唯一索引
  • 创建一个包含“读者姓名”、借阅的“图书名称”、“借阅时间”和图书“单价”等信息的视图
  • 创建一个存储过程,实现查询指定出版社(出版社名称)出版某本图书(图书名称)的数量和单价。(其中,出版社名称和图书名称以存储过程的输入参数设定),并执行该存储过程检查其正确性。
  • 创建一个触发器,使得读者借阅某本图书时,图书表中该图书的在馆数量减一。
  • 创建一个触发器,使得读者归还某本图书时,图书表中该图书的在馆数量加一。

7、数据库安全管理与维护

(1)用户管理

  • 通过SQL语句添加数据库用户“sa”,密码为“sa”;
  • 修改用户“sa”的用户名为“admin1”,密码为“123456”;

 

(2)权限管理

  • 授予admin1用户对“借阅”数据表的insert、select、update和delete权限;
  • 收回admin1用户对“借阅”数据表的insert权限。

(3)数据备份与恢复

  • 使用mysqldump命令对Library数据库进行备份到文件“e:\library\library.sql”;
  • 使用mysql命令将备份文件library_bak.sql恢复到数据库。
  • 对library数据库中book表中的数据进行备份到文件“e:/library/book_bak.txt”中;
  • 将“e:/library/book_bak.txt”文件中的数据恢复到library数据库的book表中。

 

 本次实训就到这里结束啦!

有什么疑问可以在评论区提,文章中若有不当之处,也恳请各位帮忙指正

如果本文对铁子们有所帮助的话,可以一键三连哦

 

Supongo que te gusta

Origin blog.csdn.net/GANTENJ/article/details/128320807
Recomendado
Clasificación