Реализовать таблицы книг и авторов

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.