-- 1. Справочник авторов (выносим авторов отдельно)
create table авторы (
код_автора int primary key,
фио_автора varchar(255) not null
);
-- 2. Таблица книг (теперь здесь только код автора, а не его имя)
create table книги (
код_книги int primary key,
название varchar(255) not null,
код_автора int not null references авторы(код_автора), -- Внешний ключ на авторов
год_издания int check (год_издания > 1900),
количество_экземпляров int check (количество_экземпляров >= 0)
);
-- 3. Таблица читателей
create table читатели (
код_читателя int primary key,
фио varchar(255) not null,
дата_рождения date,
адрес varchar(500),
телефон varchar(20)
);
-- 4. Таблица выдач (связующая таблица)
create table выдачи (
код_выдачи int primary key,
код_книги int not null references книги(код_книги),
код_читателя int not null references читатели(код_читателя),
дата_выдачи date not null default getdate(),
дата_возврата date
);
-- Заполняем авторов
insert into авторы (код_автора, фио_автора) values
(1, 'Лев Толстой'),
(2, 'Федор Достоевский'),
(3, 'Михаил Булгаков'),
(4, 'Джордж Оруэлл'),
(5, 'Дж. К. Роулинг');
-- Заполняем книги (указываем код автора)
insert into книги (код_книги, название, код_автора, год_издания, количество_экземпляров) values
(1, 'Война и мир', 1, 1920, 5),
(2, 'Преступление и наказание', 2, 1930, 3),
(3, 'Мастер и Маргарита', 3, 1967, 4),
(4, '1984', 4, 1949, 6),
(5, 'Гарри Поттер и философский камень', 5, 1997, 8),
(6, 'Анна Каренина', 1, 1901, 3),
(7, 'Идиот', 2, 1904, 2);
-- Заполняем читателей
insert into читатели (код_читателя, фио, дата_рождения, адрес, телефон) values
(1, 'Иванов Иван Иванович', '1990-05-12', 'ул. Ленина, 10', '+79001112233'),
(2, 'Петрова Анна Сергеевна', '1985-08-23', 'пр. Мира, 45', '+79004445566'),
(3, 'Сидоров Алексей Петрович', '1992-11-30', 'ул. Гагарина, 7', '+79007778899');
-- Заполняем выдачи
insert into выдачи (код_выдачи, код_книги, код_читателя, дата_выдачи, дата_возврата) values
(1, 1, 1, '2023-10-01', '2023-10-15'),
(2, 2, 1, '2023-10-05', null),
(3, 3, 2, '2023-10-10', '2023-10-25'),
(4, 4, 3, '2023-10-12', null);