3. Реализовать таблицы книг и авторов
Условие задачи:
Реализовать SQL-схему базы данных из двух таблиц: books и autors. Нужно использовать связь многие ко многим.
Спойлеры к решению
Подсказки
- Связь многие ко многим нельзя нормально реализовать только двумя таблицами.
- Нужна третья промежуточная таблица, например
book_autors. - В таблице
booksхранятся книги. - В таблице
autorsхранятся авторы. - В таблице
book_autorsхранятся парыbook_idиautor_id. - Поля
book_idиautor_idдолжны быть внешними ключами. - Чтобы одна и та же пара книга-автор не дублировалась, можно сделать составной первичный ключ из
book_idиautor_id.
Решение
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL
);
CREATE TABLE autors (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE book_autors (
book_id INTEGER NOT NULL,
autor_id INTEGER NOT NULL,
PRIMARY KEY (book_id, autor_id),
CONSTRAINT fk_book_autors_book
FOREIGN KEY (book_id)
REFERENCES books(id)
ON DELETE CASCADE,
CONSTRAINT fk_book_autors_autor
FOREIGN KEY (autor_id)
REFERENCES autors(id)
ON DELETE CASCADE
);
Эта схема реализует связь многие ко многим: одна книга может иметь нескольких авторов, и один автор может быть связан с несколькими книгами. Для этого используется промежуточная таблица book_autors, которая хранит пары book_id и autor_id.