Загрузка данных
-- Удаляем старые таблицы, если они существуют
DROP TABLE IF EXISTS Loans;
DROP TABLE IF EXISTS BookCategories;
DROP TABLE IF EXISTS Copies;
DROP TABLE IF EXISTS LibraryBooks;
DROP TABLE IF EXISTS Categories;
DROP TABLE IF EXISTS PublishingHouses;
DROP TABLE IF EXISTS LibraryReaders;
-- ==========================================
-- 1. ЧИТАТЕЛИ
-- ==========================================
CREATE TABLE LibraryReaders (
reader_id INT PRIMARY KEY IDENTITY(1,1),
surname VARCHAR(50) NOT NULL,
first_name VARCHAR(50) NOT NULL,
patronymic VARCHAR(50),
address VARCHAR(150) NOT NULL,
phone_work VARCHAR(20),
phone_home VARCHAR(20),
date_of_birth DATE NOT NULL,
library_card INT NOT NULL UNIQUE,
CHECK (phone_work IS NOT NULL OR phone_home IS NOT NULL)
);
-- 3 записи
INSERT INTO LibraryReaders
(surname, first_name, patronymic, address, phone_work, phone_home, date_of_birth, library_card)
VALUES
('Смирнов', 'Алексей', 'Игоревич', 'ул. Молодежная, 12', '89001234567', NULL, '2001-04-12', 2001),
('Кузнецова', 'Мария', 'Андреевна', 'ул. Центральная, 25', NULL, '89007654321', '1999-08-21', 2002),
('Орлов', 'Дмитрий', 'Сергеевич', 'ул. Садовая, 8', '89005554433', '89001113322', '2003-01-17', 2003);
-- ==========================================
-- 2. ОБЛАСТИ ЗНАНИЙ
-- ==========================================
CREATE TABLE Categories (
category_id INT PRIMARY KEY IDENTITY(1,1),
category_number INT NOT NULL UNIQUE,
category_name VARCHAR(100) NOT NULL
);
-- 3 записи
INSERT INTO Categories
(category_number, category_name)
VALUES
(201, 'Литература'),
(202, 'Программирование'),
(203, 'История');
-- ==========================================
-- 3. ИЗДАТЕЛЬСТВА
-- ==========================================
CREATE TABLE PublishingHouses (
publisher_id INT PRIMARY KEY IDENTITY(1,1),
publisher_name VARCHAR(100) NOT NULL,
publisher_city VARCHAR(100) NOT NULL
);
-- 3 записи
INSERT INTO PublishingHouses
(publisher_name, publisher_city)
VALUES
('Просвещение', 'Москва'),
('Питер', 'Санкт-Петербург'),
('Альфа-Книга', 'Москва');
-- ==========================================
-- 4. КНИГИ
-- ==========================================
CREATE TABLE LibraryBooks (
book_id INT PRIMARY KEY IDENTITY(1,1),
book_code VARCHAR(50) NOT NULL UNIQUE,
book_title VARCHAR(150) NOT NULL,
main_author VARCHAR(100),
other_authors VARCHAR(255),
publisher_id INT NOT NULL,
year_published INT NOT NULL,
pages INT NOT NULL,
FOREIGN KEY (publisher_id)
REFERENCES PublishingHouses(publisher_id),
CHECK (year_published >= 1960),
CHECK (pages > 0),
CHECK (
main_author IS NOT NULL
OR other_authors IS NULL
)
);
-- 3 записи
INSERT INTO LibraryBooks
(book_code, book_title, main_author, other_authors, publisher_id, year_published, pages)
VALUES
('LB001', 'Мастер и Маргарита', 'Булгаков М.А.', NULL, 1, 1988, 480),
('LB002', 'Основы C++', 'Иванов А.В.', 'Петров И.С.', 2, 2021, 520),
('LB003', 'История России', 'Соколов Н.П.', NULL, 3, 2019, 640);
-- ==========================================
-- 5. СВЯЗЬ КНИГ И ОБЛАСТЕЙ ЗНАНИЙ
-- ==========================================
CREATE TABLE BookCategories (
book_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (book_id, category_id),
FOREIGN KEY (book_id)
REFERENCES LibraryBooks(book_id),
FOREIGN KEY (category_id)
REFERENCES Categories(category_id)
);
-- 3 записи
INSERT INTO BookCategories
(book_id, category_id)
VALUES
(1, 1),
(2, 2),
(3, 3);
-- ==========================================
-- 6. ЭКЗЕМПЛЯРЫ КНИГ
-- ==========================================
CREATE TABLE Copies (
copy_id INT PRIMARY KEY IDENTITY(1,1),
inventory_code INT NOT NULL UNIQUE,
book_id INT NOT NULL,
available BIT NOT NULL DEFAULT 1,
FOREIGN KEY (book_id)
REFERENCES LibraryBooks(book_id)
);
-- 3 записи
INSERT INTO Copies
(inventory_code, book_id, available)
VALUES
(7001, 1, 1),
(7002, 2, 1),
(7003, 3, 1);
-- ==========================================
-- 7. ВЫДАЧА КНИГ
-- ==========================================
CREATE TABLE Loans (
loan_id INT PRIMARY KEY IDENTITY(1,1),
reader_id INT NOT NULL,
copy_id INT NOT NULL,
date_issued DATE NOT NULL,
date_returned DATE,
FOREIGN KEY (reader_id)
REFERENCES LibraryReaders(reader_id),
FOREIGN KEY (copy_id)
REFERENCES Copies(copy_id),
CHECK (
date_returned IS NULL
OR date_returned >= date_issued
)
);
-- 3 записи
INSERT INTO Loans
(reader_id, copy_id, date_issued, date_returned)
VALUES
(1, 1, '2026-09-01', NULL),
(2, 2, '2026-08-20', '2026-08-30'),
(3, 3, '2026-09-02', NULL);
-- ==========================================
-- ПРОВЕРКА
-- ==========================================
SELECT * FROM LibraryReaders;
SELECT * FROM Categories;
SELECT * FROM PublishingHouses;
SELECT * FROM LibraryBooks;
SELECT * FROM BookCategories;
SELECT * FROM Copies;
SELECT * FROM Loans;