Загрузка данных
-- =========================================================
-- БАЗА ДАННЫХ:
-- УПРАВЛЕНИЕ БИБЛИОТЕЧНЫМ ФОНДОМ
-- (SQL-код по вашей ER/UML схеме)
-- =========================================================
CREATE DATABASE LibraryDB;
USE LibraryDB;
-- =========================================================
-- ТАБЛИЦА: ИЗДАТЕЛЬСТВО
-- =========================================================
CREATE TABLE Publisher (
publisher_id INT PRIMARY KEY AUTO_INCREMENT,
publisher_name VARCHAR(100) NOT NULL,
address VARCHAR(150),
phone VARCHAR(20)
);
-- =========================================================
-- ТАБЛИЦА: ПОЛКА
-- =========================================================
CREATE TABLE Shelf (
shelf_id INT PRIMARY KEY AUTO_INCREMENT,
shelf_number VARCHAR(20) NOT NULL,
hall_name VARCHAR(50),
section_name VARCHAR(50)
);
-- =========================================================
-- ТАБЛИЦА: КНИГА
-- =========================================================
CREATE TABLE Book (
book_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
author VARCHAR(150) NOT NULL,
genre VARCHAR(100),
publish_year INT,
isbn VARCHAR(30) UNIQUE,
publisher_id INT,
shelf_id INT,
FOREIGN KEY (publisher_id)
REFERENCES Publisher(publisher_id),
FOREIGN KEY (shelf_id)
REFERENCES Shelf(shelf_id)
);
-- =========================================================
-- ТАБЛИЦА: ЧИТАТЕЛЬ
-- =========================================================
CREATE TABLE Reader (
reader_id INT PRIMARY KEY AUTO_INCREMENT,
full_name VARCHAR(150) NOT NULL,
address VARCHAR(200),
phone VARCHAR(20),
reader_ticket_number VARCHAR(30) UNIQUE
);
-- =========================================================
-- ТАБЛИЦА: БИБЛИОТЕКАРЬ
-- =========================================================
CREATE TABLE Librarian (
librarian_id INT PRIMARY KEY AUTO_INCREMENT,
full_name VARCHAR(150) NOT NULL,
position_name VARCHAR(100),
phone VARCHAR(20)
);
-- =========================================================
-- ТАБЛИЦА: ВЫДАЧА
-- =========================================================
CREATE TABLE Issue (
issue_id INT PRIMARY KEY AUTO_INCREMENT,
issue_date DATE NOT NULL,
return_date DATE,
status VARCHAR(50),
reader_id INT,
book_id INT,
librarian_id INT,
FOREIGN KEY (reader_id)
REFERENCES Reader(reader_id),
FOREIGN KEY (book_id)
REFERENCES Book(book_id),
FOREIGN KEY (librarian_id)
REFERENCES Librarian(librarian_id)
);
-- =========================================================
-- ДОПОЛНИТЕЛЬНЫЕ ИНДЕКСЫ
-- =========================================================
CREATE INDEX idx_book_title
ON Book(title);
CREATE INDEX idx_book_author
ON Book(author);
CREATE INDEX idx_reader_name
ON Reader(full_name);
-- =========================================================
-- ТЕСТОВЫЕ ДАННЫЕ
-- =========================================================
-- Издательства
INSERT INTO Publisher (
publisher_name,
address,
phone
)
VALUES
(
'Эксмо',
'Москва, ул. Ленина 10',
'+7-900-111-22-33'
),
(
'АСТ',
'Санкт-Петербург, Невский проспект 5',
'+7-900-555-66-77'
);
-- Полки
INSERT INTO Shelf (
shelf_number,
hall_name,
section_name
)
VALUES
(
'A-01',
'Главный зал',
'Программирование'
),
(
'B-15',
'Художественный зал',
'Романы'
);
-- Книги
INSERT INTO Book (
title,
author,
genre,
publish_year,
isbn,
publisher_id,
shelf_id
)
VALUES
(
'Java. Полное руководство',
'Герберт Шилдт',
'Программирование',
2021,
'978-5-17-123456-7',
1,
1
),
(
'Война и мир',
'Лев Толстой',
'Роман',
2018,
'978-5-17-765432-1',
2,
2
),
(
'Преступление и наказание',
'Фёдор Достоевский',
'Классика',
2019,
'978-5-17-888888-8',
2,
2
);
-- Читатели
INSERT INTO Reader (
full_name,
address,
phone,
reader_ticket_number
)
VALUES
(
'Иванов Иван Иванович',
'Москва, ул. Гагарина 15',
'+7-999-123-45-67',
'RB-1001'
),
(
'Петров Петр Петрович',
'Казань, ул. Баумана 8',
'+7-999-777-88-99',
'RB-1002'
);
-- Библиотекари
INSERT INTO Librarian (
full_name,
position_name,
phone
)
VALUES
(
'Смирнова Анна Сергеевна',
'Главный библиотекарь',
'+7-999-444-55-66'
),
(
'Кузнецов Сергей Иванович',
'Библиотекарь',
'+7-999-111-33-22'
);
-- Выдача книг
INSERT INTO Issue (
issue_date,
return_date,
status,
reader_id,
book_id,
librarian_id
)
VALUES
(
'2025-05-01',
'2025-05-15',
'Возвращена',
1,
1,
1
),
(
'2025-05-10',
NULL,
'Выдана',
2,
2,
2
);
-- =========================================================
-- SQL-ЗАПРОСЫ
-- =========================================================
-- Все книги
SELECT * FROM Book;
-- Все читатели
SELECT * FROM Reader;
-- Все выданные книги
SELECT
Reader.full_name AS Читатель,
Book.title AS Книга,
Issue.issue_date AS Дата_выдачи,
Issue.return_date AS Дата_возврата,
Issue.status AS Статус
FROM Issue
JOIN Reader
ON Issue.reader_id = Reader.reader_id
JOIN Book
ON Issue.book_id = Book.book_id;
-- Книги и издательства
SELECT
Book.title,
Publisher.publisher_name
FROM Book
JOIN Publisher
ON Book.publisher_id = Publisher.publisher_id;
-- Книги на полках
SELECT
Book.title,
Shelf.shelf_number,
Shelf.hall_name
FROM Book
JOIN Shelf
ON Book.shelf_id = Shelf.shelf_id;
-- Поиск книги по автору
SELECT *
FROM Book
WHERE author = 'Лев Толстой';
-- Просроченные книги
SELECT
Reader.full_name,
Book.title,
Issue.return_date
FROM Issue
JOIN Reader
ON Issue.reader_id = Reader.reader_id
JOIN Book
ON Issue.book_id = Book.book_id
WHERE Issue.return_date < CURDATE()
AND Issue.status <> 'Возвращена';
-- Количество книг в библиотеке
SELECT COUNT(*) AS total_books
FROM Book;
-- Количество читателей
SELECT COUNT(*) AS total_readers
FROM Reader;