Задать вопрос
Ответы пользователя по тегу Проектирование баз данных
  • Как сделать такую базу данных в Mysql?

    B-Erolskiy
    @B-Erolskiy
    Unity Developer
    Все правильно: связь между таблицами должна быть М:М (многие ко многим), так как у одного автора может быть много книг, и у одной книги может быть много авторов. Вы же спроектировали БД, в которой у книги может быть только один автор.

    БД будет примерно такой:

    CREATE TABLE authors
    (
        id INT PRIMARY KEY AUTO_INCREMENT,
        author_name VARCHAR(100) NOT NULL UNIQUE
    );
    
    CREATE TABLE books
    (
        id INT PRIMARY KEY AUTO_INCREMENT,
        book_title VARCHAR(100) NOT NULL
    );
    
    CREATE TABLE book_author_id
    (
        id INT PRIMARY KEY AUTO_INCREMENT,
        author_id INT NOT NULL,
        book_id INT NOT NULL,
    
        FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE CASCADE,
        FOREIGN KEY (book_id) REFERENCES books (id) ON DELETE CASCADE
    );


    И тогда выборка данных по вашему условию будет:

    SELECT authors.author_name, COUNT(book_author_id.author_id) as count
    FROM authors
    LEFT JOIN book_author_id
        ON book_author_id.author_id= authors.id
    LEFT JOIN books
        ON book_author_id.book_id= books.id
    GROUP BY authors.author_name
    HAVING COUNT(DISTINCT book_author_id.author_id) >= 3;
    Ответ написан
    2 комментария