Загрузка данных


-- =========================================
-- БАЗА ДАННЫХ: Библиотечный фонд
-- =========================================

CREATE DATABASE LibraryDB;
USE LibraryDB;

-- =========================================
-- Таблица: Издательство
-- =========================================

CREATE TABLE Publisher (
    publisher_id INT PRIMARY KEY AUTO_INCREMENT,
    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 VARCHAR(50),
    section_name VARCHAR(50)
);

-- =========================================
-- Таблица: Читатель
-- =========================================

CREATE TABLE Reader (
    reader_id INT PRIMARY KEY AUTO_INCREMENT,
    full_name VARCHAR(100) NOT NULL,
    address VARCHAR(150),
    phone VARCHAR(20),
    ticket_number VARCHAR(20) UNIQUE
);

-- =========================================
-- Таблица: Библиотекарь
-- =========================================

CREATE TABLE Librarian (
    librarian_id INT PRIMARY KEY AUTO_INCREMENT,
    full_name VARCHAR(100) NOT NULL,
    position_name VARCHAR(50),
    phone VARCHAR(20)
);

-- =========================================
-- Таблица: Книга
-- =========================================

CREATE TABLE Book (
    book_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(150) NOT NULL,
    author VARCHAR(100) NOT NULL,
    genre VARCHAR(50),
    publish_year INT,
    isbn VARCHAR(20) 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 Issue (
    issue_id INT PRIMARY KEY AUTO_INCREMENT,

    issue_date DATE NOT NULL,
    return_date DATE,

    status VARCHAR(30),

    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)
);

-- =========================================
-- Тестовые данные
-- =========================================

INSERT INTO Publisher (name, address, phone)
VALUES
('Эксмо', 'Москва', '+7-900-111-22-33'),
('АСТ', 'Санкт-Петербург', '+7-900-444-55-66');

INSERT INTO Shelf (shelf_number, hall, section_name)
VALUES
('A-01', 'Зал 1', 'Программирование'),
('B-15', 'Зал 2', 'Художественная литература');

INSERT INTO Reader (full_name, address, phone, ticket_number)
VALUES
('Иванов Иван Иванович', 'Москва', '+7-999-123-45-67', 'RB1001'),
('Петров Петр Петрович', 'Казань', '+7-999-222-33-44', 'RB1002');

INSERT INTO Librarian (full_name, position_name, phone)
VALUES
('Смирнова Анна', 'Главный библиотекарь', '+7-999-555-66-77');

INSERT INTO Book (
    title,
    author,
    genre,
    publish_year,
    isbn,
    publisher_id,
    shelf_id
)
VALUES
(
    'Изучаем SQL',
    'Джон Смит',
    'Образование',
    2020,
    '978-5-17-123456-7',
    1,
    1
),
(
    'Война и мир',
    'Лев Толстой',
    'Роман',
    1869,
    '978-5-17-765432-1',
    2,
    2
);

INSERT INTO Issue (
    issue_date,
    return_date,
    status,
    reader_id,
    book_id,
    librarian_id
)
VALUES
(
    '2025-05-01',
    '2025-05-15',
    'Возвращена',
    1,
    1,
    1
);

-- =========================================
-- Примеры запросов
-- =========================================

-- Все книги

SELECT * FROM Book;

-- Книги с издательствами

SELECT
    Book.title,
    Book.author,
    Publisher.name AS publisher
FROM Book
JOIN Publisher
ON Book.publisher_id = Publisher.publisher_id;

-- Какие книги взял читатель

SELECT
    Reader.full_name,
    Book.title,
    Issue.issue_date,
    Issue.return_date
FROM Issue
JOIN Reader
ON Issue.reader_id = Reader.reader_id
JOIN Book
ON Issue.book_id = Book.book_id;

-- Просроченные книги

SELECT
    Book.title,
    Reader.full_name,
    Issue.return_date
FROM Issue
JOIN Book
ON Issue.book_id = Book.book_id
JOIN Reader
ON Issue.reader_id = Reader.reader_id
WHERE Issue.return_date < CURDATE()
AND Issue.status <> 'Возвращена';